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 9abc3a87479a4a62a21b6c316d3f9144ab181c2a
Author: Murtadha Hubail <[email protected]>
AuthorDate: Fri Jan 28 01:17:16 2022 +0300

    [NO ISSUE][STO] Skip flush on datasets with no open indexes
    
    - user model changes: no
    - storage format changes: no
    - interface changes: no
    
    Details:
    
    - When attempting to flush a dataset, skip if the dataset has
      no open indexes.
    - Halt when no primary index is open while other indexes are
      open to clear the inconsistent memory state.
    
    Change-Id: Ib30f8bbbad03f5563ce27d573553f562d0ae484d
    Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/15025
    Contrib: Jenkins <[email protected]>
    Integration-Tests: Jenkins <[email protected]>
    Reviewed-by: Ali Alsuliman <[email protected]>
    Tested-by: Murtadha Hubail <[email protected]>
---
 .../asterix/common/context/PrimaryIndexOperationTracker.java | 12 ++++++++++--
 .../src/main/java/org/apache/hyracks/util/ExitUtil.java      |  1 +
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git 
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/PrimaryIndexOperationTracker.java
 
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/PrimaryIndexOperationTracker.java
index fb001a0..b0d8e02 100644
--- 
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/PrimaryIndexOperationTracker.java
+++ 
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/PrimaryIndexOperationTracker.java
@@ -51,6 +51,7 @@ import 
org.apache.hyracks.storage.am.lsm.common.impls.FlushOperation;
 import org.apache.hyracks.storage.am.lsm.common.impls.LSMComponentId;
 import org.apache.hyracks.storage.common.IModificationOperationCallback;
 import org.apache.hyracks.storage.common.ISearchOperationCallback;
+import org.apache.hyracks.util.ExitUtil;
 import org.apache.hyracks.util.annotations.NotThreadSafe;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
@@ -132,6 +133,11 @@ public class PrimaryIndexOperationTracker extends 
BaseOperationTracker implement
                     throw new IllegalStateException(
                             "Can't request a flush on an index with active 
operations: " + numActiveOperations.get());
                 }
+                if (indexes.isEmpty()) {
+                    LOGGER.debug("no open indexes on dataset {} and partition 
{}... skipping flush",
+                            dsInfo.getDatasetID(), partition);
+                    return;
+                }
                 for (ILSMIndex lsmIndex : indexes) {
                     if (lsmIndex.isPrimaryIndex()) {
                         if (lsmIndex.isCurrentMutableComponentEmpty()) {
@@ -145,8 +151,10 @@ public class PrimaryIndexOperationTracker extends 
BaseOperationTracker implement
                 }
             }
             if (primaryLsmIndex == null) {
-                throw new IllegalStateException("Primary index not found in 
dataset " + dsInfo.getDatasetID()
-                        + " and partition " + partition + " open indexes " + 
indexes);
+                LOGGER.fatal(
+                        "Primary index not found in dataset {} and partition 
{} open indexes {}; halting to clear memory state",
+                        dsInfo.getDatasetID(), partition, indexes);
+                ExitUtil.halt(ExitUtil.EC_INCONSISTENT_STORAGE_REFERENCES);
             }
             for (ILSMIndex lsmIndex : indexes) {
                 ILSMOperationTracker opTracker = 
lsmIndex.getOperationTracker();
diff --git 
a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/ExitUtil.java
 
b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/ExitUtil.java
index f4c4183..beabb5d 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/ExitUtil.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/ExitUtil.java
@@ -56,6 +56,7 @@ public class ExitUtil {
     public static final int EC_ACTIVE_RESUME_FAILURE = 18;
     public static final int EC_NC_FAILED_TO_NOTIFY_TASKS_COMPLETED = 19;
     public static final int EC_FAILED_TO_CANCEL_ACTIVE_START_STOP = 22;
+    public static final int EC_INCONSISTENT_STORAGE_REFERENCES = 23;
     public static final int EC_IMMEDIATE_HALT = 33;
     public static final int EC_HALT_ABNORMAL_RESERVED_44 = 44;
     public static final int EC_IO_SCHEDULER_FAILED = 55;

Reply via email to