提交 9447abe0 authored 作者: andrei's avatar andrei

Look Ma, no more locks!

上级 05ad3781
......@@ -10,9 +10,9 @@ import org.h2.mvstore.DataUtils;
import org.h2.mvstore.MVMap;
import org.h2.mvstore.Page;
import org.h2.mvstore.type.DataType;
import java.util.BitSet;
import java.util.AbstractMap;
import java.util.BitSet;
import java.util.Iterator;
import java.util.Map;
......@@ -99,8 +99,6 @@ public class TransactionMap<K, V> {
*/
public long sizeAsLong() {
TransactionStore store = transaction.store;
store.rwLock.readLock().lock();
try {
MVMap<Long, Object[]> undo = transaction.store.undoLog;
BitSet committingTransactions;
......@@ -167,9 +165,6 @@ public class TransactionMap<K, V> {
transaction.store.store.removeMap(temp);
}
return size;
} finally {
transaction.store.rwLock.readLock().unlock();
}
}
/**
......@@ -420,8 +415,6 @@ public class TransactionMap<K, V> {
private VersionedValue getValue(K key, long maxLog) {
TransactionStore store = transaction.store;
store.rwLock.readLock().lock();
try {
BitSet committingTransactions;
MVMap.RootReference mapRootReference;
MVMap.RootReference undoLogRootReference;
......@@ -436,9 +429,6 @@ public class TransactionMap<K, V> {
Page mapRootPage = mapRootReference.root;
VersionedValue data = map.get(mapRootPage, key);
return getValue(mapRootPage, undoRootPage, key, maxLog, data, store.committingTransactions.get());
} finally {
store.rwLock.readLock().unlock();
}
}
/**
......
......@@ -13,7 +13,6 @@ import java.util.Iterator;
import java.util.List;
import java.util.concurrent.atomic.AtomicReference;
import java.util.concurrent.atomic.AtomicReferenceArray;
import java.util.concurrent.locks.ReentrantReadWriteLock;
import org.h2.mvstore.DataUtils;
import org.h2.mvstore.MVMap;
import org.h2.mvstore.MVStore;
......@@ -54,12 +53,6 @@ public class TransactionStore {
*/
final MVMap<Long, Object[]> undoLog;
/**
* the reader/writer lock for the undo-log. Allows us to process multiple
* selects in parallel.
*/
final ReentrantReadWriteLock rwLock = new ReentrantReadWriteLock();
/**
* The map of maps.
*/
......@@ -169,8 +162,6 @@ public class TransactionStore {
store.removeMap(temp);
}
}
rwLock.writeLock().lock();
try {
if (!undoLog.isEmpty()) {
Long key = undoLog.firstKey();
while (key != null) {
......@@ -200,9 +191,6 @@ public class TransactionStore {
}
}
}
} finally {
rwLock.writeLock().unlock();
}
init = true;
}
}
......@@ -277,8 +265,6 @@ public class TransactionStore {
if(!init) {
init();
}
rwLock.readLock().lock();
try {
ArrayList<Transaction> list = new ArrayList<>();
int transactionId = 0;
BitSet bitSet = openTransactions.get();
......@@ -291,9 +277,6 @@ public class TransactionStore {
}
}
return list;
} finally {
rwLock.readLock().unlock();
}
}
/**
......@@ -387,8 +370,6 @@ public class TransactionStore {
*/
long addUndoLogRecord(int transactionId, long logId, Object[] undoLogRecord) {
Long undoKey = getOperationId(transactionId, logId);
rwLock.writeLock().lock();
try {
if (logId == 0) {
if (undoLog.containsKey(undoKey)) {
throw DataUtils.newIllegalStateException(
......@@ -399,9 +380,6 @@ public class TransactionStore {
}
}
undoLog.put(undoKey, undoLogRecord);
} finally {
rwLock.writeLock().unlock();
}
return undoKey;
}
......@@ -413,8 +391,6 @@ public class TransactionStore {
*/
public void removeUndoLogRecord(int transactionId, long logId) {
Long undoKey = getOperationId(transactionId, logId);
rwLock.writeLock().lock();
try {
Object[] old = undoLog.remove(undoKey);
if (old == null) {
throw DataUtils.newIllegalStateException(
......@@ -422,9 +398,6 @@ public class TransactionStore {
"Transaction {0} was concurrently rolled back",
transactionId);
}
} finally {
rwLock.writeLock().unlock();
}
}
/**
......@@ -455,8 +428,6 @@ public class TransactionStore {
flipCommittingTransactionsBit(transactionId, true);
CommitDecisionMaker commitDecisionMaker = new CommitDecisionMaker();
// TODO could synchronize on blocks (100 at a time or so)
rwLock.writeLock().lock();
try {
for (long logId = 0; logId < maxLogId; logId++) {
Long undoKey = getOperationId(transactionId, logId);
......@@ -481,7 +452,6 @@ public class TransactionStore {
undoLog.remove(undoKey);
}
} finally {
rwLock.writeLock().unlock();
flipCommittingTransactionsBit(transactionId, false);
}
}
......@@ -635,9 +605,6 @@ public class TransactionStore {
* @param toLogId the log id to roll back to
*/
void rollbackTo(Transaction t, long maxLogId, long toLogId) {
// TODO could synchronize on blocks (100 at a time or so)
rwLock.writeLock().lock();
try {
int transactionId = t.getId();
RollbackDecisionMaker decisionMaker = new RollbackDecisionMaker(this, transactionId, toLogId, t.listener);
for (long logId = maxLogId - 1; logId >= toLogId; logId--) {
......@@ -645,9 +612,6 @@ public class TransactionStore {
undoLog.operate(undoKey, null, decisionMaker);
decisionMaker.reset();
}
} finally {
rwLock.writeLock().unlock();
}
}
/**
......@@ -667,8 +631,6 @@ public class TransactionStore {
private Change current;
private void fetchNext() {
rwLock.writeLock().lock();
try {
int transactionId = t.getId();
while (logId >= toLogId) {
Long undoKey = getOperationId(transactionId, logId);
......@@ -692,9 +654,6 @@ public class TransactionStore {
return;
}
}
} finally {
rwLock.writeLock().unlock();
}
current = null;
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论