Another round of refactoring. Moved critical code to sync. blocks.
diff --git a/hyracks/hyracks-storage-am-lsm-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/btree/impls/LSMBTree.java b/hyracks/hyracks-storage-am-lsm-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/btree/impls/LSMBTree.java
index f03de4b..eaa2585 100644
--- a/hyracks/hyracks-storage-am-lsm-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/btree/impls/LSMBTree.java
+++ b/hyracks/hyracks-storage-am-lsm-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/btree/impls/LSMBTree.java
@@ -438,15 +438,14 @@
}
@Override
- public ILSMComponent merge(List<ILSMComponent> mergedComponents, ILSMIOOperation operation)
- throws HyracksDataException, IndexException {
+ public ILSMComponent merge(ILSMIOOperation operation) throws HyracksDataException, IndexException {
LSMBTreeMergeOperation mergeOp = (LSMBTreeMergeOperation) operation;
ITreeIndexCursor cursor = mergeOp.getCursor();
RangePredicate rangePred = new RangePredicate(null, null, true, true, null, null);
ILSMIndexOperationContext opCtx = ((LSMIndexSearchCursor) cursor).getOpCtx();
opCtx.getComponentHolder().addAll(mergeOp.getMergingComponents());
search(opCtx, cursor, rangePred);
- mergedComponents.addAll(mergeOp.getMergingComponents());
+ List<ILSMComponent> mergedComponents = mergeOp.getMergingComponents();
long numElements = 0L;
for (int i = 0; i < mergedComponents.size(); ++i) {
diff --git a/hyracks/hyracks-storage-am-lsm-common/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/common/api/ILSMIndexInternal.java b/hyracks/hyracks-storage-am-lsm-common/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/common/api/ILSMIndexInternal.java
index dddee9d..6020093 100644
--- a/hyracks/hyracks-storage-am-lsm-common/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/common/api/ILSMIndexInternal.java
+++ b/hyracks/hyracks-storage-am-lsm-common/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/common/api/ILSMIndexInternal.java
@@ -43,8 +43,7 @@
public void scheduleMerge(ILSMIndexOperationContext ctx, ILSMIOOperationCallback callback)
throws HyracksDataException, IndexException;
- public ILSMComponent merge(List<ILSMComponent> mergedComponents, ILSMIOOperation operation)
- throws HyracksDataException, IndexException;
+ public ILSMComponent merge(ILSMIOOperation operation) throws HyracksDataException, IndexException;
public void addComponent(ILSMComponent index);
diff --git a/hyracks/hyracks-storage-am-lsm-common/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/common/impls/AbstractDiskLSMComponent.java b/hyracks/hyracks-storage-am-lsm-common/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/common/impls/AbstractDiskLSMComponent.java
new file mode 100644
index 0000000..6307012
--- /dev/null
+++ b/hyracks/hyracks-storage-am-lsm-common/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/common/impls/AbstractDiskLSMComponent.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright 2009-2013 by The Regents of the University of California
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * you may obtain a copy of the License from
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package edu.uci.ics.hyracks.storage.am.lsm.common.impls;
+
+import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
+
+public abstract class AbstractDiskLSMComponent extends AbstractLSMComponent {
+
+ public AbstractDiskLSMComponent() {
+ super();
+ state = ComponentState.READABLE_UNWRITABLE;
+ }
+
+ @Override
+ public boolean threadEnter(LSMOperationType opType, boolean isMutableComponent) {
+ if (state == ComponentState.INACTIVE) {
+ return false;
+ }
+
+ switch (opType) {
+ case FORCE_MODIFICATION:
+ case MODIFICATION:
+ case SEARCH:
+ readerCount++;
+ break;
+ case MERGE:
+ if (state == ComponentState.READABLE_MERGING) {
+ return false;
+ }
+ state = ComponentState.READABLE_MERGING;
+ readerCount++;
+ break;
+ default:
+ throw new UnsupportedOperationException("Unsupported operation " + opType);
+ }
+ return true;
+ }
+
+ @Override
+ public void threadExit(LSMOperationType opType, boolean failedOperation, boolean isMutableComponent)
+ throws HyracksDataException {
+ switch (opType) {
+ case MERGE:
+ if (failedOperation) {
+ state = ComponentState.READABLE_UNWRITABLE;
+ }
+ case FORCE_MODIFICATION:
+ case MODIFICATION:
+ case SEARCH:
+ readerCount--;
+ if (readerCount == 0 && state == ComponentState.READABLE_MERGING) {
+ state = ComponentState.INACTIVE;
+ }
+ break;
+ default:
+ throw new UnsupportedOperationException("Unsupported operation " + opType);
+ }
+ assert readerCount > -1;
+ }
+
+ @Override
+ public LSMComponentType getType() {
+ return LSMComponentType.DISK;
+ }
+
+ @Override
+ public ComponentState getState() {
+ return state;
+ }
+
+ protected abstract void destroy() throws HyracksDataException;
+
+}
diff --git a/hyracks/hyracks-storage-am-lsm-common/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/common/impls/AbstractLSMComponent.java b/hyracks/hyracks-storage-am-lsm-common/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/common/impls/AbstractLSMComponent.java
new file mode 100644
index 0000000..5dab25f
--- /dev/null
+++ b/hyracks/hyracks-storage-am-lsm-common/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/common/impls/AbstractLSMComponent.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2009-2013 by The Regents of the University of California
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * you may obtain a copy of the License from
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package edu.uci.ics.hyracks.storage.am.lsm.common.impls;
+
+import edu.uci.ics.hyracks.storage.am.lsm.common.api.ILSMComponent;
+
+public abstract class AbstractLSMComponent implements ILSMComponent {
+
+ protected ComponentState state;
+ protected int readerCount;
+
+ public AbstractLSMComponent() {
+ readerCount = 0;
+ }
+
+ @Override
+ public ComponentState getState() {
+ return state;
+ }
+}
diff --git a/hyracks/hyracks-storage-am-lsm-common/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/common/impls/AbstractMemoryLSMComponent.java b/hyracks/hyracks-storage-am-lsm-common/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/common/impls/AbstractMemoryLSMComponent.java
new file mode 100644
index 0000000..33ad39b
--- /dev/null
+++ b/hyracks/hyracks-storage-am-lsm-common/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/common/impls/AbstractMemoryLSMComponent.java
@@ -0,0 +1,178 @@
+/*
+ * Copyright 2009-2013 by The Regents of the University of California
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * you may obtain a copy of the License from
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package edu.uci.ics.hyracks.storage.am.lsm.common.impls;
+
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
+import edu.uci.ics.hyracks.storage.am.lsm.common.api.IVirtualBufferCache;
+
+public abstract class AbstractMemoryLSMComponent extends AbstractLSMComponent {
+
+ private int writerCount;
+ private final IVirtualBufferCache vbc;
+ private final AtomicBoolean isModified;
+ private boolean requestedToBeActive;
+
+ public AbstractMemoryLSMComponent(IVirtualBufferCache vbc, boolean isActive) {
+ super();
+ this.vbc = vbc;
+ writerCount = 0;
+ if (isActive) {
+ state = ComponentState.READABLE_WRITABLE;
+ } else {
+ state = ComponentState.INACTIVE;
+ }
+ isModified = new AtomicBoolean();
+ }
+
+ @Override
+ public boolean threadEnter(LSMOperationType opType, boolean isMutableComponent) throws HyracksDataException {
+ if (state == ComponentState.INACTIVE && requestedToBeActive) {
+ state = ComponentState.READABLE_WRITABLE;
+ requestedToBeActive = false;
+ }
+ switch (opType) {
+ case FORCE_MODIFICATION:
+ if (isMutableComponent) {
+ if (state == ComponentState.READABLE_WRITABLE || state == ComponentState.READABLE_UNWRITABLE) {
+ writerCount++;
+ } else {
+ return false;
+ }
+ } else {
+ if (state == ComponentState.READABLE_UNWRITABLE
+ || state == ComponentState.READABLE_UNWRITABLE_FLUSHING) {
+ readerCount++;
+ } else {
+ return false;
+ }
+ }
+ break;
+ case MODIFICATION:
+ if (isMutableComponent) {
+ if (state == ComponentState.READABLE_WRITABLE) {
+ writerCount++;
+ } else {
+ return false;
+ }
+ } else {
+ if (state == ComponentState.READABLE_UNWRITABLE
+ || state == ComponentState.READABLE_UNWRITABLE_FLUSHING) {
+ readerCount++;
+ } else {
+ return false;
+ }
+ }
+ break;
+ case SEARCH:
+ if (state == ComponentState.READABLE_WRITABLE || state == ComponentState.READABLE_UNWRITABLE
+ || state == ComponentState.READABLE_UNWRITABLE_FLUSHING) {
+ readerCount++;
+ } else {
+ return false;
+ }
+ break;
+ case FLUSH:
+ if (state == ComponentState.READABLE_WRITABLE || state == ComponentState.READABLE_UNWRITABLE) {
+ assert writerCount == 0;
+ state = ComponentState.READABLE_UNWRITABLE_FLUSHING;
+ readerCount++;
+ } else {
+ return false;
+ }
+ break;
+ default:
+ throw new UnsupportedOperationException("Unsupported operation " + opType);
+ }
+ return true;
+ }
+
+ @Override
+ public void threadExit(LSMOperationType opType, boolean failedOperation, boolean isMutableComponent)
+ throws HyracksDataException {
+ switch (opType) {
+ case FORCE_MODIFICATION:
+ case MODIFICATION:
+ if (isMutableComponent) {
+ writerCount--;
+ if (state == ComponentState.READABLE_WRITABLE && isFull() && !failedOperation) {
+ state = ComponentState.READABLE_UNWRITABLE;
+ }
+ } else {
+ readerCount--;
+ if (state == ComponentState.UNREADABLE_UNWRITABLE && readerCount == 0) {
+ state = ComponentState.INACTIVE;
+ }
+ }
+ break;
+ case SEARCH:
+ readerCount--;
+ if (state == ComponentState.UNREADABLE_UNWRITABLE && readerCount == 0) {
+ state = ComponentState.INACTIVE;
+ }
+ break;
+ case FLUSH:
+ assert state == ComponentState.READABLE_UNWRITABLE_FLUSHING;
+ readerCount--;
+ if (readerCount == 0) {
+ state = ComponentState.INACTIVE;
+ } else {
+ state = ComponentState.UNREADABLE_UNWRITABLE;
+ }
+ break;
+ default:
+ throw new UnsupportedOperationException("Unsupported operation " + opType);
+ }
+ assert readerCount > -1 && writerCount > -1;
+ }
+
+ public boolean isReadable() {
+ if (state == ComponentState.INACTIVE || state == ComponentState.UNREADABLE_UNWRITABLE) {
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public LSMComponentType getType() {
+ return LSMComponentType.MEMORY;
+ }
+
+ @Override
+ public ComponentState getState() {
+ return state;
+ }
+
+ public void setActive() {
+ requestedToBeActive = true;
+ }
+
+ public void setIsModified() {
+ isModified.set(true);
+ }
+
+ public boolean isModified() {
+ return isModified.get();
+ }
+
+ public boolean isFull() {
+ return vbc.isFull();
+ }
+
+ protected void reset() throws HyracksDataException {
+ isModified.set(false);
+ }
+}
diff --git a/hyracks/hyracks-storage-am-lsm-common/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/common/impls/LSMHarness.java b/hyracks/hyracks-storage-am-lsm-common/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/common/impls/LSMHarness.java
index a633758..b2ac681 100644
--- a/hyracks/hyracks-storage-am-lsm-common/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/common/impls/LSMHarness.java
+++ b/hyracks/hyracks-storage-am-lsm-common/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/common/impls/LSMHarness.java
@@ -15,7 +15,6 @@
package edu.uci.ics.hyracks.storage.am.lsm.common.impls;
-import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -49,48 +48,14 @@
this.mergePolicy = mergePolicy;
}
- private void threadExit(ILSMIndexOperationContext opCtx, LSMOperationType opType) throws HyracksDataException {
- opTracker.afterOperation(lsmIndex, opType, opCtx.getSearchOperationCallback(), opCtx.getModificationCallback());
- }
-
private boolean getAndEnterComponents(ILSMIndexOperationContext ctx, LSMOperationType opType, boolean tryOperation)
throws HyracksDataException {
boolean entranceSuccessful = false;
while (!entranceSuccessful) {
synchronized (opTracker) {
- int numEntered = 0;
lsmIndex.getOperationalComponents(ctx);
- List<ILSMComponent> components = ctx.getComponentHolder();
- try {
- for (ILSMComponent c : components) {
- boolean isMutableComponent = numEntered == 0 && c.getType() == LSMComponentType.MEMORY ? true
- : false;
- if (!c.threadEnter(opType, isMutableComponent)) {
- break;
- }
- numEntered++;
- }
- entranceSuccessful = numEntered == components.size();
- if (entranceSuccessful) {
- opTracker.beforeOperation(lsmIndex, opType, ctx.getSearchOperationCallback(),
- ctx.getModificationCallback());
- }
- } finally {
- if (!entranceSuccessful) {
- int i = 0;
- for (ILSMComponent c : components) {
- if (numEntered == 0) {
- break;
- }
- boolean isMutableComponent = i == 0 && c.getType() == LSMComponentType.MEMORY ? true
- : false;
- c.threadExit(opType, true, isMutableComponent);
- i++;
- numEntered--;
- }
- }
- }
+ entranceSuccessful = enterComponents(ctx, opType);
if (tryOperation && !entranceSuccessful) {
return false;
}
@@ -99,11 +64,56 @@
return true;
}
- private void exitComponents(ILSMIndexOperationContext ctx, LSMOperationType opType, boolean failedOperation)
- throws HyracksDataException {
+ private boolean enterComponents(ILSMIndexOperationContext ctx, LSMOperationType opType) throws HyracksDataException {
+ boolean entranceSuccessful = false;
+ int numEntered = 0;
+ List<ILSMComponent> components = ctx.getComponentHolder();
+ try {
+ for (ILSMComponent c : components) {
+ boolean isMutableComponent = numEntered == 0 && c.getType() == LSMComponentType.MEMORY ? true : false;
+ if (!c.threadEnter(opType, isMutableComponent)) {
+ break;
+ }
+ numEntered++;
+ }
+ entranceSuccessful = numEntered == components.size();
+ } finally {
+ if (!entranceSuccessful) {
+ int i = 0;
+ for (ILSMComponent c : components) {
+ if (numEntered == 0) {
+ break;
+ }
+ boolean isMutableComponent = i == 0 && c.getType() == LSMComponentType.MEMORY ? true : false;
+ c.threadExit(opType, true, isMutableComponent);
+ i++;
+ numEntered--;
+ }
+ return false;
+ }
+ }
+ opTracker.beforeOperation(lsmIndex, opType, ctx.getSearchOperationCallback(), ctx.getModificationCallback());
+
+ // Check if there is any action that is needed to be taken based on the operation type
+ switch (opType) {
+ case FLUSH:
+ // Changing the flush status should *always* precede changing the mutable component.
+ lsmIndex.changeFlushStatusForCurrentMutableCompoent(false);
+ lsmIndex.changeMutableComponent();
+ break;
+ default:
+ break;
+ }
+
+ return true;
+ }
+
+ private void exitComponents(ILSMIndexOperationContext ctx, LSMOperationType opType, ILSMComponent newComponent,
+ boolean failedOperation) throws HyracksDataException, IndexException {
synchronized (opTracker) {
try {
int i = 0;
+ // First check if there is any action that is needed to be taken based on the state of each component.
for (ILSMComponent c : ctx.getComponentHolder()) {
boolean isMutableComponent = i == 0 && c.getType() == LSMComponentType.MEMORY ? true : false;
c.threadExit(opType, failedOperation, isMutableComponent);
@@ -133,8 +143,29 @@
}
i++;
}
+
+ // Then, perform any action that is needed to be taken based on the operation type.
+ switch (opType) {
+ case FLUSH:
+ // newComponent is null if the flush op. was not performed.
+ if (newComponent != null) {
+ lsmIndex.addComponent(newComponent);
+ mergePolicy.diskComponentAdded(lsmIndex);
+ }
+ break;
+ case MERGE:
+ // newComponent is null if the merge op. was not performed.
+ if (newComponent != null) {
+ lsmIndex.subsumeMergedComponents(newComponent, ctx.getComponentHolder());
+ }
+ break;
+ default:
+ break;
+ }
+
} finally {
- threadExit(ctx, opType);
+ opTracker.afterOperation(lsmIndex, opType, ctx.getSearchOperationCallback(),
+ ctx.getModificationCallback());
}
}
}
@@ -164,7 +195,7 @@
AbstractMemoryLSMComponent mutableComponent = (AbstractMemoryLSMComponent) ctx.getComponentHolder().get(0);
mutableComponent.setIsModified();
} finally {
- exitComponents(ctx, opType, false);
+ exitComponents(ctx, opType, null, false);
}
return true;
}
@@ -177,7 +208,7 @@
try {
lsmIndex.search(ctx, cursor, pred);
} catch (HyracksDataException | IndexException e) {
- exitComponents(ctx, opType, true);
+ exitComponents(ctx, opType, null, true);
throw e;
}
}
@@ -185,7 +216,11 @@
@Override
public void endSearch(ILSMIndexOperationContext ctx) throws HyracksDataException {
if (ctx.getOperation() == IndexOperation.SEARCH) {
- exitComponents(ctx, LSMOperationType.SEARCH, false);
+ try {
+ exitComponents(ctx, LSMOperationType.SEARCH, null, false);
+ } catch (IndexException e) {
+ throw new HyracksDataException(e);
+ }
}
}
@@ -200,32 +235,32 @@
if (!((AbstractMemoryLSMComponent) flushingComponent).isModified()) {
callback.beforeOperation();
callback.afterOperation(null, null);
- exitComponents(ctx, opType, false);
+ try {
+ exitComponents(ctx, opType, null, false);
+ } catch (IndexException e) {
+ throw new HyracksDataException(e);
+ }
callback.afterFinalize(null);
} else {
lsmIndex.scheduleFlush(ctx, callback);
}
- // Changing the flush status should *always* precede changing the mutable component.
- lsmIndex.changeFlushStatusForCurrentMutableCompoent(false);
- lsmIndex.changeMutableComponent();
}
@Override
public void flush(ILSMIndexOperationContext ctx, ILSMIOOperation operation) throws HyracksDataException,
IndexException {
if (LOGGER.isLoggable(Level.INFO)) {
- LOGGER.info(lsmIndex + ": flushing");
+ LOGGER.info(lsmIndex + ": Flushing ...");
}
- operation.getCallback().beforeOperation();
- ILSMComponent newComponent = lsmIndex.flush(operation);
- operation.getCallback().afterOperation(null, newComponent);
- lsmIndex.markAsValid(newComponent);
-
- synchronized (opTracker) {
- lsmIndex.addComponent(newComponent);
- mergePolicy.diskComponentAdded(lsmIndex);
- exitComponents(ctx, LSMOperationType.FLUSH, false);
+ ILSMComponent newComponent = null;
+ try {
+ operation.getCallback().beforeOperation();
+ newComponent = lsmIndex.flush(operation);
+ operation.getCallback().afterOperation(null, newComponent);
+ lsmIndex.markAsValid(newComponent);
+ } finally {
+ exitComponents(ctx, LSMOperationType.FLUSH, newComponent, false);
operation.getCallback().afterFinalize(newComponent);
}
}
@@ -238,7 +273,7 @@
return;
}
if (ctx.getComponentHolder().size() < 2) {
- exitComponents(ctx, opType, true);
+ exitComponents(ctx, opType, null, true);
} else {
lsmIndex.scheduleMerge(ctx, callback);
}
@@ -248,17 +283,19 @@
public void merge(ILSMIndexOperationContext ctx, ILSMIOOperation operation) throws HyracksDataException,
IndexException {
if (LOGGER.isLoggable(Level.INFO)) {
- LOGGER.info(lsmIndex + ": merging");
+ LOGGER.info(lsmIndex + ": Merging ...");
}
- List<ILSMComponent> mergedComponents = new ArrayList<ILSMComponent>();
- operation.getCallback().beforeOperation();
- ILSMComponent newComponent = lsmIndex.merge(mergedComponents, operation);
- operation.getCallback().afterOperation(mergedComponents, newComponent);
- lsmIndex.markAsValid(newComponent);
- lsmIndex.subsumeMergedComponents(newComponent, mergedComponents);
- exitComponents(ctx, LSMOperationType.MERGE, false);
- operation.getCallback().afterFinalize(newComponent);
+ ILSMComponent newComponent = null;
+ try {
+ operation.getCallback().beforeOperation();
+ newComponent = lsmIndex.merge(operation);
+ operation.getCallback().afterOperation(ctx.getComponentHolder(), newComponent);
+ lsmIndex.markAsValid(newComponent);
+ } finally {
+ exitComponents(ctx, LSMOperationType.MERGE, newComponent, false);
+ operation.getCallback().afterFinalize(newComponent);
+ }
}
@Override
diff --git a/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/invertedindex/impls/LSMInvertedIndex.java b/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/invertedindex/impls/LSMInvertedIndex.java
index d83bc1d..5e3a5c6 100644
--- a/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/invertedindex/impls/LSMInvertedIndex.java
+++ b/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/invertedindex/impls/LSMInvertedIndex.java
@@ -547,8 +547,7 @@
}
@Override
- public ILSMComponent merge(List<ILSMComponent> mergedComponents, ILSMIOOperation operation)
- throws HyracksDataException, IndexException {
+ public ILSMComponent merge(ILSMIOOperation operation) throws HyracksDataException, IndexException {
LSMInvertedIndexMergeOperation mergeOp = (LSMInvertedIndexMergeOperation) operation;
IIndexCursor cursor = mergeOp.getCursor();
@@ -575,10 +574,6 @@
cursor.close();
}
invIndexBulkLoader.end();
-
- // Add the merged components for cleanup.
- mergedComponents.addAll(mergeOp.getMergingComponents());
-
return component;
}
diff --git a/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/rtree/impls/LSMRTree.java b/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/rtree/impls/LSMRTree.java
index c603e1c..e17f742 100644
--- a/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/rtree/impls/LSMRTree.java
+++ b/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/rtree/impls/LSMRTree.java
@@ -300,15 +300,13 @@
}
@Override
- public ILSMComponent merge(List<ILSMComponent> mergedComponents, ILSMIOOperation operation)
- throws HyracksDataException, IndexException {
+ public ILSMComponent merge(ILSMIOOperation operation) throws HyracksDataException, IndexException {
LSMRTreeMergeOperation mergeOp = (LSMRTreeMergeOperation) operation;
ITreeIndexCursor cursor = mergeOp.getCursor();
ISearchPredicate rtreeSearchPred = new SearchPredicate(null, null);
ILSMIndexOperationContext opCtx = ((LSMRTreeSortedCursor) cursor).getOpCtx();
opCtx.getComponentHolder().addAll(mergeOp.getMergingComponents());
search(opCtx, cursor, rtreeSearchPred);
- mergedComponents.addAll(mergeOp.getMergingComponents());
LSMRTreeImmutableComponent mergedComponent = createDiskComponent(componentFactory,
mergeOp.getRTreeMergeTarget(), mergeOp.getBTreeMergeTarget(), mergeOp.getBloomFilterMergeTarget(), true);
diff --git a/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/rtree/impls/LSMRTreeWithAntiMatterTuples.java b/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/rtree/impls/LSMRTreeWithAntiMatterTuples.java
index 5340efd..c095244 100644
--- a/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/rtree/impls/LSMRTreeWithAntiMatterTuples.java
+++ b/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/rtree/impls/LSMRTreeWithAntiMatterTuples.java
@@ -258,15 +258,13 @@
}
@Override
- public ILSMComponent merge(List<ILSMComponent> mergedComponents, ILSMIOOperation operation)
- throws HyracksDataException, IndexException {
+ public ILSMComponent merge(ILSMIOOperation operation) throws HyracksDataException, IndexException {
LSMRTreeMergeOperation mergeOp = (LSMRTreeMergeOperation) operation;
ITreeIndexCursor cursor = mergeOp.getCursor();
ISearchPredicate rtreeSearchPred = new SearchPredicate(null, null);
ILSMIndexOperationContext opCtx = ((LSMIndexSearchCursor) cursor).getOpCtx();
opCtx.getComponentHolder().addAll(mergeOp.getMergingComponents());
search(opCtx, cursor, rtreeSearchPred);
- mergedComponents.addAll(mergeOp.getMergingComponents());
// Bulk load the tuples from all on-disk RTrees into the new RTree.
LSMRTreeImmutableComponent component = createDiskComponent(componentFactory, mergeOp.getRTreeMergeTarget(),