Luo Chen has uploaded a new change for review. https://asterix-gerrit.ics.uci.edu/2070
Change subject: [ASTERIXDB-2128] Fix bloomfilter bug for primary index search ...................................................................... [ASTERIXDB-2128] Fix bloomfilter bug for primary index search - user model changes: no - storage format changes: no - interface changes: no Details: - This is a small/quick fix for bloomfilter bug during primary index search. Another patch set https://asterix-gerrit.ics.uci.edu/#/c/2069/ fixes bloom filter bug for secondary index searches as well Change-Id: Ia065f73ae0c783dca70cd6cc9c6f0af8422bfcf2 --- M hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreePointSearchCursor.java 1 file changed, 10 insertions(+), 5 deletions(-) git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb refs/changes/70/2070/1 diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreePointSearchCursor.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreePointSearchCursor.java index 6126c53..fa2055a 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreePointSearchCursor.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreePointSearchCursor.java @@ -23,6 +23,7 @@ import org.apache.hyracks.api.exceptions.HyracksDataException; import org.apache.hyracks.dataflow.common.data.accessors.ITupleReference; +import org.apache.hyracks.storage.am.bloomfilter.impls.BloomFilter; import org.apache.hyracks.storage.am.btree.api.IBTreeLeafFrame; import org.apache.hyracks.storage.am.btree.impls.BTree; import org.apache.hyracks.storage.am.btree.impls.BTree.BTreeAccessor; @@ -36,7 +37,6 @@ import org.apache.hyracks.storage.am.lsm.common.api.ILSMHarness; import org.apache.hyracks.storage.am.lsm.common.api.ILSMIndexOperationContext; import org.apache.hyracks.storage.am.lsm.common.api.ILSMTreeTupleReference; -import org.apache.hyracks.storage.am.lsm.common.impls.BloomFilterAwareBTreePointSearchCursor; import org.apache.hyracks.storage.common.ICursorInitialState; import org.apache.hyracks.storage.common.ISearchOperationCallback; import org.apache.hyracks.storage.common.ISearchPredicate; @@ -51,12 +51,14 @@ private boolean includeMutableComponent; private int numBTrees; private BTreeAccessor[] btreeAccessors; + private BloomFilter[] bloomFilters; private ILSMHarness lsmHarness; private boolean nextHasBeenCalled; private boolean foundTuple; private int foundIn = -1; private ITupleReference frameTuple; private List<ILSMComponent> operationalComponents; + private final long[] hashes = new long[2]; public LSMBTreePointSearchCursor(ILSMIndexOperationContext opCtx) { this.opCtx = opCtx; @@ -71,6 +73,9 @@ } boolean reconciled = false; for (int i = 0; i < numBTrees; ++i) { + if (bloomFilters[i] != null && !bloomFilters[i].contains(predicate.getLowKey(), hashes)) { + continue; + } btreeAccessors[i].search(rangeCursors[i], predicate); if (rangeCursors[i].hasNext()) { rangeCursors[i].next(); @@ -161,6 +166,7 @@ // object creation: should be relatively low rangeCursors = new BTreeRangeSearchCursor[numBTrees]; btreeAccessors = new BTreeAccessor[numBTrees]; + bloomFilters = new BloomFilter[numBTrees]; } includeMutableComponent = false; @@ -179,19 +185,18 @@ rangeCursors[i].reset(); } btree = ((LSMBTreeMemoryComponent) component).getBTree(); + bloomFilters[i] = null; } else { if (rangeCursors[i] != null && rangeCursors[i].isBloomFilterAware()) { // can re-use cursor - ((BloomFilterAwareBTreePointSearchCursor) rangeCursors[i]) - .resetBloomFilter(((LSMBTreeDiskComponent) component).getBloomFilter()); rangeCursors[i].reset(); } else { // create new cursor <should be relatively rare> IBTreeLeafFrame leafFrame = (IBTreeLeafFrame) lsmInitialState.getLeafFrameFactory().createFrame(); - rangeCursors[i] = new BloomFilterAwareBTreePointSearchCursor(leafFrame, false, - ((LSMBTreeDiskComponent) component).getBloomFilter()); + rangeCursors[i] = new BTreeRangeSearchCursor(leafFrame, false); } btree = ((LSMBTreeDiskComponent) component).getBTree(); + bloomFilters[i] = ((LSMBTreeDiskComponent) component).getBloomFilter(); } if (btreeAccessors[i] == null) { btreeAccessors[i] = (BTreeAccessor) btree.createAccessor(NoOpOperationCallback.INSTANCE, -- To view, visit https://asterix-gerrit.ics.uci.edu/2070 To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ia065f73ae0c783dca70cd6cc9c6f0af8422bfcf2 Gerrit-PatchSet: 1 Gerrit-Project: asterixdb Gerrit-Branch: master Gerrit-Owner: Luo Chen <[email protected]>
