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
