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>

Reply via email to