Skip to content

Commit

Permalink
每个Database实例包含多个存储引擎实例
Browse files Browse the repository at this point in the history
  • Loading branch information
codefollower committed May 14, 2015
1 parent 8c19be2 commit 078c8e1
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 23 deletions.
46 changes: 24 additions & 22 deletions lealone-sql/src/main/java/org/lealone/engine/Database.java
Expand Up @@ -13,8 +13,10 @@
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.StringTokenizer;
import java.util.concurrent.CopyOnWriteArrayList;

import org.lealone.api.DatabaseEventListener;
import org.lealone.api.ErrorCode;
Expand Down Expand Up @@ -275,7 +277,7 @@ private void openDatabase(int traceLevelFile, int traceLevelSystemOut) {
publicRole = new Role(this, 0, Constants.PUBLIC_ROLE_NAME, true);
roles.put(Constants.PUBLIC_ROLE_NAME, publicRole);
systemUser.setAdmin(true);
systemSession = createSystemSession(systemUser, ++nextSessionId);
systemSession = new Session(this, systemUser, ++nextSessionId);

openMetaTable();

Expand All @@ -298,10 +300,6 @@ private void openDatabase(int traceLevelFile, int traceLevelSystemOut) {
}
}

private Session createSystemSession(User user, int id) {
return new Session(this, user, id);
}

private void openMetaTable() {
CreateTableData data = new CreateTableData();
ArrayList<Column> cols = data.columns;
Expand Down Expand Up @@ -337,14 +335,14 @@ private void openMetaTable() {

Collections.sort(records);
for (MetaRecord rec : records) {
objectIds.set(rec.getId());
rec.execute(this, systemSession, eventListener);
}

recompileInvalidViews(systemSession);
starting = false;
}

//TODO session参数就是systemSession,另外是否有必要来来回回recompile
private void recompileInvalidViews(Session session) {
boolean recompileSuccessful;
do {
Expand Down Expand Up @@ -836,14 +834,14 @@ public synchronized void removeSession(Session session) {
trace.info("disconnecting session #{0}", session.getId());
}
}
if (userSessions.size() == 0 && session != systemSession) {
if (userSessions.isEmpty() && session != systemSession) {
if (closeDelay == 0) {
close(false);
} else if (closeDelay < 0) {
return;
} else {
delayedCloser = new DatabaseCloser(this, closeDelay * 1000, false);
delayedCloser.setName("H2 Close Delay " + getShortName());
delayedCloser.setName(getShortName() + " database close delay");
delayedCloser.setDaemon(true);
delayedCloser.start();
}
Expand Down Expand Up @@ -968,7 +966,8 @@ synchronized void close(boolean fromShutdownHook) {
}
getDatabaseEngine().closeDatabase(databaseName);

getStorageEngine().close(this);
for (StorageEngine se : getStorageEngines())
se.close(this);
}

/**
Expand Down Expand Up @@ -1986,7 +1985,8 @@ public int readLob(long lobId, byte[] hmac, long offset, byte[] buff, int off, i
}

public void backupTo(String fileName) {
getStorageEngine().backupTo(this, fileName);
for (StorageEngine se : getStorageEngines())
se.backupTo(this, fileName);
}

public Index createIndex(TableBase table, int indexId, String indexName, IndexColumn[] indexCols,
Expand All @@ -2006,6 +2006,20 @@ public void setBackgroundException(DbException e) {
}
}

//每个数据库会有多个表,每个表有可能使用不同的存储引擎
private final List<StorageEngine> storageEngines = new CopyOnWriteArrayList<>();

public void addStorageEngine(StorageEngine storageEngine) {
storageEngines.add(storageEngine);
}

public List<StorageEngine> getStorageEngines() {
if (storageEngines.isEmpty())
throw new IllegalStateException("StorageEngine not init");
return storageEngines;
}

//每个数据库只有一个事务引擎
private TransactionEngine transactionEngine;

public void setTransactionEngine(TransactionEngine transactionEngine) {
Expand All @@ -2017,16 +2031,4 @@ public TransactionEngine getTransactionEngine() {
throw new IllegalStateException("TransactionEngine not init");
return transactionEngine;
}

private StorageEngine storageEngine;

public void setStorageEngine(StorageEngine storageEngine) {
this.storageEngine = storageEngine;
}

public StorageEngine getStorageEngine() {
if (storageEngine == null)
throw new IllegalStateException("StorageEngine not init");
return storageEngine;
}
}
Expand Up @@ -203,7 +203,7 @@ public Store(StorageEngine storageEngine, Database db, MVStore.Builder builder)
initTransactions();

db.setTransactionEngine(transactionEngine);
db.setStorageEngine(storageEngine);
db.addStorageEngine(storageEngine);
db.setLobStorage(new LobStorageMap(db));
}

Expand Down

0 comments on commit 078c8e1

Please sign in to comment.