abdullah alamoudi has uploaded a new change for review. https://asterix-gerrit.ics.uci.edu/2671
Change subject: [NO ISSUE][STO] Only delete allocated components ...................................................................... [NO ISSUE][STO] Only delete allocated components Change-Id: I372127a0dec21148efa1a94cf6c976818963d761 --- M hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMHarness.java 1 file changed, 18 insertions(+), 10 deletions(-) git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb refs/changes/71/2671/1 diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMHarness.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMHarness.java index 59f48d4..644508e 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMHarness.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMHarness.java @@ -829,19 +829,24 @@ throws HyracksDataException { BlockingIOOperationCallbackWrapper ioCallback = new BlockingIOOperationCallbackWrapper(lsmIndex.getIOOperationCallback()); - boolean deleteMemoryComponent; + boolean deleteMemoryComponent = false; synchronized (opTracker) { waitForFlushesAndMerges(); ensureNoFailedFlush(); - // We always start with the memory component - ILSMMemoryComponent memComponent = lsmIndex.getCurrentMemoryComponent(); - deleteMemoryComponent = predicate.test(memComponent); - if (deleteMemoryComponent) { - // schedule a delete for flushed component - ctx.reset(); - ctx.setOperation(IndexOperation.DELETE_MEMORY_COMPONENT); - // ScheduleFlush is actually a try operation - scheduleFlush(ctx, ioCallback); + if (lsmIndex.isMemoryComponentsAllocated()) { + // We always start with the memory component + ILSMMemoryComponent memComponent = lsmIndex.getCurrentMemoryComponent(); + deleteMemoryComponent = predicate.test(memComponent); + if (deleteMemoryComponent) { + // schedule a delete for flushed component + ctx.reset(); + ctx.setOperation(IndexOperation.DELETE_MEMORY_COMPONENT); + // ScheduleFlush is actually a try operation + scheduleFlush(ctx, ioCallback); + } else { + // shouldn't try to delete disk components while memory component is still there + return; + } } } // Here, we are releasing the opTracker to allow other operations: @@ -862,6 +867,9 @@ for (ILSMDiskComponent component : diskComponents) { if (predicate.test(component)) { ctx.getComponentsToBeMerged().add(component); + } else { + // can't delete components while newer ones are still there + break; } } if (ctx.getComponentsToBeMerged().isEmpty()) { -- To view, visit https://asterix-gerrit.ics.uci.edu/2671 To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I372127a0dec21148efa1a94cf6c976818963d761 Gerrit-PatchSet: 1 Gerrit-Project: asterixdb Gerrit-Branch: release-0.9.4-pre-rc Gerrit-Owner: abdullah alamoudi <bamou...@gmail.com>