abdullah alamoudi has uploaded a new change for review.

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

Change subject: Fix Getting Operational Components for Search Operations
......................................................................

Fix Getting Operational Components for Search Operations

Change-Id: If046ead8a9c1e32c2b8be55d7b035f23b71ed3ea
---
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-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/impls/LSMInvertedIndex.java
M 
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/AbstractLSMRTree.java
3 files changed, 50 insertions(+), 41 deletions(-)


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

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 6d673a9..0b3d048 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
@@ -129,8 +129,8 @@
             ++i;
         }
         componentFactory = new LSMBTreeDiskComponentFactory(diskBTreeFactory, 
bloomFilterFactory, filterFactory);
-        bulkLoadComponentFactory =
-                new LSMBTreeDiskComponentFactory(bulkLoadBTreeFactory, 
bloomFilterFactory, filterFactory);
+        bulkLoadComponentFactory = new 
LSMBTreeDiskComponentFactory(bulkLoadBTreeFactory, bloomFilterFactory,
+                filterFactory);
         this.needKeyDupCheck = needKeyDupCheck;
         this.btreeFields = btreeFields;
         this.hasBloomFilter = needKeyDupCheck;
@@ -184,9 +184,9 @@
         for (LSMComponentFileReferences lsmComonentFileReference : 
validFileReferences) {
             LSMBTreeDiskComponent component;
             try {
-                component =
-                        createDiskComponent(componentFactory, 
lsmComonentFileReference.getInsertIndexFileReference(),
-                                
lsmComonentFileReference.getBloomFilterFileReference(), false);
+                component = createDiskComponent(componentFactory, 
lsmComonentFileReference
+                        .getInsertIndexFileReference(),
+                        
lsmComonentFileReference.getBloomFilterFileReference(), false);
             } catch (IndexException e) {
                 throw new HyracksDataException(e);
             }
@@ -288,12 +288,12 @@
                 break;
             case INSERT:
             case UPSERT:
-                addOperationalMutableComponents(operationalComponents);
+                addOperationalMutableComponents(operationalComponents, 
ctx.getOperation());
                 operationalComponents.addAll(immutableComponents);
                 break;
             case SEARCH:
                 if (memoryComponentsAllocated) {
-                    addOperationalMutableComponents(operationalComponents);
+                    addOperationalMutableComponents(operationalComponents, 
ctx.getOperation());
                 }
                 if (filterManager != null) {
                     for (ILSMComponent c : immutableComponents) {
@@ -483,7 +483,7 @@
         }
 
         if (component.getLSMComponentFilter() != null) {
-            List<ITupleReference> filterTuples = new 
ArrayList<ITupleReference>();
+            List<ITupleReference> filterTuples = new ArrayList<>();
             
filterTuples.add(flushingComponent.getLSMComponentFilter().getMinTuple());
             
filterTuples.add(flushingComponent.getLSMComponentFilter().getMaxTuple());
             filterManager.updateFilterInfo(component.getLSMComponentFilter(), 
filterTuples);
@@ -511,8 +511,8 @@
         BTree lastBTree = ((LSMBTreeDiskComponent) 
mergingComponents.get(mergingComponents.size() - 1)).getBTree();
         FileReference firstFile = firstBTree.getFileReference();
         FileReference lastFile = lastBTree.getFileReference();
-        LSMComponentFileReferences relMergeFileRefs =
-                
fileManager.getRelMergeFileReference(firstFile.getFile().getName(), 
lastFile.getFile().getName());
+        LSMComponentFileReferences relMergeFileRefs = 
fileManager.getRelMergeFileReference(firstFile.getFile()
+                .getName(), lastFile.getFile().getName());
         ILSMIndexAccessorInternal accessor = new LSMBTreeAccessor(lsmHarness, 
opCtx);
         ioScheduler.scheduleOperation(new LSMBTreeMergeOperation(accessor, 
mergingComponents, cursor,
                 relMergeFileRefs.getInsertIndexFileReference(), 
relMergeFileRefs.getBloomFilterFileReference(),
@@ -542,8 +542,8 @@
         LSMBTreeDiskComponent mergedComponent = 
createDiskComponent(componentFactory, mergeOp.getBTreeMergeTarget(),
                 mergeOp.getBloomFilterMergeTarget(), true);
 
-        IIndexBulkLoader bulkLoader =
-                mergedComponent.getBTree().createBulkLoader(1.0f, false, 
numElements, false, true);
+        IIndexBulkLoader bulkLoader = 
mergedComponent.getBTree().createBulkLoader(1.0f, false, numElements, false,
+                true);
         IIndexBulkLoader builder = null;
         if (hasBloomFilter) {
             builder = 
mergedComponent.getBloomFilter().createBuilder(numElements, 
bloomFilterSpec.getNumHashes(),
@@ -565,7 +565,7 @@
             }
         }
         if (mergedComponent.getLSMComponentFilter() != null) {
-            List<ITupleReference> filterTuples = new 
ArrayList<ITupleReference>();
+            List<ITupleReference> filterTuples = new ArrayList<>();
             for (int i = 0; i < mergeOp.getMergingComponents().size(); ++i) {
                 
filterTuples.add(mergeOp.getMergingComponents().get(i).getLSMComponentFilter().getMinTuple());
                 
filterTuples.add(mergeOp.getMergingComponents().get(i).getLSMComponentFilter().getMaxTuple());
@@ -658,8 +658,8 @@
 
             if (hasBloomFilter) {
                 int maxBucketsPerElement = 
BloomCalculations.maxBucketsPerElement(numElementsHint);
-                BloomFilterSpecification bloomFilterSpec =
-                        
BloomCalculations.computeBloomSpec(maxBucketsPerElement, 
bloomFilterFalsePositiveRate);
+                BloomFilterSpecification bloomFilterSpec = 
BloomCalculations.computeBloomSpec(maxBucketsPerElement,
+                        bloomFilterFalsePositiveRate);
                 builder = ((LSMBTreeDiskComponent) 
component).getBloomFilter().createBuilder(numElementsHint,
                         bloomFilterSpec.getNumHashes(), 
bloomFilterSpec.getNumBucketsPerElements());
             } else {
@@ -799,36 +799,36 @@
 
     @Override
     public ITreeIndexFrameFactory getInteriorFrameFactory() {
-        LSMBTreeMemoryComponent mutableComponent =
-                (LSMBTreeMemoryComponent) 
memoryComponents.get(currentMutableComponentId.get());
+        LSMBTreeMemoryComponent mutableComponent = (LSMBTreeMemoryComponent) 
memoryComponents.get(
+                currentMutableComponentId.get());
         return mutableComponent.getBTree().getInteriorFrameFactory();
     }
 
     @Override
     public int getFieldCount() {
-        LSMBTreeMemoryComponent mutableComponent =
-                (LSMBTreeMemoryComponent) 
memoryComponents.get(currentMutableComponentId.get());
+        LSMBTreeMemoryComponent mutableComponent = (LSMBTreeMemoryComponent) 
memoryComponents.get(
+                currentMutableComponentId.get());
         return mutableComponent.getBTree().getFieldCount();
     }
 
     @Override
     public int getFileId() {
-        LSMBTreeMemoryComponent mutableComponent =
-                (LSMBTreeMemoryComponent) 
memoryComponents.get(currentMutableComponentId.get());
+        LSMBTreeMemoryComponent mutableComponent = (LSMBTreeMemoryComponent) 
memoryComponents.get(
+                currentMutableComponentId.get());
         return mutableComponent.getBTree().getFileId();
     }
 
     @Override
     public IMetaDataPageManager getMetaManager() {
-        LSMBTreeMemoryComponent mutableComponent =
-                (LSMBTreeMemoryComponent) 
memoryComponents.get(currentMutableComponentId.get());
+        LSMBTreeMemoryComponent mutableComponent = (LSMBTreeMemoryComponent) 
memoryComponents.get(
+                currentMutableComponentId.get());
         return mutableComponent.getBTree().getMetaManager();
     }
 
     @Override
     public ITreeIndexFrameFactory getLeafFrameFactory() {
-        LSMBTreeMemoryComponent mutableComponent =
-                (LSMBTreeMemoryComponent) 
memoryComponents.get(currentMutableComponentId.get());
+        LSMBTreeMemoryComponent mutableComponent = (LSMBTreeMemoryComponent) 
memoryComponents.get(
+                currentMutableComponentId.get());
         return mutableComponent.getBTree().getLeafFrameFactory();
     }
 
@@ -845,8 +845,8 @@
 
     @Override
     public int getRootPageId() {
-        LSMBTreeMemoryComponent mutableComponent =
-                (LSMBTreeMemoryComponent) 
memoryComponents.get(currentMutableComponentId.get());
+        LSMBTreeMemoryComponent mutableComponent = (LSMBTreeMemoryComponent) 
memoryComponents.get(
+                currentMutableComponentId.get());
         return mutableComponent.getBTree().getRootPageId();
     }
 
@@ -882,7 +882,7 @@
 
     @Override
     public Set<String> getLSMComponentPhysicalFiles(ILSMComponent 
lsmComponent) {
-        Set<String> files = new HashSet<String>();
+        Set<String> files = new HashSet<>();
         LSMBTreeDiskComponent component = (LSMBTreeDiskComponent) lsmComponent;
         
files.add(component.getBTree().getFileReference().getFile().getAbsolutePath());
         if (hasBloomFilter) {
@@ -918,7 +918,7 @@
         memoryComponentsAllocated = true;
     }
 
-    private void addOperationalMutableComponents(List<ILSMComponent> 
operationalComponents) {
+    private void addOperationalMutableComponents(List<ILSMComponent> 
operationalComponents, IndexOperation op) {
         int cmc = currentMutableComponentId.get();
         int numMutableComponents = memoryComponents.size();
         for (int i = 0; i < numMutableComponents - 1; i++) {
@@ -929,8 +929,11 @@
                 operationalComponents.add(0, mutableComponent);
             }
         }
-        // The current mutable component is always added
-        operationalComponents.add(0, memoryComponents.get(cmc));
+        // The current mutable component is always added unless it is a search 
and it is not 
+        LSMBTreeMemoryComponent currentMemoryComponent = 
(LSMBTreeMemoryComponent) memoryComponents.get(cmc);
+        if (op != IndexOperation.SEARCH || 
currentMemoryComponent.isReadable()) {
+            operationalComponents.add(0, currentMemoryComponent);
+        }
     }
 
     private synchronized void clearMemoryComponents() throws 
HyracksDataException {
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 bf6e9b5..4919872 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
@@ -375,8 +375,8 @@
         List<ILSMComponent> operationalComponents = ictx.getComponentHolder();
         int numComponents = operationalComponents.size();
         boolean includeMutableComponent = false;
-        ArrayList<IIndexAccessor> indexAccessors = new 
ArrayList<IIndexAccessor>(numComponents);
-        ArrayList<IIndexAccessor> deletedKeysBTreeAccessors = new 
ArrayList<IIndexAccessor>(numComponents);
+        ArrayList<IIndexAccessor> indexAccessors = new 
ArrayList<>(numComponents);
+        ArrayList<IIndexAccessor> deletedKeysBTreeAccessors = new 
ArrayList<>(numComponents);
 
         for (int i = 0; i < operationalComponents.size(); i++) {
             ILSMComponent component = operationalComponents.get(i);
@@ -433,7 +433,8 @@
     }
 
     /**
-     * Returns a permuting tuple reference that projects away the document 
field(s) of a tuple, only leaving the key fields.
+     * Returns a permuting tuple reference that projects away the document 
field(s) of a tuple, only leaving the key
+     * fields.
      */
     private PermutingTupleReference createKeysOnlyTupleReference() {
         // Project away token fields.
@@ -491,7 +492,7 @@
             scanCursor.close();
         }
         if (component.getLSMComponentFilter() != null) {
-            List<ITupleReference> filterTuples = new 
ArrayList<ITupleReference>();
+            List<ITupleReference> filterTuples = new ArrayList<>();
             
filterTuples.add(flushingComponent.getLSMComponentFilter().getMinTuple());
             
filterTuples.add(flushingComponent.getLSMComponentFilter().getMaxTuple());
             filterManager.updateFilterInfo(component.getLSMComponentFilter(), 
filterTuples);
@@ -643,7 +644,7 @@
             cursor.close();
         }
         if (component.getLSMComponentFilter() != null) {
-            List<ITupleReference> filterTuples = new 
ArrayList<ITupleReference>();
+            List<ITupleReference> filterTuples = new ArrayList<>();
             for (int i = 0; i < mergeOp.getMergingComponents().size(); ++i) {
                 ITupleReference min = 
mergeOp.getMergingComponents().get(i).getLSMComponentFilter().getMinTuple();
                 ITupleReference max = 
mergeOp.getMergingComponents().get(i).getLSMComponentFilter().getMaxTuple();
@@ -929,7 +930,7 @@
 
     @Override
     public Set<String> getLSMComponentPhysicalFiles(ILSMComponent 
lsmComponent) {
-        Set<String> files = new HashSet<String>();
+        Set<String> files = new HashSet<>();
         LSMInvertedIndexDiskComponent invIndexComponent = 
(LSMInvertedIndexDiskComponent) lsmComponent;
         OnDiskInvertedIndex invIndex = (OnDiskInvertedIndex) 
invIndexComponent.getInvIndex();
         files.add(invIndex.getInvListsFile().getFile().getAbsolutePath());
@@ -969,8 +970,11 @@
                 operationalComponents.add(0, mutableComponent);
             }
         }
-        // The current mutable component is always added
-        operationalComponents.add(0, memoryComponents.get(cmc));
+        LSMInvertedIndexMemoryComponent currentMutableComponent = 
(LSMInvertedIndexMemoryComponent) memoryComponents
+                .get(cmc);
+        if (currentMutableComponent.isReadable()) {
+            operationalComponents.add(0, memoryComponents.get(cmc));
+        }
     }
 
     private synchronized void clearMemoryComponents() throws 
HyracksDataException {
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/AbstractLSMRTree.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/AbstractLSMRTree.java
index b2a5b2b..89ad46a 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/AbstractLSMRTree.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/AbstractLSMRTree.java
@@ -441,8 +441,10 @@
                 operationalComponents.add(0, mutableComponent);
             }
         }
-        // The current mutable component is always added
-        operationalComponents.add(0, memoryComponents.get(cmc));
+        LSMRTreeMemoryComponent memComponent = (LSMRTreeMemoryComponent) 
memoryComponents.get(cmc);
+        if (memComponent.isReadable()) {
+            operationalComponents.add(0, memComponent);
+        }
     }
 
     private synchronized void clearMemoryComponents() throws 
HyracksDataException {

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: If046ead8a9c1e32c2b8be55d7b035f23b71ed3ea
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: abdullah alamoudi <[email protected]>

Reply via email to