removed unnecessary retrying of inserts code from LSMHarness and ILSMIndexes;
added ILSMIndexInternal interface that the ILSMHarness uses to talk to
ILSMIndexes (internally) -- this allows properly exposed interfaces to an
"outside" user;
git-svn-id: https://hyracks.googlecode.com/svn/branches/hyracks_lsm_tree@1954 123451ca-8445-de46-9d55-352943316053
diff --git a/hyracks-storage-am-lsm-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/btree/impls/LSMBTree.java b/hyracks-storage-am-lsm-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/btree/impls/LSMBTree.java
index 0fc7493..f26b890 100644
--- a/hyracks-storage-am-lsm-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/btree/impls/LSMBTree.java
+++ b/hyracks-storage-am-lsm-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/btree/impls/LSMBTree.java
@@ -54,9 +54,9 @@
import edu.uci.ics.hyracks.storage.am.lsm.common.api.ILSMIOOperation;
import edu.uci.ics.hyracks.storage.am.lsm.common.api.ILSMIOOperationCallback;
import edu.uci.ics.hyracks.storage.am.lsm.common.api.ILSMIOOperationScheduler;
-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.ILSMIndexFileManager;
+import edu.uci.ics.hyracks.storage.am.lsm.common.api.ILSMIndexInternal;
import edu.uci.ics.hyracks.storage.am.lsm.common.api.ILSMMergePolicy;
import edu.uci.ics.hyracks.storage.am.lsm.common.api.ILSMOperationTracker;
import edu.uci.ics.hyracks.storage.am.lsm.common.freepage.InMemoryBufferCache;
@@ -70,7 +70,7 @@
import edu.uci.ics.hyracks.storage.common.buffercache.IBufferCache;
import edu.uci.ics.hyracks.storage.common.file.IFileMapProvider;
-public class LSMBTree implements ILSMIndex, ITreeIndex {
+public class LSMBTree implements ILSMIndexInternal, ITreeIndex {
private final ILSMHarness lsmHarness;
// In-memory components.
@@ -210,8 +210,8 @@
}
@Override
- public boolean insertUpdateOrDelete(ITupleReference tuple, IIndexOperationContext ictx)
- throws HyracksDataException, IndexException {
+ public void insertUpdateOrDelete(ITupleReference tuple, IIndexOperationContext ictx) throws HyracksDataException,
+ IndexException {
LSMBTreeOpContext ctx = (LSMBTreeOpContext) ictx;
switch (ctx.getIndexOp()) {
@@ -225,8 +225,6 @@
ctx.memBTreeAccessor.upsert(tuple);
break;
}
-
- return true;
}
private boolean insert(ITupleReference tuple, LSMBTreeOpContext ctx) throws HyracksDataException, IndexException {
diff --git a/hyracks-storage-am-lsm-common/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/common/api/ILSMIndex.java b/hyracks-storage-am-lsm-common/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/common/api/ILSMIndex.java
index a1465f2..5d4ad0b 100644
--- a/hyracks-storage-am-lsm-common/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/common/api/ILSMIndex.java
+++ b/hyracks-storage-am-lsm-common/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/common/api/ILSMIndex.java
@@ -15,17 +15,7 @@
package edu.uci.ics.hyracks.storage.am.lsm.common.api;
-import java.util.List;
-import java.util.concurrent.atomic.AtomicInteger;
-
-import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
-import edu.uci.ics.hyracks.dataflow.common.data.accessors.ITupleReference;
-import edu.uci.ics.hyracks.storage.am.common.api.IInMemoryFreePageManager;
import edu.uci.ics.hyracks.storage.am.common.api.IIndex;
-import edu.uci.ics.hyracks.storage.am.common.api.IIndexCursor;
-import edu.uci.ics.hyracks.storage.am.common.api.IIndexOperationContext;
-import edu.uci.ics.hyracks.storage.am.common.api.ISearchPredicate;
-import edu.uci.ics.hyracks.storage.am.common.api.IndexException;
import edu.uci.ics.hyracks.storage.am.lsm.common.impls.LSMHarness;
/**
@@ -37,35 +27,6 @@
* concurrent searches/updates/merges may be ongoing.
*/
public interface ILSMIndex extends IIndex {
- public boolean insertUpdateOrDelete(ITupleReference tuple, IIndexOperationContext ictx)
- throws HyracksDataException, IndexException;
-
- public void search(IIndexCursor cursor, List<Object> diskComponents, ISearchPredicate pred,
- IIndexOperationContext ictx, boolean includeMemComponent, AtomicInteger searcherRefCount)
- throws HyracksDataException, IndexException;
-
- public ILSMIOOperation createMergeOperation(ILSMIOOperationCallback callback) throws HyracksDataException,
- IndexException;
-
- public Object merge(List<Object> mergedComponents, ILSMIOOperation operation) throws HyracksDataException,
- IndexException;
-
- public void addMergedComponent(Object newComponent, List<Object> mergedComponents);
-
- public void cleanUpAfterMerge(List<Object> mergedComponents) throws HyracksDataException;
-
- public Object flush(ILSMIOOperation operation) throws HyracksDataException, IndexException;
-
- public void addFlushedComponent(Object index);
-
- public IInMemoryFreePageManager getInMemoryFreePageManager();
-
- public void resetInMemoryComponent() throws HyracksDataException;
-
- public List<Object> getDiskComponents();
-
- public ILSMComponentFinalizer getComponentFinalizer();
-
public ILSMFlushController getFlushController();
public ILSMOperationTracker getOperationTracker();
diff --git a/hyracks-storage-am-lsm-common/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/common/api/ILSMIndexInternal.java b/hyracks-storage-am-lsm-common/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/common/api/ILSMIndexInternal.java
new file mode 100644
index 0000000..62f5a15
--- /dev/null
+++ b/hyracks-storage-am-lsm-common/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/common/api/ILSMIndexInternal.java
@@ -0,0 +1,44 @@
+package edu.uci.ics.hyracks.storage.am.lsm.common.api;
+
+import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
+import edu.uci.ics.hyracks.dataflow.common.data.accessors.ITupleReference;
+import edu.uci.ics.hyracks.storage.am.common.api.IInMemoryFreePageManager;
+import edu.uci.ics.hyracks.storage.am.common.api.IIndexCursor;
+import edu.uci.ics.hyracks.storage.am.common.api.IIndexOperationContext;
+import edu.uci.ics.hyracks.storage.am.common.api.ISearchPredicate;
+import edu.uci.ics.hyracks.storage.am.common.api.IndexException;
+
+public interface ILSMIndexInternal extends ILSMIndex {
+
+ public Object merge(List<Object> mergedComponents, ILSMIOOperation operation) throws HyracksDataException,
+ IndexException;
+
+ public void insertUpdateOrDelete(ITupleReference tuple, IIndexOperationContext ictx) throws HyracksDataException,
+ IndexException;
+
+ public void search(IIndexCursor cursor, List<Object> diskComponents, ISearchPredicate pred,
+ IIndexOperationContext ictx, boolean includeMemComponent, AtomicInteger searcherRefCount)
+ throws HyracksDataException, IndexException;
+
+ public ILSMIOOperation createMergeOperation(ILSMIOOperationCallback callback) throws HyracksDataException,
+ IndexException;
+
+ public void addMergedComponent(Object newComponent, List<Object> mergedComponents);
+
+ public void cleanUpAfterMerge(List<Object> mergedComponents) throws HyracksDataException;
+
+ public Object flush(ILSMIOOperation operation) throws HyracksDataException, IndexException;
+
+ public void addFlushedComponent(Object index);
+
+ public IInMemoryFreePageManager getInMemoryFreePageManager();
+
+ public void resetInMemoryComponent() throws HyracksDataException;
+
+ public List<Object> getDiskComponents();
+
+ public ILSMComponentFinalizer getComponentFinalizer();
+}
diff --git a/hyracks-storage-am-lsm-common/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/common/impls/LSMHarness.java b/hyracks-storage-am-lsm-common/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/common/impls/LSMHarness.java
index a8065eb..9da5ceb 100644
--- a/hyracks-storage-am-lsm-common/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/common/impls/LSMHarness.java
+++ b/hyracks-storage-am-lsm-common/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/common/impls/LSMHarness.java
@@ -34,6 +34,7 @@
import edu.uci.ics.hyracks.storage.am.lsm.common.api.ILSMIOOperationCallback;
import edu.uci.ics.hyracks.storage.am.lsm.common.api.ILSMIOOperationScheduler;
import edu.uci.ics.hyracks.storage.am.lsm.common.api.ILSMIndex;
+import edu.uci.ics.hyracks.storage.am.lsm.common.api.ILSMIndexInternal;
import edu.uci.ics.hyracks.storage.am.lsm.common.api.ILSMMergePolicy;
import edu.uci.ics.hyracks.storage.am.lsm.common.api.ILSMOperationTracker;
@@ -51,7 +52,7 @@
protected final Logger LOGGER = Logger.getLogger(LSMHarness.class.getName());
protected static final long AFTER_MERGE_CLEANUP_SLEEP = 100;
- private ILSMIndex lsmIndex;
+ private ILSMIndexInternal lsmIndex;
// All accesses to the LSM-Tree's on-disk components are synchronized on diskComponentsSync.
private Object diskComponentsSync = new Object();
@@ -72,7 +73,7 @@
private final ILSMOperationTracker opTracker;
private final ILSMIOOperationScheduler ioScheduler;
- public LSMHarness(ILSMIndex lsmIndex, ILSMFlushController flushController, ILSMMergePolicy mergePolicy,
+ public LSMHarness(ILSMIndexInternal lsmIndex, ILSMFlushController flushController, ILSMMergePolicy mergePolicy,
ILSMOperationTracker opTracker, ILSMIOOperationScheduler ioScheduler) {
this.lsmIndex = lsmIndex;
this.opTracker = opTracker;
@@ -94,11 +95,8 @@
// It is possible, due to concurrent execution of operations, that an operation will
// fail. In such a case, simply retry the operation. Refer to the specific LSMIndex code
// to see exactly why an operation might fail.
- boolean operationComplete = true;
try {
- do {
- operationComplete = lsmIndex.insertUpdateOrDelete(tuple, ctx);
- } while (!operationComplete);
+ lsmIndex.insertUpdateOrDelete(tuple, ctx);
} finally {
threadExit();
}
diff --git a/hyracks-storage-am-lsm-invertedindex/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/invertedindex/impls/LSMInvertedIndex.java b/hyracks-storage-am-lsm-invertedindex/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/invertedindex/impls/LSMInvertedIndex.java
index 0382e2e..09434f0 100644
--- a/hyracks-storage-am-lsm-invertedindex/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/invertedindex/impls/LSMInvertedIndex.java
+++ b/hyracks-storage-am-lsm-invertedindex/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/invertedindex/impls/LSMInvertedIndex.java
@@ -54,9 +54,9 @@
import edu.uci.ics.hyracks.storage.am.lsm.common.api.ILSMIOOperation;
import edu.uci.ics.hyracks.storage.am.lsm.common.api.ILSMIOOperationCallback;
import edu.uci.ics.hyracks.storage.am.lsm.common.api.ILSMIOOperationScheduler;
-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.ILSMIndexFileManager;
+import edu.uci.ics.hyracks.storage.am.lsm.common.api.ILSMIndexInternal;
import edu.uci.ics.hyracks.storage.am.lsm.common.api.ILSMMergePolicy;
import edu.uci.ics.hyracks.storage.am.lsm.common.api.ILSMOperationTracker;
import edu.uci.ics.hyracks.storage.am.lsm.common.freepage.InMemoryBufferCache;
@@ -76,7 +76,7 @@
import edu.uci.ics.hyracks.storage.common.buffercache.IBufferCache;
import edu.uci.ics.hyracks.storage.common.file.IFileMapProvider;
-public class LSMInvertedIndex implements ILSMIndex, IInvertedIndex {
+public class LSMInvertedIndex implements ILSMIndexInternal, IInvertedIndex {
public class LSMInvertedIndexComponent {
private final IInvertedIndex invIndex;
private final BTree deletedKeysBTree;
@@ -321,8 +321,8 @@
* - Insert key into deleted-keys BTree.
*/
@Override
- public boolean insertUpdateOrDelete(ITupleReference tuple, IIndexOperationContext ictx)
- throws HyracksDataException, IndexException {
+ public void insertUpdateOrDelete(ITupleReference tuple, IIndexOperationContext ictx) throws HyracksDataException,
+ IndexException {
LSMInvertedIndexOpContext ctx = (LSMInvertedIndexOpContext) ictx;
ctx.modificationCallback.before(tuple);
switch (ctx.getIndexOp()) {
@@ -348,7 +348,6 @@
throw new UnsupportedOperationException("Operation " + ctx.getIndexOp() + " not supported.");
}
}
- return true;
}
@Override
diff --git a/hyracks-storage-am-lsm-rtree/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/rtree/impls/AbstractLSMRTree.java b/hyracks-storage-am-lsm-rtree/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/rtree/impls/AbstractLSMRTree.java
index 8613f0c..3ede232 100644
--- a/hyracks-storage-am-lsm-rtree/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/rtree/impls/AbstractLSMRTree.java
+++ b/hyracks-storage-am-lsm-rtree/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/rtree/impls/AbstractLSMRTree.java
@@ -42,9 +42,9 @@
import edu.uci.ics.hyracks.storage.am.lsm.common.api.ILSMFlushController;
import edu.uci.ics.hyracks.storage.am.lsm.common.api.ILSMHarness;
import edu.uci.ics.hyracks.storage.am.lsm.common.api.ILSMIOOperationScheduler;
-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.ILSMIndexFileManager;
+import edu.uci.ics.hyracks.storage.am.lsm.common.api.ILSMIndexInternal;
import edu.uci.ics.hyracks.storage.am.lsm.common.api.ILSMMergePolicy;
import edu.uci.ics.hyracks.storage.am.lsm.common.api.ILSMOperationTracker;
import edu.uci.ics.hyracks.storage.am.lsm.common.freepage.InMemoryBufferCache;
@@ -57,7 +57,7 @@
import edu.uci.ics.hyracks.storage.common.buffercache.IBufferCache;
import edu.uci.ics.hyracks.storage.common.file.IFileMapProvider;
-public abstract class AbstractLSMRTree implements ILSMIndex, ITreeIndex {
+public abstract class AbstractLSMRTree implements ILSMIndexInternal, ITreeIndex {
public class LSMRTreeComponent {
private final RTree rtree;
@@ -272,8 +272,8 @@
}
@Override
- public boolean insertUpdateOrDelete(ITupleReference tuple, IIndexOperationContext ictx)
- throws HyracksDataException, IndexException {
+ public void insertUpdateOrDelete(ITupleReference tuple, IIndexOperationContext ictx) throws HyracksDataException,
+ IndexException {
LSMRTreeOpContext ctx = (LSMRTreeOpContext) ictx;
if (ctx.getIndexOp() == IndexOperation.PHYSICALDELETE) {
throw new UnsupportedOperationException("Physical delete not yet supported in LSM R-tree");
@@ -322,7 +322,6 @@
// that all the corresponding insert tuples are deleted
}
}
- return true;
}
@Override