reflecting api changes from hyracks_lsm_rtree:r2681
git-svn-id: https://asterixdb.googlecode.com/svn/branches/asterix_lsm_stabilization@1071 eaa15691-b419-025a-1212-ee371bd00084
diff --git a/asterix-common/src/main/java/edu/uci/ics/asterix/common/context/AsterixAppRuntimeContext.java b/asterix-common/src/main/java/edu/uci/ics/asterix/common/context/AsterixAppRuntimeContext.java
index 53e0114..1a69a9b 100644
--- a/asterix-common/src/main/java/edu/uci/ics/asterix/common/context/AsterixAppRuntimeContext.java
+++ b/asterix-common/src/main/java/edu/uci/ics/asterix/common/context/AsterixAppRuntimeContext.java
@@ -14,7 +14,7 @@
import edu.uci.ics.hyracks.storage.am.lsm.common.api.ILSMMergePolicy;
import edu.uci.ics.hyracks.storage.am.lsm.common.api.ILSMOperationTrackerFactory;
import edu.uci.ics.hyracks.storage.am.lsm.common.impls.ConstantMergePolicy;
-import edu.uci.ics.hyracks.storage.am.lsm.common.impls.RefCountingOperationTrackerFactory;
+import edu.uci.ics.hyracks.storage.am.lsm.common.impls.ThreadCountingOperationTrackerFactory;
import edu.uci.ics.hyracks.storage.am.lsm.common.impls.SynchronousScheduler;
import edu.uci.ics.hyracks.storage.common.buffercache.BufferCache;
import edu.uci.ics.hyracks.storage.common.buffercache.ClockPageReplacementStrategy;
@@ -65,7 +65,7 @@
lsmIOScheduler = SynchronousScheduler.INSTANCE;
mergePolicy = new ConstantMergePolicy(3);
- opTrackerFactory = RefCountingOperationTrackerFactory.INSTANCE;
+ opTrackerFactory = ThreadCountingOperationTrackerFactory.INSTANCE;
ILocalResourceRepositoryFactory persistentLocalResourceRepositoryFactory = new PersistentLocalResourceRepositoryFactory(
ioMgr);
diff --git a/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/ioopcallbacks/LSMBTreeIOOperationCallback.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/ioopcallbacks/LSMBTreeIOOperationCallback.java
index 434e6ef..10e3805 100644
--- a/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/ioopcallbacks/LSMBTreeIOOperationCallback.java
+++ b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/ioopcallbacks/LSMBTreeIOOperationCallback.java
@@ -20,7 +20,7 @@
import edu.uci.ics.asterix.transaction.management.opcallbacks.IndexOperationTracker;
import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
import edu.uci.ics.hyracks.storage.am.btree.impls.BTree;
-import edu.uci.ics.hyracks.storage.am.lsm.btree.impls.LSMBTreeComponent;
+import edu.uci.ics.hyracks.storage.am.lsm.btree.impls.LSMBTreeImmutableComponent;
import edu.uci.ics.hyracks.storage.am.lsm.common.api.ILSMComponent;
import edu.uci.ics.hyracks.storage.am.lsm.common.api.ILSMIOOperation;
@@ -33,7 +33,7 @@
@Override
public void afterOperation(ILSMIOOperation operation, List<ILSMComponent> oldComponents, ILSMComponent newComponent)
throws HyracksDataException {
- LSMBTreeComponent btreeComponent = (LSMBTreeComponent) newComponent;
+ LSMBTreeImmutableComponent btreeComponent = (LSMBTreeImmutableComponent) newComponent;
putLSNIntoMetadata(btreeComponent.getBTree(), oldComponents);
}
@@ -45,8 +45,8 @@
}
// Get max LSN from the oldComponents. Implies a merge IO operation.
long maxLSN = -1;
- for (Object o : oldComponents) {
- BTree btree = (BTree) o;
+ for (ILSMComponent c : oldComponents) {
+ BTree btree = ((LSMBTreeImmutableComponent) c).getBTree();
maxLSN = Math.max(getTreeIndexLSN(btree), maxLSN);
}
return maxLSN;
diff --git a/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/ioopcallbacks/LSMInvertedIndexIOOperationCallback.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/ioopcallbacks/LSMInvertedIndexIOOperationCallback.java
index b1450c1..53cdfd1 100644
--- a/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/ioopcallbacks/LSMInvertedIndexIOOperationCallback.java
+++ b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/ioopcallbacks/LSMInvertedIndexIOOperationCallback.java
@@ -21,7 +21,7 @@
import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
import edu.uci.ics.hyracks.storage.am.lsm.common.api.ILSMComponent;
import edu.uci.ics.hyracks.storage.am.lsm.common.api.ILSMIOOperation;
-import edu.uci.ics.hyracks.storage.am.lsm.invertedindex.impls.LSMInvertedIndexComponent;
+import edu.uci.ics.hyracks.storage.am.lsm.invertedindex.impls.LSMInvertedIndexImmutableComponent;
public class LSMInvertedIndexIOOperationCallback extends AbstractLSMIOOperationCallback {
@@ -32,7 +32,7 @@
@Override
public void afterOperation(ILSMIOOperation operation, List<ILSMComponent> oldComponents, ILSMComponent newComponent)
throws HyracksDataException {
- LSMInvertedIndexComponent invIndexComponent = (LSMInvertedIndexComponent) newComponent;
+ LSMInvertedIndexImmutableComponent invIndexComponent = (LSMInvertedIndexImmutableComponent) newComponent;
putLSNIntoMetadata(invIndexComponent.getDeletedKeysBTree(), oldComponents);
}
@@ -45,7 +45,7 @@
// Get max LSN from the oldComponents. Implies a merge IO operation.
long maxLSN = -1;
for (Object o : oldComponents) {
- LSMInvertedIndexComponent invIndexComponent = (LSMInvertedIndexComponent) o;
+ LSMInvertedIndexImmutableComponent invIndexComponent = (LSMInvertedIndexImmutableComponent) o;
maxLSN = Math.max(getTreeIndexLSN(invIndexComponent.getDeletedKeysBTree()), maxLSN);
}
return maxLSN;
diff --git a/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/ioopcallbacks/LSMRTreeIOOperationCallback.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/ioopcallbacks/LSMRTreeIOOperationCallback.java
index ab3c9a6..62da7e7 100644
--- a/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/ioopcallbacks/LSMRTreeIOOperationCallback.java
+++ b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/ioopcallbacks/LSMRTreeIOOperationCallback.java
@@ -21,7 +21,7 @@
import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
import edu.uci.ics.hyracks.storage.am.lsm.common.api.ILSMComponent;
import edu.uci.ics.hyracks.storage.am.lsm.common.api.ILSMIOOperation;
-import edu.uci.ics.hyracks.storage.am.lsm.rtree.impls.LSMRTreeComponent;
+import edu.uci.ics.hyracks.storage.am.lsm.rtree.impls.LSMRTreeImmutableComponent;
public class LSMRTreeIOOperationCallback extends AbstractLSMIOOperationCallback {
@@ -30,8 +30,9 @@
}
@Override
- public void afterOperation(ILSMIOOperation operation, List<ILSMComponent> oldComponents, ILSMComponent newComponent) throws HyracksDataException {
- LSMRTreeComponent rtreeComponent = (LSMRTreeComponent) newComponent;
+ public void afterOperation(ILSMIOOperation operation, List<ILSMComponent> oldComponents, ILSMComponent newComponent)
+ throws HyracksDataException {
+ LSMRTreeImmutableComponent rtreeComponent = (LSMRTreeImmutableComponent) newComponent;
putLSNIntoMetadata(rtreeComponent.getRTree(), oldComponents);
putLSNIntoMetadata(rtreeComponent.getBTree(), oldComponents);
}
@@ -45,7 +46,7 @@
// Get max LSN from the oldComponents. Implies a merge IO operation.
long maxLSN = -1;
for (Object o : oldComponents) {
- LSMRTreeComponent rtreeComponent = (LSMRTreeComponent) o;
+ LSMRTreeImmutableComponent rtreeComponent = (LSMRTreeImmutableComponent) o;
maxLSN = Math.max(getTreeIndexLSN(rtreeComponent.getRTree()), maxLSN);
}
return maxLSN;
diff --git a/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/IndexOperationTracker.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/IndexOperationTracker.java
index 04b28be..447c3d2 100644
--- a/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/IndexOperationTracker.java
+++ b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/IndexOperationTracker.java
@@ -24,6 +24,7 @@
import edu.uci.ics.hyracks.storage.am.lsm.common.api.ILSMIndex;
import edu.uci.ics.hyracks.storage.am.lsm.common.api.ILSMIndexAccessor;
import edu.uci.ics.hyracks.storage.am.lsm.common.api.ILSMOperationTracker;
+import edu.uci.ics.hyracks.storage.am.lsm.common.impls.LSMOperationType;
public class IndexOperationTracker implements ILSMOperationTracker {
@@ -47,21 +48,8 @@
}
@Override
- public synchronized boolean beforeOperation(ISearchOperationCallback searchCallback,
- IModificationOperationCallback modificationCallback, boolean tryOperation) throws HyracksDataException {
- // Wait for pending flushes to complete.
- // If flushFlag is set, then the flush is queued to occur by the last completing operation.
- // This operation should wait for that flush to occur before proceeding.
- if (index.getFlushStatus(index)) {
- if (tryOperation) {
- return false;
- }
- try {
- this.wait();
- } catch (InterruptedException e) {
- throw new HyracksDataException(e);
- }
- }
+ public void beforeOperation(LSMOperationType opType, ISearchOperationCallback searchCallback,
+ IModificationOperationCallback modificationCallback) throws HyracksDataException {
numActiveOperations++;
// Increment transactor-local active operations count.
@@ -69,20 +57,19 @@
if (opCallback != null) {
opCallback.incrementLocalNumActiveOperations();
}
- return true;
}
@Override
- public void afterOperation(ISearchOperationCallback searchCallback,
+ public void afterOperation(LSMOperationType opType, ISearchOperationCallback searchCallback,
IModificationOperationCallback modificationCallback) throws HyracksDataException {
// Searches are immediately considered complete, because they should not prevent the execution of flushes.
if (searchCallback != null) {
- completeOperation(searchCallback, modificationCallback);
+ completeOperation(opType, searchCallback, modificationCallback);
}
}
@Override
- public synchronized void completeOperation(ISearchOperationCallback searchCallback,
+ public void completeOperation(LSMOperationType opType, ISearchOperationCallback searchCallback,
IModificationOperationCallback modificationCallback) throws HyracksDataException {
numActiveOperations--;
@@ -93,7 +80,7 @@
}
// If we need a flush, and this is the last completing operation, then schedule the flush.
// Once the flush has completed notify all waiting operations.
- if (index.getFlushStatus(index) && numActiveOperations == 0) {
+ if (index.getFlushStatus(index) && numActiveOperations == 0 && opType != LSMOperationType.FLUSH) {
if (accessor == null) {
accessor = (ILSMIndexAccessor) index.createAccessor(NoOpOperationCallback.INSTANCE,
NoOpOperationCallback.INSTANCE);
diff --git a/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/TransactionContext.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/TransactionContext.java
index a88ed5f..67e280a 100644
--- a/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/TransactionContext.java
+++ b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/TransactionContext.java
@@ -30,6 +30,7 @@
import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
import edu.uci.ics.hyracks.storage.am.common.api.IModificationOperationCallback;
import edu.uci.ics.hyracks.storage.am.lsm.common.api.ILSMIndex;
+import edu.uci.ics.hyracks.storage.am.lsm.common.impls.LSMOperationType;
/**
* Represents a holder object that contains all information related to a
@@ -54,7 +55,7 @@
private TransactionSubsystem transactionSubsystem;
private LogicalLogLocator firstLogLocator;//firstLSN of the Job
private LogicalLogLocator lastLogLocator;//lastLSN of the Job
- private TransactionState txnState;
+ private TransactionState txnState;
private long startWaitTime;
private int status;
private Set<ICloseable> resources = new HashSet<ICloseable>();
@@ -102,7 +103,8 @@
for (int i = 0; i < indexes.size(); i++) {
ILSMIndex index = indexes.get(i);
IModificationOperationCallback modificationCallback = (IModificationOperationCallback) callbacks.get(i);
- ((IndexOperationTracker) index.getOperationTracker()).completeOperation(null, modificationCallback);
+ ((IndexOperationTracker) index.getOperationTracker()).completeOperation(LSMOperationType.MODIFICATION,
+ null, modificationCallback);
}
}
}
@@ -122,7 +124,7 @@
public LogicalLogLocator getFirstLogLocator() {
return firstLogLocator;
}
-
+
public LogicalLogLocator getLastLogLocator() {
return lastLogLocator;
}