Luo Chen has uploaded a new change for review.

  https://asterix-gerrit.ics.uci.edu/2018

Change subject: [ASTERIXDB-2103] Fix too many disk components for 
CorrelatedPolicy
......................................................................

[ASTERIXDB-2103] Fix too many disk components for CorrelatedPolicy

- user model changes: no
- storage format changes: no
- interface changes: yes

Details:
Currently CorrelatedMergePolicy uses component Ids to ensure disk
components of primary and secondary indexes are merged together,
but without synchronization. However, this results in too many disk
components for secondary InvertedIndex. The reason is that when the
policy finds some secondary index is being merged, it will temporarily
ignore that secondary index. Since mering InvertedIndex is slow, it's
thus possible that it misses merges over and over again, causing too
many components on disk.

This patch fixes this bug by:
- Add dependingMerges to MergeOperation. A MergeOperation finishes
only after all depending merges have finished.
- Inside CorrelatedMergePolicy, the merge of the primary index depends
on all merges of secondaries indexes. This ensures the merge of the
primary index will be the last one to finish.

Change-Id: Ib6c06ee23f3bfd16b758802388389c00e29780b1
---
M 
asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/CorrelatedPrefixMergePolicy.java
M 
asterixdb/asterix-common/src/test/java/org/apache/asterix/test/context/CorrelatedPrefixMergePolicyTest.java
M 
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/ExternalBTree.java
M 
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/ExternalBTreeWithBuddy.java
M 
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTree.java
M 
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeMergeOperation.java
M 
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeWithBuddyMergeOperation.java
M 
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/ILSMHarness.java
M 
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/ILSMIOOperation.java
M 
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/ILSMIndex.java
M 
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/ILSMIndexAccessor.java
M 
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMIndex.java
M 
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/ConstantMergePolicy.java
M 
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/ExternalIndexHarness.java
M 
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMHarness.java
M 
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMTreeIndexAccessor.java
M 
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/MergeOperation.java
M 
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/PrefixMergePolicy.java
M 
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/impls/LSMInvertedIndex.java
M 
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/impls/LSMInvertedIndexAccessor.java
M 
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/impls/LSMInvertedIndexMergeOperation.java
M 
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/ExternalRTree.java
M 
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTree.java
M 
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTreeMergeOperation.java
M 
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTreeWithAntiMatterTuples.java
M 
hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeFilterMergeTestDriver.java
M 
hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeMergeTestDriver.java
M 
hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/multithread/LSMBTreeTestWorker.java
M 
hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-common-test/src/test/java/org/apache/hyracks/storage/am/lsm/common/test/PrefixMergePolicyTest.java
M 
hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-invertedindex-test/src/test/java/org/apache/hyracks/storage/am/lsm/invertedindex/LSMInvertedIndexMergeTest.java
M 
hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-invertedindex-test/src/test/java/org/apache/hyracks/storage/am/lsm/invertedindex/PartitionedLSMInvertedIndexMergeTest.java
M 
hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-invertedindex-test/src/test/java/org/apache/hyracks/storage/am/lsm/invertedindex/multithread/LSMInvertedIndexTestWorker.java
M 
hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-rtree-test/src/test/java/org/apache/hyracks/storage/am/lsm/rtree/LSMRTreeMergeTestDriver.java
M 
hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-rtree-test/src/test/java/org/apache/hyracks/storage/am/lsm/rtree/multithread/LSMRTreeTestWorker.java
M 
hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-rtree-test/src/test/java/org/apache/hyracks/storage/am/lsm/rtree/multithread/LSMRTreeWithAntiMatterTuplesTestWorker.java
35 files changed, 193 insertions(+), 95 deletions(-)


  git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb 
refs/changes/18/2018/1

diff --git 
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/CorrelatedPrefixMergePolicy.java
 
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/CorrelatedPrefixMergePolicy.java
index d28b991..6e3ca7e 100644
--- 
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/CorrelatedPrefixMergePolicy.java
+++ 
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/CorrelatedPrefixMergePolicy.java
@@ -33,6 +33,7 @@
 import 
org.apache.hyracks.storage.am.lsm.common.api.ILSMComponent.ComponentState;
 import org.apache.hyracks.storage.am.lsm.common.api.ILSMDiskComponent;
 import org.apache.hyracks.storage.am.lsm.common.api.ILSMDiskComponentId;
+import org.apache.hyracks.storage.am.lsm.common.api.ILSMIOOperation;
 import org.apache.hyracks.storage.am.lsm.common.api.ILSMIndex;
 import org.apache.hyracks.storage.am.lsm.common.api.ILSMIndexAccessor;
 import org.apache.hyracks.storage.am.lsm.common.api.ILSMMergePolicy;
@@ -79,7 +80,7 @@
         if (!index.isPrimaryIndex()) {
             return;
         }
-        List<ILSMDiskComponent> immutableComponents = new 
ArrayList<>(index.getImmutableComponents());
+        List<ILSMDiskComponent> immutableComponents = 
index.getImmutableComponents();
         if (!areComponentsReadableUnwritableState(immutableComponents)) {
             return;
         }
@@ -124,6 +125,10 @@
          * Note for case 3, we only let the primary index to schedule merge 
operations on behalf
          * of all indexes.
          */
+
+        if (!index.isPrimaryIndex()) {
+            return false;
+        }
 
         List<ILSMDiskComponent> immutableComponents = 
index.getImmutableComponents();
         int mergableImmutableComponentCount = 
getMergableImmutableComponentCount(immutableComponents);
@@ -195,8 +200,11 @@
                 }
                 Set<IndexInfo> indexInfos = 
datasetLifecycleManager.getDatasetInfo(datasetId).getDatsetIndexInfos();
                 int partition = getIndexPartition(index, indexInfos);
-                triggerScheduledMerge(minID, maxID, 
indexInfos.stream().filter(info -> info.getPartition() == partition)
-                        .collect(Collectors.toSet()));
+                List<ILSMIOOperation> dependingMerges = 
scheduleSecondaryIndexes(minID, maxID, indexInfos.stream()
+                        .filter(info -> info.getPartition() == 
partition).collect(Collectors.toSet()));
+
+                schedulePrimaryIndex(minID, maxID, index, dependingMerges);
+
                 return true;
             }
         }
@@ -205,7 +213,7 @@
 
     /**
      * Submit merge requests for all disk components within [minID, maxID]
-     * of all indexes of a given dataset in the given partition
+     * of all of secondary indexes of a given dataset in the given partition
      *
      * @param minID
      * @param maxID
@@ -213,37 +221,55 @@
      * @param indexInfos
      * @throws HyracksDataException
      */
-    private void triggerScheduledMerge(long minID, long maxID, Set<IndexInfo> 
indexInfos) throws HyracksDataException {
+    private List<ILSMIOOperation> scheduleSecondaryIndexes(long minID, long 
maxID, Set<IndexInfo> indexInfos)
+            throws HyracksDataException {
+        List<ILSMIOOperation> mergeOps = new ArrayList<>();
         for (IndexInfo info : indexInfos) {
             ILSMIndex lsmIndex = info.getIndex();
-
-            List<ILSMDiskComponent> immutableComponents = new 
ArrayList<>(lsmIndex.getImmutableComponents());
-            if (isMergeOngoing(immutableComponents)) {
+            List<ILSMDiskComponent> diskComponents = 
lsmIndex.getImmutableComponents();
+            if (lsmIndex.isPrimaryIndex() || isMergeOngoing(diskComponents)) {
                 continue;
             }
-            List<ILSMDiskComponent> mergableComponents = new ArrayList<>();
-            for (ILSMDiskComponent component : immutableComponents) {
-                ILSMDiskComponentId id = component.getComponentId();
-                if (!id.notFound()) {
-                    if (id.getMinId() >= minID && id.getMaxId() <= maxID) {
-                        mergableComponents.add(component);
-                    }
-                    if (id.getMaxId() < minID) {
-                        //disk components are ordered from latest (with 
largest IDs) to oldest (with smallest IDs)
-                        //if the component.maxID < minID, we can safely skip 
the rest disk components in the list
-                        break;
-                    }
-                }
-            }
+            List<ILSMDiskComponent> mergeableComponents = 
collectMergeableComponents(minID, maxID, diskComponents);
             ILSMIndexAccessor accessor =
                     lsmIndex.createAccessor(NoOpOperationCallback.INSTANCE, 
NoOpOperationCallback.INSTANCE);
-            accessor.scheduleMerge(lsmIndex.getIOOperationCallback(), 
mergableComponents);
+            
mergeOps.add(accessor.scheduleMerge(lsmIndex.getIOOperationCallback(), 
mergeableComponents, null));
         }
+        return mergeOps;
+    }
+
+    private void schedulePrimaryIndex(long minID, long maxID, ILSMIndex 
primaryIndex,
+            List<ILSMIOOperation> dependingMerges) throws HyracksDataException 
{
+        assert primaryIndex.isPrimaryIndex();
+        List<ILSMDiskComponent> diskComponents = 
primaryIndex.getImmutableComponents();
+        List<ILSMDiskComponent> mergeableComponents = 
collectMergeableComponents(minID, maxID, diskComponents);
+        ILSMIndexAccessor accessor =
+                primaryIndex.createAccessor(NoOpOperationCallback.INSTANCE, 
NoOpOperationCallback.INSTANCE);
+        accessor.scheduleMerge(primaryIndex.getIOOperationCallback(), 
mergeableComponents, dependingMerges);
+    }
+
+    private List<ILSMDiskComponent> collectMergeableComponents(long minID, 
long maxID,
+            List<ILSMDiskComponent> diskComponents) throws 
HyracksDataException {
+        List<ILSMDiskComponent> mergableComponents = new ArrayList<>();
+        for (ILSMDiskComponent component : diskComponents) {
+            ILSMDiskComponentId id = component.getComponentId();
+            if (!id.notFound()) {
+                if (id.getMinId() >= minID && id.getMaxId() <= maxID) {
+                    mergableComponents.add(component);
+                }
+                if (id.getMaxId() < minID) {
+                    //disk components are ordered from latest (with largest 
IDs) to oldest (with smallest IDs)
+                    //if the component.maxID < minID, we can safely skip the 
rest disk components in the list
+                    break;
+                }
+            }
+        }
+        return mergableComponents;
     }
 
     /**
      * This method returns the number of mergable components among the given 
list
-     * of immutable components that are ordered from the latest component to 
order ones. A caller
+     * of immutable components that are ordered from the latest component to 
oldest ones. A caller
      * need to make sure the order in the list.
      *
      * @param immutableComponents
diff --git 
a/asterixdb/asterix-common/src/test/java/org/apache/asterix/test/context/CorrelatedPrefixMergePolicyTest.java
 
b/asterixdb/asterix-common/src/test/java/org/apache/asterix/test/context/CorrelatedPrefixMergePolicyTest.java
index e36f4a8..6332870 100644
--- 
a/asterixdb/asterix-common/src/test/java/org/apache/asterix/test/context/CorrelatedPrefixMergePolicyTest.java
+++ 
b/asterixdb/asterix-common/src/test/java/org/apache/asterix/test/context/CorrelatedPrefixMergePolicyTest.java
@@ -300,7 +300,7 @@
                 return null;
             }
         
}).when(accessor).scheduleMerge(Mockito.any(ILSMIOOperationCallback.class),
-                Mockito.anyListOf(ILSMDiskComponent.class));
+                Mockito.anyListOf(ILSMDiskComponent.class), Mockito.any());
 
         
Mockito.when(index.createAccessor(Mockito.any(IModificationOperationCallback.class),
                 
Mockito.any(ISearchOperationCallback.class))).thenReturn(accessor);
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/ExternalBTree.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/ExternalBTree.java
index 86d926f..7e2267e 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/ExternalBTree.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/ExternalBTree.java
@@ -56,6 +56,7 @@
 import 
org.apache.hyracks.storage.am.lsm.common.impls.LSMComponentFileReferences;
 import org.apache.hyracks.storage.am.lsm.common.impls.LSMTreeIndexAccessor;
 import 
org.apache.hyracks.storage.am.lsm.common.impls.LSMTreeIndexAccessor.ICursorFactory;
+import org.apache.hyracks.storage.am.lsm.common.impls.MergeOperation;
 import org.apache.hyracks.storage.am.lsm.common.impls.TreeIndexFactory;
 import org.apache.hyracks.storage.common.IIndexBulkLoader;
 import org.apache.hyracks.storage.common.IIndexCursor;
@@ -170,8 +171,8 @@
     // The only reason to override the following method is that it uses a 
different context object
     // in addition, determining whether or not to keep deleted tuples is 
different here
     @Override
-    public void scheduleMerge(ILSMIndexOperationContext ctx, 
ILSMIOOperationCallback callback)
-            throws HyracksDataException {
+    public ILSMIOOperation scheduleMerge(ILSMIndexOperationContext ctx, 
ILSMIOOperationCallback callback,
+            List<ILSMIOOperation> dependingMerges) throws HyracksDataException 
{
         ExternalBTreeOpContext opCtx = 
createOpContext(NoOpOperationCallback.INSTANCE, -1);
         opCtx.setOperation(IndexOperation.MERGE);
         List<ILSMComponent> mergingComponents = ctx.getComponentHolder();
@@ -195,9 +196,11 @@
         LSMComponentFileReferences relMergeFileRefs =
                 
fileManager.getRelMergeFileReference(firstFile.getFile().getName(), 
lastFile.getFile().getName());
         ILSMIndexAccessor accessor = new LSMTreeIndexAccessor(getLsmHarness(), 
opCtx, cursorFactory);
-        ioScheduler.scheduleOperation(new LSMBTreeMergeOperation(accessor, 
mergingComponents, cursor,
+        MergeOperation mergeOp = new LSMBTreeMergeOperation(accessor, 
mergingComponents, cursor,
                 relMergeFileRefs.getInsertIndexFileReference(), 
relMergeFileRefs.getBloomFilterFileReference(),
-                callback, fileManager.getBaseDir().getAbsolutePath()));
+                callback, fileManager.getBaseDir().getAbsolutePath(), 
dependingMerges);
+        ioScheduler.scheduleOperation(mergeOp);
+        return mergeOp;
     }
 
     // This function should only be used when a transaction fail. it doesn't
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/ExternalBTreeWithBuddy.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/ExternalBTreeWithBuddy.java
index 7462c7a..0a584dc 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/ExternalBTreeWithBuddy.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/ExternalBTreeWithBuddy.java
@@ -342,8 +342,8 @@
     }
 
     @Override
-    public void scheduleMerge(ILSMIndexOperationContext ctx, 
ILSMIOOperationCallback callback)
-            throws HyracksDataException {
+    public ILSMIOOperation scheduleMerge(ILSMIndexOperationContext ctx, 
ILSMIOOperationCallback callback,
+            List<ILSMIOOperation> dependingMerges) throws HyracksDataException 
{
         ILSMIndexOperationContext bctx = 
createOpContext(NoOpOperationCallback.INSTANCE, 0);
         bctx.setOperation(IndexOperation.MERGE);
         List<ILSMComponent> mergingComponents = ctx.getComponentHolder();
@@ -363,11 +363,12 @@
             keepDeleteTuples = mergingComponents.get(mergingComponents.size() 
- 1) != secondDiskComponents
                     .get(secondDiskComponents.size() - 1);
         }
-
-        ioScheduler.scheduleOperation(new 
LSMBTreeWithBuddyMergeOperation(accessor, mergingComponents, cursor,
+        ILSMIOOperation mergeOp = new 
LSMBTreeWithBuddyMergeOperation(accessor, mergingComponents, cursor,
                 relMergeFileRefs.getInsertIndexFileReference(), 
relMergeFileRefs.getDeleteIndexFileReference(),
                 relMergeFileRefs.getBloomFilterFileReference(), callback, 
fileManager.getBaseDir().getAbsolutePath(),
-                keepDeleteTuples));
+                keepDeleteTuples, dependingMerges);
+        ioScheduler.scheduleOperation(mergeOp);
+        return mergeOp;
     }
 
     // This method creates the appropriate opContext for the targeted version
@@ -824,7 +825,7 @@
     @Override
     protected ILSMIOOperation 
createMergeOperation(AbstractLSMIndexOperationContext opCtx,
             List<ILSMComponent> mergingComponents, LSMComponentFileReferences 
mergeFileRefs,
-            ILSMIOOperationCallback callback) throws HyracksDataException {
+            ILSMIOOperationCallback callback, List<ILSMIOOperation> 
dependingMerges) throws HyracksDataException {
         return null;
     }
 }
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTree.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTree.java
index 24b408c..d550a01 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTree.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTree.java
@@ -625,7 +625,7 @@
     @Override
     protected ILSMIOOperation 
createMergeOperation(AbstractLSMIndexOperationContext opCtx,
             List<ILSMComponent> mergingComponents, LSMComponentFileReferences 
mergeFileRefs,
-            ILSMIOOperationCallback callback) {
+            ILSMIOOperationCallback callback, List<ILSMIOOperation> 
dependingMerges) {
         boolean returnDeletedTuples = false;
         ILSMIndexAccessor accessor = createAccessor(opCtx);
         if (mergingComponents.get(mergingComponents.size() - 1) != 
diskComponents.get(diskComponents.size() - 1)) {
@@ -634,6 +634,6 @@
         ITreeIndexCursor cursor = new LSMBTreeRangeSearchCursor(opCtx, 
returnDeletedTuples);
         return new LSMBTreeMergeOperation(accessor, mergingComponents, cursor,
                 mergeFileRefs.getInsertIndexFileReference(), 
mergeFileRefs.getBloomFilterFileReference(), callback,
-                fileManager.getBaseDir().getAbsolutePath());
+                fileManager.getBaseDir().getAbsolutePath(), dependingMerges);
     }
 }
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeMergeOperation.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeMergeOperation.java
index 0cc76f2..8b71c02 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeMergeOperation.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeMergeOperation.java
@@ -24,6 +24,7 @@
 import org.apache.hyracks.api.io.FileReference;
 import org.apache.hyracks.storage.am.common.api.ITreeIndexCursor;
 import org.apache.hyracks.storage.am.lsm.common.api.ILSMComponent;
+import org.apache.hyracks.storage.am.lsm.common.api.ILSMIOOperation;
 import org.apache.hyracks.storage.am.lsm.common.api.ILSMIOOperationCallback;
 import org.apache.hyracks.storage.am.lsm.common.api.ILSMIndexAccessor;
 import org.apache.hyracks.storage.am.lsm.common.impls.MergeOperation;
@@ -34,8 +35,8 @@
 
     public LSMBTreeMergeOperation(ILSMIndexAccessor accessor, 
List<ILSMComponent> mergingComponents,
             ITreeIndexCursor cursor, FileReference target, FileReference 
bloomFilterMergeTarget,
-            ILSMIOOperationCallback callback, String indexIdentifier) {
-        super(accessor, target, callback, indexIdentifier, mergingComponents, 
cursor);
+            ILSMIOOperationCallback callback, String indexIdentifier, 
List<ILSMIOOperation> dependingMerges) {
+        super(accessor, target, callback, indexIdentifier, mergingComponents, 
cursor, dependingMerges);
         this.bloomFilterMergeTarget = bloomFilterMergeTarget;
     }
 
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeWithBuddyMergeOperation.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeWithBuddyMergeOperation.java
index 2817f3a..924e4f0 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeWithBuddyMergeOperation.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeWithBuddyMergeOperation.java
@@ -23,6 +23,7 @@
 import org.apache.hyracks.api.io.FileReference;
 import org.apache.hyracks.storage.am.common.api.ITreeIndexCursor;
 import org.apache.hyracks.storage.am.lsm.common.api.ILSMComponent;
+import org.apache.hyracks.storage.am.lsm.common.api.ILSMIOOperation;
 import org.apache.hyracks.storage.am.lsm.common.api.ILSMIOOperationCallback;
 import org.apache.hyracks.storage.am.lsm.common.api.ILSMIndexAccessor;
 import org.apache.hyracks.storage.am.lsm.common.impls.MergeOperation;
@@ -36,8 +37,8 @@
     public LSMBTreeWithBuddyMergeOperation(ILSMIndexAccessor accessor, 
List<ILSMComponent> mergingComponents,
             ITreeIndexCursor cursor, FileReference target, FileReference 
buddyBtreeMergeTarget,
             FileReference bloomFilterMergeTarget, ILSMIOOperationCallback 
callback, String indexIdentifier,
-            boolean keepDeletedTuples) {
-        super(accessor, target, callback, indexIdentifier, mergingComponents, 
cursor);
+            boolean keepDeletedTuples, List<ILSMIOOperation> dependingMerges) {
+        super(accessor, target, callback, indexIdentifier, mergingComponents, 
cursor, dependingMerges);
         this.buddyBtreeMergeTarget = buddyBtreeMergeTarget;
         this.bloomFilterMergeTarget = bloomFilterMergeTarget;
         this.keepDeletedTuples = keepDeletedTuples;
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/ILSMHarness.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/ILSMHarness.java
index c0a3f2d..27e0af7 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/ILSMHarness.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/ILSMHarness.java
@@ -104,10 +104,12 @@
      *
      * @param ctx
      * @param callback
+     * @param dependingMerges
      * @throws HyracksDataException
      * @throws IndexException
      */
-    void scheduleMerge(ILSMIndexOperationContext ctx, ILSMIOOperationCallback 
callback) throws HyracksDataException;
+    ILSMIOOperation scheduleMerge(ILSMIndexOperationContext ctx, 
ILSMIOOperationCallback callback,
+            List<ILSMIOOperation> dependingMerges) throws HyracksDataException;
 
     /**
      * Schedule full merge
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/ILSMIOOperation.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/ILSMIOOperation.java
index 79360d5..58f24dd 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/ILSMIOOperation.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/ILSMIOOperation.java
@@ -55,4 +55,5 @@
 
     @Override
     Boolean call() throws HyracksDataException;
+
 }
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/ILSMIndex.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/ILSMIndex.java
index ae2c93d..c2bab2c 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/ILSMIndex.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/ILSMIndex.java
@@ -71,7 +71,8 @@
 
     ILSMDiskComponent flush(ILSMIOOperation operation) throws 
HyracksDataException;
 
-    void scheduleMerge(ILSMIndexOperationContext ctx, ILSMIOOperationCallback 
callback) throws HyracksDataException;
+    ILSMIOOperation scheduleMerge(ILSMIndexOperationContext ctx, 
ILSMIOOperationCallback callback,
+            List<ILSMIOOperation> dependingMerges) throws HyracksDataException;
 
     ILSMDiskComponent merge(ILSMIOOperation operation) throws 
HyracksDataException;
 
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/ILSMIndexAccessor.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/ILSMIndexAccessor.java
index 1042df2..d6b9118 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/ILSMIndexAccessor.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/ILSMIndexAccessor.java
@@ -51,11 +51,12 @@
      *            the merge operation callback
      * @param components
      *            the components to be merged
+     * @return The scheduled merge operation
      * @throws HyracksDataException
      * @throws IndexException
      */
-    void scheduleMerge(ILSMIOOperationCallback callback, 
List<ILSMDiskComponent> components)
-            throws HyracksDataException;
+    ILSMIOOperation scheduleMerge(ILSMIOOperationCallback callback, 
List<ILSMDiskComponent> components,
+            List<ILSMIOOperation> dependingMerges) throws HyracksDataException;
 
     /**
      * Schedule a full merge
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 c5bf2ca..959ef7e 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
@@ -337,8 +337,8 @@
     }
 
     @Override
-    public void scheduleMerge(ILSMIndexOperationContext ctx, 
ILSMIOOperationCallback callback)
-            throws HyracksDataException {
+    public ILSMIOOperation scheduleMerge(ILSMIndexOperationContext ctx, 
ILSMIOOperationCallback callback,
+            List<ILSMIOOperation> dependingMerges) throws HyracksDataException 
{
         // merge must create a different op ctx
         AbstractLSMIndexOperationContext opCtx =
                 createOpContext(NoOpOperationCallback.INSTANCE, 
NoOpOperationCallback.INSTANCE);
@@ -347,8 +347,10 @@
         ILSMDiskComponent firstComponent = (ILSMDiskComponent) 
mergingComponents.get(0);
         ILSMDiskComponent lastComponent = (ILSMDiskComponent) 
mergingComponents.get(mergingComponents.size() - 1);
         LSMComponentFileReferences mergeFileRefs = 
getMergeFileReferences(firstComponent, lastComponent);
-        ILSMIOOperation mergeOp = createMergeOperation(opCtx, 
mergingComponents, mergeFileRefs, callback);
+        MergeOperation mergeOp = (MergeOperation) createMergeOperation(opCtx, 
mergingComponents, mergeFileRefs,
+                callback, dependingMerges);
         ioScheduler.scheduleOperation(mergeOp);
+        return mergeOp;
     }
 
     private void addOperationalMutableComponents(List<ILSMComponent> 
operationalComponents) {
@@ -661,6 +663,6 @@
 
     protected abstract ILSMIOOperation 
createMergeOperation(AbstractLSMIndexOperationContext opCtx,
             List<ILSMComponent> mergingComponents, LSMComponentFileReferences 
mergeFileRefs,
-            ILSMIOOperationCallback callback) throws HyracksDataException;
+            ILSMIOOperationCallback callback, List<ILSMIOOperation> 
dependingMerges) throws HyracksDataException;
 
 }
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/ConstantMergePolicy.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/ConstantMergePolicy.java
index 6b9af7e..f2eaf27 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/ConstantMergePolicy.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/ConstantMergePolicy.java
@@ -49,7 +49,7 @@
         } else if (immutableComponents.size() >= numComponents) {
             ILSMIndexAccessor accessor =
                     index.createAccessor(NoOpOperationCallback.INSTANCE, 
NoOpOperationCallback.INSTANCE);
-            accessor.scheduleMerge(index.getIOOperationCallback(), 
immutableComponents);
+            accessor.scheduleMerge(index.getIOOperationCallback(), 
immutableComponents, null);
         }
     }
 
@@ -106,7 +106,7 @@
             }
             ILSMIndexAccessor accessor =
                     index.createAccessor(NoOpOperationCallback.INSTANCE, 
NoOpOperationCallback.INSTANCE);
-            accessor.scheduleMerge(index.getIOOperationCallback(), 
immutableComponents);
+            accessor.scheduleMerge(index.getIOOperationCallback(), 
immutableComponents, null);
             return true;
         }
     }
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/ExternalIndexHarness.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/ExternalIndexHarness.java
index ee67fbe..9bd6813 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/ExternalIndexHarness.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/ExternalIndexHarness.java
@@ -203,13 +203,13 @@
     }
 
     @Override
-    public void scheduleMerge(ILSMIndexOperationContext ctx, 
ILSMIOOperationCallback callback)
-            throws HyracksDataException {
+    public ILSMIOOperation scheduleMerge(ILSMIndexOperationContext ctx, 
ILSMIOOperationCallback callback,
+            List<ILSMIOOperation> dependingMerges) throws HyracksDataException 
{
         if (!getAndEnterComponents(ctx, LSMOperationType.MERGE, true)) {
             callback.afterFinalize(LSMOperationType.MERGE, null);
-            return;
+            return null;
         }
-        lsmIndex.scheduleMerge(ctx, callback);
+        return lsmIndex.scheduleMerge(ctx, callback, dependingMerges);
     }
 
     @Override
@@ -223,7 +223,7 @@
             return;
         }
         fullMergeIsRequested.set(false);
-        lsmIndex.scheduleMerge(ctx, callback);
+        lsmIndex.scheduleMerge(ctx, callback, null);
     }
 
     @Override
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 35c93ba..9b0356f 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
@@ -529,13 +529,13 @@
     }
 
     @Override
-    public void scheduleMerge(ILSMIndexOperationContext ctx, 
ILSMIOOperationCallback callback)
-            throws HyracksDataException {
+    public ILSMIOOperation scheduleMerge(ILSMIndexOperationContext ctx, 
ILSMIOOperationCallback callback,
+            List<ILSMIOOperation> dependingMerges) throws HyracksDataException 
{
         if (!getAndEnterComponents(ctx, LSMOperationType.MERGE, true)) {
             callback.afterFinalize(LSMOperationType.MERGE, null);
-            return;
+            return null;
         }
-        lsmIndex.scheduleMerge(ctx, callback);
+        return lsmIndex.scheduleMerge(ctx, callback, dependingMerges);
     }
 
     @Override
@@ -549,7 +549,7 @@
             return;
         }
         fullMergeIsRequested.set(false);
-        lsmIndex.scheduleMerge(ctx, callback);
+        lsmIndex.scheduleMerge(ctx, callback, null);
     }
 
     @Override
@@ -562,6 +562,7 @@
         boolean failedOperation = false;
         try {
             newComponent = lsmIndex.merge(operation);
+            waitForDependingMerges((MergeOperation) operation);
             operation.getCallback().afterOperation(LSMOperationType.MERGE, 
ctx.getComponentHolder(), newComponent);
             lsmIndex.markAsValid(newComponent);
         } catch (Throwable e) {
@@ -746,6 +747,32 @@
         }
     }
 
+    /**
+     * Wait for depending merge operations to finish. This is mainly used for 
the correlated merge policy,
+     * where the primary index needs to wait for all secondary indexes to 
finish merging.
+     *
+     * @param mergeOp
+     */
+    private void waitForDependingMerges(MergeOperation mergeOp) {
+        List<ILSMIOOperation> dependingMerges = mergeOp.getDependingMerges();
+        if (dependingMerges == null) {
+            return;
+        }
+        for (ILSMIOOperation op : dependingMerges) {
+            MergeOperation dependingMergeOp = (MergeOperation) op;
+            synchronized (dependingMergeOp) {
+                while (!dependingMergeOp.isFinished()) {
+                    try {
+                        dependingMergeOp.wait();
+                    } catch (InterruptedException e) {
+                        // ignore interruptions
+                    }
+                }
+            }
+
+        }
+    }
+
     @Override
     public String toString() {
         return getClass().getSimpleName() + ":" + lsmIndex;
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMTreeIndexAccessor.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMTreeIndexAccessor.java
index a45225d..5c59d12 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMTreeIndexAccessor.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMTreeIndexAccessor.java
@@ -140,12 +140,12 @@
     }
 
     @Override
-    public void scheduleMerge(ILSMIOOperationCallback callback, 
List<ILSMDiskComponent> components)
-            throws HyracksDataException {
+    public ILSMIOOperation scheduleMerge(ILSMIOOperationCallback callback, 
List<ILSMDiskComponent> components,
+            List<ILSMIOOperation> dependingMerges) throws HyracksDataException 
{
         ctx.setOperation(IndexOperation.MERGE);
         ctx.getComponentsToBeMerged().clear();
         ctx.getComponentsToBeMerged().addAll(components);
-        lsmHarness.scheduleMerge(ctx, callback);
+        return lsmHarness.scheduleMerge(ctx, callback, dependingMerges);
     }
 
     @Override
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/MergeOperation.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/MergeOperation.java
index 3540b84..7e985eb 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/MergeOperation.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/MergeOperation.java
@@ -23,6 +23,7 @@
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.api.io.FileReference;
 import org.apache.hyracks.storage.am.lsm.common.api.ILSMComponent;
+import org.apache.hyracks.storage.am.lsm.common.api.ILSMIOOperation;
 import org.apache.hyracks.storage.am.lsm.common.api.ILSMIOOperationCallback;
 import org.apache.hyracks.storage.am.lsm.common.api.ILSMIndexAccessor;
 import org.apache.hyracks.storage.common.IIndexCursor;
@@ -31,12 +32,16 @@
 
     protected final List<ILSMComponent> mergingComponents;
     protected final IIndexCursor cursor;
+    protected final List<ILSMIOOperation> dependingMerges;
+    protected boolean isFinished = false;
 
     public MergeOperation(ILSMIndexAccessor accessor, FileReference target, 
ILSMIOOperationCallback callback,
-            String indexIdentifier, List<ILSMComponent> mergingComponents, 
IIndexCursor cursor) {
+            String indexIdentifier, List<ILSMComponent> mergingComponents, 
IIndexCursor cursor,
+            List<ILSMIOOperation> dependingMerges) {
         super(accessor, target, callback, indexIdentifier);
         this.mergingComponents = mergingComponents;
         this.cursor = cursor;
+        this.dependingMerges = dependingMerges;
     }
 
     public List<ILSMComponent> getMergingComponents() {
@@ -45,7 +50,14 @@
 
     @Override
     public Boolean call() throws HyracksDataException {
-        accessor.merge(this);
+        try {
+            accessor.merge(this);
+        } finally {
+            synchronized (this) {
+                this.setFinished();
+                this.notifyAll();
+            }
+        }
         return true;
     }
 
@@ -57,4 +69,16 @@
     public IIndexCursor getCursor() {
         return cursor;
     }
+
+    public List<ILSMIOOperation> getDependingMerges() {
+        return dependingMerges;
+    }
+
+    public boolean isFinished() {
+        return isFinished;
+    }
+
+    public void setFinished() {
+        this.isFinished = true;
+    }
 }
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/PrefixMergePolicy.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/PrefixMergePolicy.java
index 329e4fb..caa8c00 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/PrefixMergePolicy.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/PrefixMergePolicy.java
@@ -247,7 +247,7 @@
         Collections.reverse(mergableComponents);
         ILSMIndexAccessor accessor =
                 index.createAccessor(NoOpOperationCallback.INSTANCE, 
NoOpOperationCallback.INSTANCE);
-        accessor.scheduleMerge(index.getIOOperationCallback(), 
mergableComponents);
+        accessor.scheduleMerge(index.getIOOperationCallback(), 
mergableComponents, null);
     }
 
     /**
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/impls/LSMInvertedIndex.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/impls/LSMInvertedIndex.java
index 1f2a810..d5c03b1 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/impls/LSMInvertedIndex.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/impls/LSMInvertedIndex.java
@@ -218,7 +218,7 @@
         if (ctx.getIndexTuple() != null) {
             ctx.getIndexTuple().reset(tuple);
             indexTuple = ctx.getIndexTuple();
-            
((InMemoryInvertedIndexAccessor)(ctx.getCurrentMutableInvIndexAccessors())).resetLogTuple(tuple);
+            ((InMemoryInvertedIndexAccessor) 
(ctx.getCurrentMutableInvIndexAccessors())).resetLogTuple(tuple);
         } else {
             indexTuple = tuple;
         }
@@ -719,11 +719,12 @@
     @Override
     protected ILSMIOOperation 
createMergeOperation(AbstractLSMIndexOperationContext opCtx,
             List<ILSMComponent> mergingComponents, LSMComponentFileReferences 
mergeFileRefs,
-            ILSMIOOperationCallback callback) throws HyracksDataException {
+            ILSMIOOperationCallback callback, List<ILSMIOOperation> 
dependingMerges) throws HyracksDataException {
         ILSMIndexAccessor accessor = new 
LSMInvertedIndexAccessor(getLsmHarness(), opCtx);
         IIndexCursor cursor = new LSMInvertedIndexRangeSearchCursor(opCtx);
         return new LSMInvertedIndexMergeOperation(accessor, mergingComponents, 
cursor,
                 mergeFileRefs.getInsertIndexFileReference(), 
mergeFileRefs.getDeleteIndexFileReference(),
-                mergeFileRefs.getBloomFilterFileReference(), callback, 
fileManager.getBaseDir().getAbsolutePath());
+                mergeFileRefs.getBloomFilterFileReference(), callback, 
fileManager.getBaseDir().getAbsolutePath(),
+                dependingMerges);
     }
 }
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/impls/LSMInvertedIndexAccessor.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/impls/LSMInvertedIndexAccessor.java
index dddd14a..f59bd7f 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/impls/LSMInvertedIndexAccessor.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/impls/LSMInvertedIndexAccessor.java
@@ -94,12 +94,12 @@
     }
 
     @Override
-    public void scheduleMerge(ILSMIOOperationCallback callback, 
List<ILSMDiskComponent> components)
-            throws HyracksDataException {
+    public ILSMIOOperation scheduleMerge(ILSMIOOperationCallback callback, 
List<ILSMDiskComponent> components,
+            List<ILSMIOOperation> dependingMerges) throws HyracksDataException 
{
         ctx.setOperation(IndexOperation.MERGE);
         ctx.getComponentsToBeMerged().clear();
         ctx.getComponentsToBeMerged().addAll(components);
-        lsmHarness.scheduleMerge(ctx, callback);
+        return lsmHarness.scheduleMerge(ctx, callback, dependingMerges);
     }
 
     @Override
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/impls/LSMInvertedIndexMergeOperation.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/impls/LSMInvertedIndexMergeOperation.java
index da374dc..acd95ea 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/impls/LSMInvertedIndexMergeOperation.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/impls/LSMInvertedIndexMergeOperation.java
@@ -23,6 +23,7 @@
 
 import org.apache.hyracks.api.io.FileReference;
 import org.apache.hyracks.storage.am.lsm.common.api.ILSMComponent;
+import org.apache.hyracks.storage.am.lsm.common.api.ILSMIOOperation;
 import org.apache.hyracks.storage.am.lsm.common.api.ILSMIOOperationCallback;
 import org.apache.hyracks.storage.am.lsm.common.api.ILSMIndexAccessor;
 import org.apache.hyracks.storage.am.lsm.common.impls.MergeOperation;
@@ -34,8 +35,9 @@
 
     public LSMInvertedIndexMergeOperation(ILSMIndexAccessor accessor, 
List<ILSMComponent> mergingComponents,
             IIndexCursor cursor, FileReference target, FileReference 
deletedKeysBTreeMergeTarget,
-            FileReference bloomFilterMergeTarget, ILSMIOOperationCallback 
callback, String indexIdentifier) {
-        super(accessor, target, callback, indexIdentifier, mergingComponents, 
cursor);
+            FileReference bloomFilterMergeTarget, ILSMIOOperationCallback 
callback, String indexIdentifier,
+            List<ILSMIOOperation> dependingMerges) {
+        super(accessor, target, callback, indexIdentifier, mergingComponents, 
cursor, dependingMerges);
         this.deletedKeysBTreeMergeTarget = deletedKeysBTreeMergeTarget;
         this.bloomFilterMergeTarget = bloomFilterMergeTarget;
     }
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/ExternalRTree.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/ExternalRTree.java
index e39c3f9..eb65160 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/ExternalRTree.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/ExternalRTree.java
@@ -629,8 +629,8 @@
     // The only change the the schedule merge is the method used to create the
     // opCtx. first line <- in schedule merge, we->
     @Override
-    public void scheduleMerge(ILSMIndexOperationContext ctx, 
ILSMIOOperationCallback callback)
-            throws HyracksDataException {
+    public ILSMIOOperation scheduleMerge(ILSMIndexOperationContext ctx, 
ILSMIOOperationCallback callback,
+            List<ILSMIOOperation> dependingMerges) throws HyracksDataException 
{
         ILSMIndexOperationContext rctx = 
createOpContext(NoOpOperationCallback.INSTANCE, -1);
         rctx.setOperation(IndexOperation.MERGE);
         List<ILSMComponent> mergingComponents = ctx.getComponentHolder();
@@ -640,10 +640,12 @@
                         (ILSMDiskComponent) 
mergingComponents.get(mergingComponents.size() - 1));
         ILSMIndexAccessor accessor = new LSMRTreeAccessor(getLsmHarness(), 
rctx, buddyBTreeFields);
         // create the merge operation.
-        LSMRTreeMergeOperation mergeOp = new LSMRTreeMergeOperation(accessor, 
mergingComponents, cursor,
+        ILSMIOOperation mergeOp = new LSMRTreeMergeOperation(accessor, 
mergingComponents, cursor,
                 relMergeFileRefs.getInsertIndexFileReference(), 
relMergeFileRefs.getDeleteIndexFileReference(),
-                relMergeFileRefs.getBloomFilterFileReference(), callback, 
fileManager.getBaseDir().getAbsolutePath());
+                relMergeFileRefs.getBloomFilterFileReference(), callback, 
fileManager.getBaseDir().getAbsolutePath(),
+                dependingMerges);
         ioScheduler.scheduleOperation(mergeOp);
+        return mergeOp;
     }
 
     @Override
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTree.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTree.java
index 0a47aea..43898ad 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTree.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTree.java
@@ -439,11 +439,12 @@
     @Override
     protected ILSMIOOperation 
createMergeOperation(AbstractLSMIndexOperationContext opCtx,
             List<ILSMComponent> mergingComponents, LSMComponentFileReferences 
mergeFileRefs,
-            ILSMIOOperationCallback callback) throws HyracksDataException {
+            ILSMIOOperationCallback callback, List<ILSMIOOperation> 
dependingMerges) throws HyracksDataException {
         ITreeIndexCursor cursor = new LSMRTreeSortedCursor(opCtx, linearizer, 
buddyBTreeFields);
         ILSMIndexAccessor accessor = new LSMRTreeAccessor(getLsmHarness(), 
opCtx, buddyBTreeFields);
         return new LSMRTreeMergeOperation(accessor, mergingComponents, cursor,
                 mergeFileRefs.getInsertIndexFileReference(), 
mergeFileRefs.getDeleteIndexFileReference(),
-                mergeFileRefs.getBloomFilterFileReference(), callback, 
fileManager.getBaseDir().getAbsolutePath());
+                mergeFileRefs.getBloomFilterFileReference(), callback, 
fileManager.getBaseDir().getAbsolutePath(),
+                dependingMerges);
     }
 }
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTreeMergeOperation.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTreeMergeOperation.java
index 9b3aa0c..412298c 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTreeMergeOperation.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTreeMergeOperation.java
@@ -23,6 +23,7 @@
 import org.apache.hyracks.api.io.FileReference;
 import org.apache.hyracks.storage.am.common.api.ITreeIndexCursor;
 import org.apache.hyracks.storage.am.lsm.common.api.ILSMComponent;
+import org.apache.hyracks.storage.am.lsm.common.api.ILSMIOOperation;
 import org.apache.hyracks.storage.am.lsm.common.api.ILSMIOOperationCallback;
 import org.apache.hyracks.storage.am.lsm.common.api.ILSMIndexAccessor;
 import org.apache.hyracks.storage.am.lsm.common.impls.MergeOperation;
@@ -33,8 +34,9 @@
 
     public LSMRTreeMergeOperation(ILSMIndexAccessor accessor, 
List<ILSMComponent> mergingComponents,
             ITreeIndexCursor cursor, FileReference target, FileReference 
btreeMergeTarget,
-            FileReference bloomFilterMergeTarget, ILSMIOOperationCallback 
callback, String indexIdentifier) {
-        super(accessor, target, callback, indexIdentifier, mergingComponents, 
cursor);
+            FileReference bloomFilterMergeTarget, ILSMIOOperationCallback 
callback, String indexIdentifier,
+            List<ILSMIOOperation> dependingMerges) {
+        super(accessor, target, callback, indexIdentifier, mergingComponents, 
cursor, dependingMerges);
         this.btreeMergeTarget = btreeMergeTarget;
         this.bloomFilterMergeTarget = bloomFilterMergeTarget;
     }
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTreeWithAntiMatterTuples.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTreeWithAntiMatterTuples.java
index 94648fb..dbba04c 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTreeWithAntiMatterTuples.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTreeWithAntiMatterTuples.java
@@ -346,7 +346,7 @@
     @Override
     protected ILSMIOOperation 
createMergeOperation(AbstractLSMIndexOperationContext opCtx,
             List<ILSMComponent> mergingComponents, LSMComponentFileReferences 
mergeFileRefs,
-            ILSMIOOperationCallback callback) throws HyracksDataException {
+            ILSMIOOperationCallback callback, List<ILSMIOOperation> 
dependingMerges) throws HyracksDataException {
         boolean returnDeletedTuples = false;
         if (mergingComponents.get(mergingComponents.size() - 1) != 
diskComponents.get(diskComponents.size() - 1)) {
             returnDeletedTuples = true;
@@ -354,6 +354,6 @@
         ITreeIndexCursor cursor = new 
LSMRTreeWithAntiMatterTuplesSearchCursor(opCtx, returnDeletedTuples);
         ILSMIndexAccessor accessor = new LSMTreeIndexAccessor(getLsmHarness(), 
opCtx, cursorFactory);
         return new MergeOperation(accessor, 
mergeFileRefs.getInsertIndexFileReference(), callback,
-                fileManager.getBaseDir().getAbsolutePath(), mergingComponents, 
cursor);
+                fileManager.getBaseDir().getAbsolutePath(), mergingComponents, 
cursor, dependingMerges);
     }
 }
diff --git 
a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeFilterMergeTestDriver.java
 
b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeFilterMergeTestDriver.java
index 6ffdc7d..ce9b65e 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeFilterMergeTestDriver.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeFilterMergeTestDriver.java
@@ -146,7 +146,7 @@
                 }
             }
             
accessor.scheduleMerge(NoOpIOOperationCallbackFactory.INSTANCE.createIoOpCallback(),
-                    ((LSMBTree) ctx.getIndex()).getImmutableComponents());
+                    ((LSMBTree) ctx.getIndex()).getImmutableComponents(), 
null);
 
             flushedComponents = ((LSMBTree) 
ctx.getIndex()).getImmutableComponents();
             Pair<ITupleReference, ITupleReference> mergedMinMax =
diff --git 
a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeMergeTestDriver.java
 
b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeMergeTestDriver.java
index 1df0d39..26c64b4 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeMergeTestDriver.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeMergeTestDriver.java
@@ -76,7 +76,7 @@
 
             ILSMIndexAccessor accessor = (ILSMIndexAccessor) 
ctx.getIndexAccessor();
             
accessor.scheduleMerge(NoOpIOOperationCallbackFactory.INSTANCE.createIoOpCallback(),
-                    ((LSMBTree) ctx.getIndex()).getImmutableComponents());
+                    ((LSMBTree) ctx.getIndex()).getImmutableComponents(), 
null);
 
             orderedIndexTestUtils.checkPointSearches(ctx);
             orderedIndexTestUtils.checkScan(ctx);
diff --git 
a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/multithread/LSMBTreeTestWorker.java
 
b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/multithread/LSMBTreeTestWorker.java
index 024b72d..263b187 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/multithread/LSMBTreeTestWorker.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/multithread/LSMBTreeTestWorker.java
@@ -119,7 +119,7 @@
 
             case MERGE:
                 
accessor.scheduleMerge(NoOpIOOperationCallbackFactory.INSTANCE.createIoOpCallback(),
-                        lsmBTree.getImmutableComponents());
+                        lsmBTree.getImmutableComponents(), null);
                 break;
 
             default:
diff --git 
a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-common-test/src/test/java/org/apache/hyracks/storage/am/lsm/common/test/PrefixMergePolicyTest.java
 
b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-common-test/src/test/java/org/apache/hyracks/storage/am/lsm/common/test/PrefixMergePolicyTest.java
index 04dc736..e0f9fc6 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-common-test/src/test/java/org/apache/hyracks/storage/am/lsm/common/test/PrefixMergePolicyTest.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-common-test/src/test/java/org/apache/hyracks/storage/am/lsm/common/test/PrefixMergePolicyTest.java
@@ -221,7 +221,7 @@
                 return null;
             }
         
}).when(accessor).scheduleMerge(Mockito.any(ILSMIOOperationCallback.class),
-                Mockito.anyListOf(ILSMDiskComponent.class));
+                Mockito.anyListOf(ILSMDiskComponent.class), null);
 
         
Mockito.when(index.createAccessor(Mockito.any(IModificationOperationCallback.class),
                 
Mockito.any(ISearchOperationCallback.class))).thenReturn(accessor);
diff --git 
a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-invertedindex-test/src/test/java/org/apache/hyracks/storage/am/lsm/invertedindex/LSMInvertedIndexMergeTest.java
 
b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-invertedindex-test/src/test/java/org/apache/hyracks/storage/am/lsm/invertedindex/LSMInvertedIndexMergeTest.java
index c6520d5..99cef9a 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-invertedindex-test/src/test/java/org/apache/hyracks/storage/am/lsm/invertedindex/LSMInvertedIndexMergeTest.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-invertedindex-test/src/test/java/org/apache/hyracks/storage/am/lsm/invertedindex/LSMInvertedIndexMergeTest.java
@@ -58,7 +58,7 @@
             }
             // Perform merge.
             
invIndexAccessor.scheduleMerge(NoOpIOOperationCallbackFactory.INSTANCE.createIoOpCallback(),
-                    ((LSMInvertedIndex) invIndex).getImmutableComponents());
+                    ((LSMInvertedIndex) invIndex).getImmutableComponents(), 
null);
             validateAndCheckIndex(testCtx);
             runTinySearchWorkload(testCtx, tupleGen);
         }
diff --git 
a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-invertedindex-test/src/test/java/org/apache/hyracks/storage/am/lsm/invertedindex/PartitionedLSMInvertedIndexMergeTest.java
 
b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-invertedindex-test/src/test/java/org/apache/hyracks/storage/am/lsm/invertedindex/PartitionedLSMInvertedIndexMergeTest.java
index cf66fb8..68ead1c 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-invertedindex-test/src/test/java/org/apache/hyracks/storage/am/lsm/invertedindex/PartitionedLSMInvertedIndexMergeTest.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-invertedindex-test/src/test/java/org/apache/hyracks/storage/am/lsm/invertedindex/PartitionedLSMInvertedIndexMergeTest.java
@@ -60,7 +60,7 @@
             }
             // Perform merge.
             
invIndexAccessor.scheduleMerge(NoOpIOOperationCallbackFactory.INSTANCE.createIoOpCallback(),
-                    ((LSMInvertedIndex) invIndex).getImmutableComponents());
+                    ((LSMInvertedIndex) invIndex).getImmutableComponents(), 
null);
             validateAndCheckIndex(testCtx);
             runTinySearchWorkload(testCtx, tupleGen);
         }
diff --git 
a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-invertedindex-test/src/test/java/org/apache/hyracks/storage/am/lsm/invertedindex/multithread/LSMInvertedIndexTestWorker.java
 
b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-invertedindex-test/src/test/java/org/apache/hyracks/storage/am/lsm/invertedindex/multithread/LSMInvertedIndexTestWorker.java
index d5267b5..cda7401 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-invertedindex-test/src/test/java/org/apache/hyracks/storage/am/lsm/invertedindex/multithread/LSMInvertedIndexTestWorker.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-invertedindex-test/src/test/java/org/apache/hyracks/storage/am/lsm/invertedindex/multithread/LSMInvertedIndexTestWorker.java
@@ -116,7 +116,7 @@
 
             case MERGE: {
                 
accessor.scheduleMerge(NoOpIOOperationCallbackFactory.INSTANCE.createIoOpCallback(),
-                        invIndex.getImmutableComponents());
+                        invIndex.getImmutableComponents(), null);
                 break;
             }
 
diff --git 
a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-rtree-test/src/test/java/org/apache/hyracks/storage/am/lsm/rtree/LSMRTreeMergeTestDriver.java
 
b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-rtree-test/src/test/java/org/apache/hyracks/storage/am/lsm/rtree/LSMRTreeMergeTestDriver.java
index ae4a493..b45b7c3 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-rtree-test/src/test/java/org/apache/hyracks/storage/am/lsm/rtree/LSMRTreeMergeTestDriver.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-rtree-test/src/test/java/org/apache/hyracks/storage/am/lsm/rtree/LSMRTreeMergeTestDriver.java
@@ -78,7 +78,7 @@
 
             ILSMIndexAccessor accessor = (ILSMIndexAccessor) 
ctx.getIndexAccessor();
             
accessor.scheduleMerge(NoOpIOOperationCallbackFactory.INSTANCE.createIoOpCallback(),
-                    ((AbstractLSMRTree) 
ctx.getIndex()).getImmutableComponents());
+                    ((AbstractLSMRTree) 
ctx.getIndex()).getImmutableComponents(), null);
 
             rTreeTestUtils.checkScan(ctx);
             rTreeTestUtils.checkDiskOrderScan(ctx);
diff --git 
a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-rtree-test/src/test/java/org/apache/hyracks/storage/am/lsm/rtree/multithread/LSMRTreeTestWorker.java
 
b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-rtree-test/src/test/java/org/apache/hyracks/storage/am/lsm/rtree/multithread/LSMRTreeTestWorker.java
index 95b4f44..1183828 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-rtree-test/src/test/java/org/apache/hyracks/storage/am/lsm/rtree/multithread/LSMRTreeTestWorker.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-rtree-test/src/test/java/org/apache/hyracks/storage/am/lsm/rtree/multithread/LSMRTreeTestWorker.java
@@ -79,7 +79,7 @@
 
             case MERGE:
                 
accessor.scheduleMerge(NoOpIOOperationCallbackFactory.INSTANCE.createIoOpCallback(),
-                        lsmRTree.getImmutableComponents());
+                        lsmRTree.getImmutableComponents(), null);
                 break;
 
             default:
diff --git 
a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-rtree-test/src/test/java/org/apache/hyracks/storage/am/lsm/rtree/multithread/LSMRTreeWithAntiMatterTuplesTestWorker.java
 
b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-rtree-test/src/test/java/org/apache/hyracks/storage/am/lsm/rtree/multithread/LSMRTreeWithAntiMatterTuplesTestWorker.java
index 3917203..1718f4f 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-rtree-test/src/test/java/org/apache/hyracks/storage/am/lsm/rtree/multithread/LSMRTreeWithAntiMatterTuplesTestWorker.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-rtree-test/src/test/java/org/apache/hyracks/storage/am/lsm/rtree/multithread/LSMRTreeWithAntiMatterTuplesTestWorker.java
@@ -68,7 +68,7 @@
 
             case MERGE:
                 
accessor.scheduleMerge(NoOpIOOperationCallbackFactory.INSTANCE.createIoOpCallback(),
-                        ((AbstractLSMRTree) 
lsmRTree).getImmutableComponents());
+                        ((AbstractLSMRTree) 
lsmRTree).getImmutableComponents(), null);
                 break;
 
             default:

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/2018
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib6c06ee23f3bfd16b758802388389c00e29780b1
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Luo Chen <[email protected]>

Reply via email to