code: public synchronized boolean open() throws InvalidDataException {
  		boolean allRight = false;
  		if (storage.isOpen() || redoStore.isOpen()) {
  			throw new InvalidStateException();
  		}
  		storage.open(readOnly);
  		redoStore.open(readOnly);
  		try {
  			if ((storage.sizeInBlocks() == 0) && (redoStore.isEmpty())) {
  				clearStates();
  				validState = true;
  				return true;
  			}
  			try {
  				boolean isClean = readMetaData();
  				// log.debug(this.hashCode() + "::open() clean=" + isClean);
  				if (isClean) {
  					if (writeMetaData(false)) {
  						populateCache();
  						allRight = true;
  					}
  				} else {
  					// Broken
  					throw new InvalidDataException("NEED RECOVERY");
  				}
  			} catch (InvalidDataException e) {
  				validState = false;
  				storage.close();
  				redoStore.close();
  				throw e;
  			}
  		} finally {
  			releaseNodes();
  		}
  		validState = true;
  		return allRight;
  	}
docs: Open file
  
  @return boolean if all right
  @throws InvalidDataException if metadata is invalid