You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@asterixdb.apache.org by lu...@apache.org on 2018/05/11 18:16:53 UTC
asterixdb git commit: [NO ISSUE][STO] Eliminate S Lock for Disk
Components
Repository: asterixdb
Updated Branches:
refs/heads/master 1b0bbad5d -> 2a0facf52
[NO ISSUE][STO] Eliminate S Lock for Disk Components
- user model changes: no
- storage format changes: no
- interface changes: no
Details:
- Eliminate S lock for tuples returned from disk components, since LSM
disk components only contain committed data and S lock is not needed to
prevent from reading uncommitted data.
Change-Id: Id6ec999b131cd6609d588966d7ae7788f429ab9d
Reviewed-on: https://asterix-gerrit.ics.uci.edu/2637
Sonar-Qube: Jenkins <je...@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
Contrib: Jenkins <je...@fulliautomatix.ics.uci.edu>
Integration-Tests: Jenkins <je...@fulliautomatix.ics.uci.edu>
Reviewed-by: abdullah alamoudi <ba...@gmail.com>
Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo
Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/2a0facf5
Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/2a0facf5
Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/2a0facf5
Branch: refs/heads/master
Commit: 2a0facf529362f8b0a8eb679f2ec6d2c20ffbfc9
Parents: 1b0bbad
Author: luochen01 <cl...@uci.edu>
Authored: Wed May 9 11:02:07 2018 -0700
Committer: Luo Chen <cl...@uci.edu>
Committed: Fri May 11 11:16:33 2018 -0700
----------------------------------------------------------------------
.../storage/am/lsm/btree/impls/LSMBTreeRangeSearchCursor.java | 6 +++++-
.../lsm/invertedindex/impls/LSMInvertedIndexSearchCursor.java | 7 +++++--
.../storage/am/lsm/rtree/impls/LSMRTreeSearchCursor.java | 3 ++-
.../rtree/impls/LSMRTreeWithAntiMatterTuplesSearchCursor.java | 2 +-
4 files changed, 13 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/2a0facf5/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeRangeSearchCursor.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeRangeSearchCursor.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeRangeSearchCursor.java
index 81f4a83..fb0b9ac 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeRangeSearchCursor.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeRangeSearchCursor.java
@@ -106,8 +106,8 @@ public class LSMBTreeRangeSearchCursor extends LSMIndexSearchCursor {
if (!outputPriorityQueue.isEmpty()) {
PriorityQueueElement queueHead = outputPriorityQueue.peek();
if (canCallProceed) {
- resultOfSearchCallbackProceed = searchCallback.proceed(queueHead.getTuple());
if (includeMutableComponent) {
+ resultOfSearchCallbackProceed = searchCallback.proceed(queueHead.getTuple());
if (!resultOfSearchCallbackProceed) {
// In case proceed() fails and there is an in-memory component,
// we can't simply use this element since there might be a change.
@@ -150,6 +150,10 @@ public class LSMBTreeRangeSearchCursor extends LSMIndexSearchCursor {
includeMutableComponent = false;
}
}
+ } else {
+ // only perform locking for tuples from memory components.
+ // all tuples from disk components have already been committed, and we're safe to proceed
+ resultOfSearchCallbackProceed = true;
}
}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/2a0facf5/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/impls/LSMInvertedIndexSearchCursor.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/impls/LSMInvertedIndexSearchCursor.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/impls/LSMInvertedIndexSearchCursor.java
index 4d444b9..d39c601 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/impls/LSMInvertedIndexSearchCursor.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/impls/LSMInvertedIndexSearchCursor.java
@@ -59,6 +59,7 @@ public class LSMInvertedIndexSearchCursor extends EnforcedIndexCursor implements
private List<IIndexAccessor> deletedKeysBTreeAccessors;
private RangePredicate keySearchPred;
private ILSMIndexOperationContext opCtx;
+ private boolean includeMemoryComponents;
private List<ILSMComponent> operationalComponents;
private ITupleReference currentTuple = null;
@@ -76,7 +77,7 @@ public class LSMInvertedIndexSearchCursor extends EnforcedIndexCursor implements
accessorIndex = 0;
this.searchPred = searchPred;
this.searchCallback = lsmInitState.getSearchOperationCallback();
-
+ includeMemoryComponents = false;
// For searching the deleted-keys BTrees.
deletedKeysBTreeAccessors = lsmInitState.getDeletedKeysBTreeAccessors();
deletedKeysBTreeCursors = new IIndexCursor[deletedKeysBTreeAccessors.size()];
@@ -87,6 +88,7 @@ public class LSMInvertedIndexSearchCursor extends EnforcedIndexCursor implements
if (component.getType() == LSMComponentType.MEMORY) {
// No need for a bloom filter for the in-memory BTree.
deletedKeysBTreeBloomFilters[i] = null;
+ includeMemoryComponents = true;
} else {
deletedKeysBTreeBloomFilters[i] = ((LSMInvertedIndexDiskComponent) component).getBloomFilter();
}
@@ -121,7 +123,8 @@ public class LSMInvertedIndexSearchCursor extends EnforcedIndexCursor implements
while (currentCursor.hasNext()) {
currentCursor.next();
currentTuple = currentCursor.getTuple();
- resultOfSearchCallBackProceed = searchCallback.proceed(currentTuple);
+ resultOfSearchCallBackProceed =
+ includeMemoryComponents && accessorIndex == 0 ? searchCallback.proceed(currentTuple) : true;
if (!resultOfSearchCallBackProceed) {
// We assume that the underlying cursors materialize their results such that
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/2a0facf5/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTreeSearchCursor.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTreeSearchCursor.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTreeSearchCursor.java
index c79735f..b9e174f 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTreeSearchCursor.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTreeSearchCursor.java
@@ -98,7 +98,8 @@ public class LSMRTreeSearchCursor extends LSMRTreeAbstractCursor {
rtreeCursors[currentCursor].next();
ITupleReference currentTuple = rtreeCursors[currentCursor].getTuple();
// Call proceed() to do necessary operations before returning this tuple.
- resultOfsearchCallbackProceed = searchCallback.proceed(currentTuple);
+ resultOfsearchCallbackProceed =
+ currentCursor == 0 && includeMutableComponent ? searchCallback.proceed(currentTuple) : true;
btreeTuple.reset(rtreeCursors[currentCursor].getTuple());
boolean killerTupleFound = false;
for (int i = 0; i < currentCursor && !killerTupleFound; i++) {
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/2a0facf5/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTreeWithAntiMatterTuplesSearchCursor.java
----------------------------------------------------------------------
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTreeWithAntiMatterTuplesSearchCursor.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTreeWithAntiMatterTuplesSearchCursor.java
index 7db65bd..05dc3ef 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTreeWithAntiMatterTuplesSearchCursor.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTreeWithAntiMatterTuplesSearchCursor.java
@@ -177,7 +177,7 @@ public class LSMRTreeWithAntiMatterTuplesSearchCursor extends LSMIndexSearchCurs
// reconcile() and complete() can be added later after considering the semantics.
// Call proceed() to do necessary operations before returning this tuple.
- resultOfsearchCallBackProceed = searchCallback.proceed(diskRTreeTuple);
+ resultOfsearchCallBackProceed = true;
if (searchMemBTrees(diskRTreeTuple, numMemoryComponents)) {
// anti-matter tuple is NOT found
foundNext = true;