This is an automated email from the ASF dual-hosted git repository.

mblow pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/asterixdb.git

commit 09129566869073b84ba06dfbf147901d0eefbe38
Author: Murtadha Hubail <[email protected]>
AuthorDate: Fri Jan 8 21:41:49 2021 +0300

    [NO ISSUE][STO] Allocate Memory Component Index Lazily
    
    - user model changes: no
    - storage format changes: no
    - interface changes: no
    
    Details:
    
    - When a memory component is flushed, delay the allocation of
      its index until the next activation.
    - When the global virtual buffer cache is full, notify the
      flush thread to check if any indexes can be flushed.
    
    Change-Id: I2e07d4e857989fb742e1fc0c5e620a7293fcc3e4
    Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/9463
    Tested-by: Jenkins <[email protected]>
    Reviewed-by: Murtadha Hubail <[email protected]>
    Reviewed-by: Ali Alsuliman <[email protected]>
    Integration-Tests: Jenkins <[email protected]>
---
 .../common/context/GlobalVirtualBufferCache.java   |  6 +++++-
 .../common/impls/AbstractLSMMemoryComponent.java   | 22 ++++++++++++++++------
 .../impls/AbstractLSMWithBuddyMemoryComponent.java | 18 ++++++++++--------
 3 files changed, 31 insertions(+), 15 deletions(-)

diff --git 
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/GlobalVirtualBufferCache.java
 
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/GlobalVirtualBufferCache.java
index f772038..a51e13c 100644
--- 
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/GlobalVirtualBufferCache.java
+++ 
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/GlobalVirtualBufferCache.java
@@ -199,7 +199,11 @@ public class GlobalVirtualBufferCache implements 
IVirtualBufferCache, ILifeCycle
 
     @Override
     public boolean isFull() {
-        return vbc.isFull();
+        boolean full = vbc.isFull();
+        if (full) {
+            checkAndNotifyFlushThread();
+        }
+        return full;
     }
 
     @Override
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMMemoryComponent.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMMemoryComponent.java
index 3b6667e..8d37d97 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMMemoryComponent.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMMemoryComponent.java
@@ -35,6 +35,7 @@ import org.apache.logging.log4j.Logger;
 public abstract class AbstractLSMMemoryComponent extends AbstractLSMComponent 
implements ILSMMemoryComponent {
 
     private static final Logger LOGGER = LogManager.getLogger();
+    protected final AtomicBoolean allocated;
     private final IVirtualBufferCache vbc;
     private final AtomicBoolean isModified;
     private int writerCount;
@@ -48,6 +49,7 @@ public abstract class AbstractLSMMemoryComponent extends 
AbstractLSMComponent im
         writerCount = 0;
         state = ComponentState.INACTIVE;
         isModified = new AtomicBoolean();
+        allocated = new AtomicBoolean();
         metadata = new MemoryComponentMetadata();
     }
 
@@ -80,6 +82,9 @@ public abstract class AbstractLSMMemoryComponent extends 
AbstractLSMComponent im
 
     private void activate() throws HyracksDataException {
         if (state == ComponentState.INACTIVE) {
+            if (!allocated.get()) {
+                doAllocate();
+            }
             state = ComponentState.READABLE_WRITABLE;
             lsmIndex.getIOOperationCallback().recycled(this);
         }
@@ -247,10 +252,11 @@ public abstract class AbstractLSMMemoryComponent extends 
AbstractLSMComponent im
 
     @Override
     public void cleanup() throws HyracksDataException {
-        getIndex().deactivate();
-        getIndex().destroy();
-        getIndex().create();
-        getIndex().activate();
+        if (allocated.get()) {
+            getIndex().deactivate();
+            getIndex().destroy();
+            allocated.set(false);
+        }
     }
 
     @Override
@@ -286,6 +292,7 @@ public abstract class AbstractLSMMemoryComponent extends 
AbstractLSMComponent im
             created = true;
             getIndex().activate();
             activated = true;
+            allocated.set(true);
         } finally {
             if (created && !activated) {
                 getIndex().destroy();
@@ -305,8 +312,11 @@ public abstract class AbstractLSMMemoryComponent extends 
AbstractLSMComponent im
     }
 
     protected void doDeallocate() throws HyracksDataException {
-        getIndex().deactivate();
-        getIndex().destroy();
+        if (allocated.get()) {
+            getIndex().deactivate();
+            getIndex().destroy();
+            allocated.set(false);
+        }
         componentId = null;
     }
 
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMWithBuddyMemoryComponent.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMWithBuddyMemoryComponent.java
index 882b4bd..5ebaf26 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMWithBuddyMemoryComponent.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMWithBuddyMemoryComponent.java
@@ -34,11 +34,11 @@ public abstract class AbstractLSMWithBuddyMemoryComponent 
extends AbstractLSMMem
 
     @Override
     public void cleanup() throws HyracksDataException {
-        super.cleanup();
-        getBuddyIndex().deactivate();
-        getBuddyIndex().destroy();
-        getBuddyIndex().create();
-        getBuddyIndex().activate();
+        if (allocated.get()) {
+            super.cleanup();
+            getBuddyIndex().deactivate();
+            getBuddyIndex().destroy();
+        }
     }
 
     @Override
@@ -50,9 +50,11 @@ public abstract class AbstractLSMWithBuddyMemoryComponent 
extends AbstractLSMMem
 
     @Override
     public void doDeallocate() throws HyracksDataException {
-        super.doDeallocate();
-        getBuddyIndex().deactivate();
-        getBuddyIndex().destroy();
+        if (allocated.get()) {
+            super.doDeallocate();
+            getBuddyIndex().deactivate();
+            getBuddyIndex().destroy();
+        }
     }
 
     @Override

Reply via email to