Skip to content

Commit

Permalink
事务引擎架构改进,不再依赖存储层和SQL层
Browse files Browse the repository at this point in the history
  • Loading branch information
codefollower committed May 10, 2015
1 parent 2ef3a1a commit b347ad2
Show file tree
Hide file tree
Showing 63 changed files with 950 additions and 998 deletions.
Expand Up @@ -27,11 +27,11 @@
import org.lealone.cluster.utils.Utils;
import org.lealone.cluster.utils.WrappedRunnable;
import org.lealone.command.router.Router;
import org.lealone.command.router.TransactionalRouter;
import org.lealone.engine.Session;
import org.lealone.engine.SysProperties;
import org.lealone.server.PgServer;
import org.lealone.server.TcpServer;
import org.lealone.transaction.TransactionalRouter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand Down
Expand Up @@ -21,7 +21,10 @@
import org.lealone.message.JdbcSQLException;
import org.lealone.message.Trace;
import org.lealone.message.TraceSystem;
import org.lealone.transaction.TransactionInterface;
import org.lealone.storage.FileStore;
import org.lealone.storage.FrontendLobStorage;
import org.lealone.storage.LobStorage;
import org.lealone.transaction.Transaction;
import org.lealone.util.MathUtils;
import org.lealone.util.NetUtils;
import org.lealone.util.SmallLRUCache;
Expand Down Expand Up @@ -93,8 +96,8 @@ public class FrontendSession extends SessionWithState implements DataHandler {
private int lastReconnect;
private SessionInterface embedded;
//private DatabaseEventListener eventListener;
private LobStorageInterface lobStorage;
private TransactionInterface transaction;
private LobStorage lobStorage;
private Transaction transaction;

public FrontendSession(ConnectionInfo ci) {
this.connectionInfo = ci;
Expand Down Expand Up @@ -601,7 +604,7 @@ public void afterWriting() {
}

@Override
public LobStorageInterface getLobStorage() {
public LobStorage getLobStorage() {
if (lobStorage == null) {
lobStorage = new FrontendLobStorage(this);
}
Expand Down Expand Up @@ -688,11 +691,11 @@ public synchronized boolean validateTransaction(String localTransactionName) {
}
}

public void setTransaction(TransactionInterface transaction) {
public void setTransaction(Transaction transaction) {
this.transaction = transaction;
}

public TransactionInterface getTransaction() {
public Transaction getTransaction() {
return transaction;
}

Expand Down
Expand Up @@ -3,22 +3,24 @@
* and the EPL 1.0 (http://h2database.com/html/license.html).
* Initial Developer: H2 Group
*/
package org.lealone.engine;
package org.lealone.storage;

import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;

import org.lealone.engine.DataHandler;
import org.lealone.message.DbException;
import org.lealone.storage.LobStorage;
import org.lealone.value.Value;
import org.lealone.value.ValueLobDb;

/**
* This factory creates in-memory objects and temporary files. It is used on the
* client side.
*/
public class FrontendLobStorage implements LobStorageInterface {
public class FrontendLobStorage implements LobStorage {

private final DataHandler handler;

Expand Down
Expand Up @@ -9,6 +9,8 @@
import java.sql.Connection;

import org.lealone.message.DbException;
import org.lealone.storage.FileStore;
import org.lealone.storage.LobStorage;
import org.lealone.util.SmallLRUCache;
import org.lealone.util.TempFileDeleter;

Expand Down Expand Up @@ -91,7 +93,7 @@ public interface DataHandler {
*
* @return the lob storage mechanism
*/
LobStorageInterface getLobStorage();
LobStorage getLobStorage();

/**
* Get a database connection to be used for LOB access.
Expand Down
Expand Up @@ -8,7 +8,7 @@

import org.lealone.engine.Constants;
import org.lealone.engine.DataHandler;
import org.lealone.engine.FileStore;
import org.lealone.storage.FileStore;
import org.lealone.util.MathUtils;

/**
Expand Down
Expand Up @@ -4,7 +4,7 @@
* (http://h2database.com/html/license.html).
* Initial Developer: H2 Group
*/
package org.lealone.engine;
package org.lealone.storage;

import java.io.IOException;
import java.lang.ref.Reference;
Expand All @@ -13,6 +13,9 @@
import java.util.Arrays;

import org.lealone.api.ErrorCode;
import org.lealone.engine.Constants;
import org.lealone.engine.DataHandler;
import org.lealone.engine.SysProperties;
import org.lealone.fs.FileUtils;
import org.lealone.message.DbException;
import org.lealone.security.SecureFileStore;
Expand Down
Expand Up @@ -4,12 +4,15 @@
* (http://h2database.com/html/license.html).
* Initial Developer: H2 Group
*/
package org.lealone.engine;
package org.lealone.storage;

import java.io.IOException;
import java.io.InputStream;

import org.lealone.compress.CompressTool;
import org.lealone.engine.Constants;
import org.lealone.engine.Data;
import org.lealone.engine.DataHandler;
import org.lealone.message.DbException;
import org.lealone.util.DataUtils;

Expand Down
Expand Up @@ -4,11 +4,14 @@
* (http://h2database.com/html/license.html).
* Initial Developer: H2 Group
*/
package org.lealone.engine;
package org.lealone.storage;

import java.io.OutputStream;

import org.lealone.compress.CompressTool;
import org.lealone.engine.Constants;
import org.lealone.engine.Data;
import org.lealone.engine.DataHandler;

/**
* An output stream that is backed by a file store.
Expand Down
Expand Up @@ -3,7 +3,7 @@
* and the EPL 1.0 (http://h2database.com/html/license.html).
* Initial Developer: H2 Group
*/
package org.lealone.engine;
package org.lealone.storage;

import java.io.IOException;
import java.io.InputStream;
Expand All @@ -15,7 +15,7 @@
/**
* A mechanism to store and retrieve lob data.
*/
public interface LobStorageInterface {
public interface LobStorage {

/**
* The name of the lob data table. If this table exists, then lob storage is
Expand Down
Expand Up @@ -15,7 +15,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.lealone.engine;
package org.lealone.storage;

import java.util.Iterator;
import java.util.Map;
Expand All @@ -32,6 +32,8 @@ public interface Builder {
<K, V> StorageMap<K, V> openMap(String name, DataType valueType);

<K, V> StorageMap<K, V> openMap(String name, DataType keyType, DataType valueType);

String getMapName(int id);
}

public abstract class BuilderBase implements Builder {
Expand Down
Expand Up @@ -17,28 +17,57 @@
*/
package org.lealone.transaction;

public interface TransactionInterface {
long getTransactionId();
import org.lealone.type.DataType;

long getCommitTimestamp();
public interface Transaction {

//long getTransactionId();

//long getCommitTimestamp();

boolean isAutoCommit();

void setAutoCommit(boolean autoCommit);

void setLocal(boolean local);

void addLocalTransactionNames(String localTransactionNames);

String getLocalTransactionNames();

void setValidator(Validator validator);

void addParticipant(Participant participant);

<K, V> TransactionMap<K, V> openMap(String name);

<K, V> TransactionMap<K, V> openMap(String name, DataType keyType, DataType valueType);

void addSavepoint(String name);

long getSavepointId();

void commit();

void commit(String allLocalTransactionNames);

void rollback();

void addSavepoint(String name);

void rollbackToSavepoint(String name);

long getSavepointId();

void rollbackToSavepoint(long savepointId);

interface Participant {
void addSavepoint(String name);

void rollbackToSavepoint(String name);

void commitTransaction(String localTransactionName);

void rollbackTransaction();
}

interface Validator {
boolean validateTransaction(String localTransactionName);
}
}
Expand Up @@ -17,8 +17,10 @@
*/
package org.lealone.transaction;

import org.lealone.transaction.TransactionInterface;

public interface TransactionEngine {
TransactionInterface beginTransaction();
Transaction beginTransaction(boolean autoCommit);

void close();

boolean isValid(String localTransactionName);
}
Expand Up @@ -16,12 +16,11 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.lealone.engine;
package org.lealone.transaction;

import java.util.Iterator;
import java.util.Map.Entry;

import org.lealone.engine.Session;
import org.lealone.type.DataType;

public interface TransactionMap<K, V> {
Expand Down Expand Up @@ -54,7 +53,7 @@ public interface TransactionMap<K, V> {
* @param savepoint the savepoint
* @return the map
*/
public TransactionMap<K, V> getInstance(Session session, long savepoint);
public TransactionMap<K, V> getInstance(Transaction transaction, long savepoint);

/**
* Get the most recent value for the given key.
Expand Down Expand Up @@ -111,7 +110,7 @@ public interface TransactionMap<K, V> {
*/
public boolean isClosed();

public void removeMap(Session session);
public void removeMap();

/**
* Clear the map.
Expand Down
6 changes: 3 additions & 3 deletions lealone-common/src/main/java/org/lealone/value/ValueLob.java
Expand Up @@ -16,12 +16,12 @@

import org.lealone.engine.Constants;
import org.lealone.engine.DataHandler;
import org.lealone.engine.FileStore;
import org.lealone.engine.FileStoreInputStream;
import org.lealone.engine.FileStoreOutputStream;
import org.lealone.engine.SysProperties;
import org.lealone.fs.FileUtils;
import org.lealone.message.DbException;
import org.lealone.storage.FileStore;
import org.lealone.storage.FileStoreInputStream;
import org.lealone.storage.FileStoreOutputStream;
import org.lealone.util.DataUtils;
import org.lealone.util.IOUtils;
import org.lealone.util.MathUtils;
Expand Down
24 changes: 12 additions & 12 deletions lealone-common/src/main/java/org/lealone/value/ValueLobDb.java
Expand Up @@ -16,13 +16,13 @@

import org.lealone.engine.Constants;
import org.lealone.engine.DataHandler;
import org.lealone.engine.FileStore;
import org.lealone.engine.FileStoreInputStream;
import org.lealone.engine.FileStoreOutputStream;
import org.lealone.engine.LobStorageInterface;
import org.lealone.engine.SysProperties;
import org.lealone.fs.FileUtils;
import org.lealone.message.DbException;
import org.lealone.storage.FileStore;
import org.lealone.storage.FileStoreInputStream;
import org.lealone.storage.FileStoreOutputStream;
import org.lealone.storage.LobStorage;
import org.lealone.util.DataUtils;
import org.lealone.util.IOUtils;
import org.lealone.util.MathUtils;
Expand Down Expand Up @@ -195,7 +195,7 @@ public Value convertTo(int t) {

@Override
public boolean isLinked() {
return tableId != LobStorageInterface.TABLE_ID_SESSION_VARIABLE && small == null;
return tableId != LobStorage.TABLE_ID_SESSION_VARIABLE && small == null;
}

public boolean isStored() {
Expand All @@ -221,23 +221,23 @@ public void close() {

@Override
public void unlink(DataHandler database) {
if (small == null && tableId != LobStorageInterface.TABLE_ID_SESSION_VARIABLE) {
database.getLobStorage().setTable(this, LobStorageInterface.TABLE_ID_SESSION_VARIABLE);
tableId = LobStorageInterface.TABLE_ID_SESSION_VARIABLE;
if (small == null && tableId != LobStorage.TABLE_ID_SESSION_VARIABLE) {
database.getLobStorage().setTable(this, LobStorage.TABLE_ID_SESSION_VARIABLE);
tableId = LobStorage.TABLE_ID_SESSION_VARIABLE;
}
}

@Override
public Value link(DataHandler database, int tabId) {
if (small == null) {
if (tableId == LobStorageInterface.TABLE_TEMP) {
if (tableId == LobStorage.TABLE_TEMP) {
database.getLobStorage().setTable(this, tabId);
this.tableId = tabId;
} else {
return handler.getLobStorage().copyLob(this, tabId, getPrecision());
}
} else if (small.length > database.getMaxLengthInplaceLob()) {
LobStorageInterface s = database.getLobStorage();
LobStorage s = database.getLobStorage();
Value v;
if (type == Value.BLOB) {
v = s.createBlob(getInputStream(), getPrecision());
Expand Down Expand Up @@ -473,11 +473,11 @@ public ValueLobDb copyToResult() {
if (handler == null) {
return this;
}
LobStorageInterface s = handler.getLobStorage();
LobStorage s = handler.getLobStorage();
if (s.isReadOnly()) {
return this;
}
return s.copyLob(this, LobStorageInterface.TABLE_RESULT, getPrecision());
return s.copyLob(this, LobStorage.TABLE_RESULT, getPrecision());
}

public long getLobId() {
Expand Down

0 comments on commit b347ad2

Please sign in to comment.