[ASTERIXDB-3476][STO] Mark column index active, after required steps completed
- user model changes: no
- storage format changes: no
- interface changes: no
Details:
For Column Indexes, "isActive" is marked to true,
before completing all the required steps for column Index activation.
And if some failure happens before completing the steps,
this leaves "isActive" to true, and index "isOpen" to false.
when next query comes for the index,because "isOpen" == false,
the index activation is called but as "isActive" flag is true,
which causes the exception to be thrown and the query to fail.
and requires a restart to cluster restart to undo the "isActive" state.
Ext-ref: MB-62964
Change-Id: Id09c2530303ae22a5c6e9729bfb66e73baf3e318
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18632
Integration-Tests: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Reviewed-by: Ritik Raj <raj.ritik9835@gmail.com>
Reviewed-by: Wail Alkowaileet <wael.y.k@gmail.com>
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/lsm/LSMColumnBTree.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/lsm/LSMColumnBTree.java
index 958bfde..d12fbe9 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/lsm/LSMColumnBTree.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/lsm/LSMColumnBTree.java
@@ -87,6 +87,11 @@
@Override
public synchronized void activate() throws HyracksDataException {
super.activate();
+ postLoadingDiskComponents();
+ }
+
+ @Override
+ protected void postLoadingDiskComponents() throws HyracksDataException {
if (diskComponents.isEmpty()) {
columnMetadata = columnManager.activate();
} else {
@@ -95,6 +100,7 @@
}
diskCacheManager.activate(columnMetadata.getNumberOfColumns(), diskComponents, diskBufferCache);
+ super.postLoadingDiskComponents();
}
@Override
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMIndex.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMIndex.java
index 25d928c..e9a3abe 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMIndex.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMIndex.java
@@ -200,6 +200,10 @@
throw HyracksDataException.create(ErrorCode.CANNOT_ACTIVATE_ACTIVE_INDEX);
}
loadDiskComponents();
+ postLoadingDiskComponents();
+ }
+
+ protected void postLoadingDiskComponents() throws HyracksDataException {
isActive = true;
}