Taewoo Kim has uploaded a new change for review.
https://asterix-gerrit.ics.uci.edu/1597
Change subject: Index-Only Plan Patch Set 4: modifies SearchOpCallBack
......................................................................
Index-Only Plan Patch Set 4: modifies SearchOpCallBack
- Modifies the SearchOperationCallBack classes to support the canceling
of the proceed() function. When executing an index-only plan, there
may be a case that we need to cancel the effect of proceed() function.
Current implementation only has cancelReconcile().
Change-Id: I16992b3bdc1bfc739417d11366d6bafc59294a0b
---
M
asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/LockThenSearchOperationCallback.java
M
asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/PrimaryIndexInstantSearchOperationCallback.java
M
asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/PrimaryIndexSearchOperationCallback.java
M
asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/SecondaryIndexSearchOperationCallback.java
M
hyracks-fullstack/hyracks/hyracks-storage-am-btree/src/main/java/org/apache/hyracks/storage/am/btree/impls/BTreeRangeSearchCursor.java
M
hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/api/ISearchOperationCallback.java
M
hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/impls/NoOpOperationCallback.java
M
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreePointSearchCursor.java
M
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeRangeSearchCursor.java
M
hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/storage/am/btree/AbstractSearchOperationCallbackTest.java
M
hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/storage/am/common/TestOperationCallback.java
M
hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeSearchOperationCallbackTest.java
12 files changed, 83 insertions(+), 19 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/97/1597/1
diff --git
a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/LockThenSearchOperationCallback.java
b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/LockThenSearchOperationCallback.java
index 4592fd6..a338fc3 100644
---
a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/LockThenSearchOperationCallback.java
+++
b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/LockThenSearchOperationCallback.java
@@ -69,7 +69,11 @@
}
@Override
- public void cancel(ITupleReference tuple) throws HyracksDataException {
+ public void cancelReconcile(ITupleReference tuple) throws
HyracksDataException {
+ }
+
+ @Override
+ public void cancelProceed(ITupleReference tuple) throws
HyracksDataException {
}
@Override
@@ -129,4 +133,5 @@
public void release() throws ACIDException {
lockManager.unlock(datasetId, pkHash, LockMode.X, txnCtx);
}
+
}
diff --git
a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/PrimaryIndexInstantSearchOperationCallback.java
b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/PrimaryIndexInstantSearchOperationCallback.java
index 890823c..20985da 100644
---
a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/PrimaryIndexInstantSearchOperationCallback.java
+++
b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/PrimaryIndexInstantSearchOperationCallback.java
@@ -31,6 +31,7 @@
/**
* Assumes LSM-BTrees as primary indexes. Implements try/locking and unlocking
on primary keys.
+ * This Callback method acquires/releases a record level instant lock.
*/
public class PrimaryIndexInstantSearchOperationCallback extends
AbstractOperationCallback
implements ISearchOperationCallback {
@@ -60,9 +61,24 @@
}
}
+ /**
+ * Cancels the reconcile() operation. Since reconcile() gets a lock, this
lock
+ * needs to be unlocked.
+ */
@Override
- public void cancel(ITupleReference tuple) throws HyracksDataException {
- //no op
+ public void cancelReconcile(ITupleReference tuple) throws
HyracksDataException {
+ int pkHash = computePrimaryKeyHashValue(tuple, primaryKeyFields);
+ try {
+ lockManager.unlock(datasetId, pkHash, LockMode.S, txnCtx);
+ } catch (ACIDException e) {
+ throw new HyracksDataException(e);
+ }
+ }
+
+ @Override
+ public void cancelProceed(ITupleReference tuple) throws
HyracksDataException {
+ // Do nothing since proceed() is the instantTryLock().
+ // Nothing was kept in the lockManager.
}
@Override
diff --git
a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/PrimaryIndexSearchOperationCallback.java
b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/PrimaryIndexSearchOperationCallback.java
index 4f255e0..3f1c64d 100644
---
a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/PrimaryIndexSearchOperationCallback.java
+++
b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/PrimaryIndexSearchOperationCallback.java
@@ -31,6 +31,7 @@
/**
* Assumes LSM-BTrees as primary indexes. Implements try/locking and unlocking
on primary keys.
+ * This Callback method acquires/releases a record level lock.
*/
public class PrimaryIndexSearchOperationCallback extends
AbstractOperationCallback implements ISearchOperationCallback {
@@ -46,8 +47,9 @@
@Override
public boolean proceed(ITupleReference tuple) throws HyracksDataException {
+ int pkHash = computePrimaryKeyHashValue(tuple, primaryKeyFields);
try {
- return lockManager.tryLock(datasetId, -1, LockMode.S, txnCtx);
+ return lockManager.tryLock(datasetId, pkHash, LockMode.S, txnCtx);
} catch (ACIDException e) {
throw new HyracksDataException(e);
}
@@ -55,20 +57,26 @@
@Override
public void reconcile(ITupleReference tuple) throws HyracksDataException {
+ int pkHash = computePrimaryKeyHashValue(tuple, primaryKeyFields);
try {
- lockManager.lock(datasetId, -1, LockMode.S, txnCtx);
+ lockManager.lock(datasetId, pkHash, LockMode.S, txnCtx);
} catch (ACIDException e) {
throw new HyracksDataException(e);
}
}
@Override
- public void cancel(ITupleReference tuple) throws HyracksDataException {
- //no op
+ public void cancelReconcile(ITupleReference tuple) throws
HyracksDataException {
+ //no op - lock will be released in CommitOp
+ }
+
+ @Override
+ public void cancelProceed(ITupleReference tuple) throws
HyracksDataException {
+ //no op - lock will be released in CommitOp
}
@Override
public void complete(ITupleReference tuple) throws HyracksDataException {
- //no op
+ //no op - lock will be released in CommitOp
}
}
diff --git
a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/SecondaryIndexSearchOperationCallback.java
b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/SecondaryIndexSearchOperationCallback.java
index 6905033..35a4020 100644
---
a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/SecondaryIndexSearchOperationCallback.java
+++
b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/SecondaryIndexSearchOperationCallback.java
@@ -51,7 +51,12 @@
}
@Override
- public void cancel(ITupleReference tuple) throws HyracksDataException {
+ public void cancelReconcile(ITupleReference tuple) throws
HyracksDataException {
+ // Do nothing.
+ }
+
+ @Override
+ public void cancelProceed(ITupleReference tuple) throws
HyracksDataException {
// Do nothing.
}
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-am-btree/src/main/java/org/apache/hyracks/storage/am/btree/impls/BTreeRangeSearchCursor.java
b/hyracks-fullstack/hyracks/hyracks-storage-am-btree/src/main/java/org/apache/hyracks/storage/am/btree/impls/BTreeRangeSearchCursor.java
index b4fdd9e..63c90fc 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-am-btree/src/main/java/org/apache/hyracks/storage/am/btree/impls/BTreeRangeSearchCursor.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-am-btree/src/main/java/org/apache/hyracks/storage/am/btree/impls/BTreeRangeSearchCursor.java
@@ -198,7 +198,7 @@
if (originalKeyCmp.compare(reconciliationTuple, frameTuple) ==
0) {
return true;
} else {
- searchCb.cancel(reconciliationTuple);
+ searchCb.cancelReconcile(reconciliationTuple);
}
}
}
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/api/ISearchOperationCallback.java
b/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/api/ISearchOperationCallback.java
index 9b1cd47..1b0d3c8 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/api/ISearchOperationCallback.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/api/ISearchOperationCallback.java
@@ -66,12 +66,23 @@
* @param tuple
* the tuple that was previously reconciled
*/
- public void cancel(ITupleReference tuple) throws HyracksDataException;
+ public void cancelReconcile(ITupleReference tuple) throws
HyracksDataException;
+
+ /**
+ * This method is called on a tuple that was proceeded on to cancel any
actions
+ * that were taken in proceed(). This method allows an opportunity to
cancel some
+ * action that was taken in {@link #proceed(ITupleReference))}.
+ *
+ * @param tuple
+ * the tuple that was previously proceeded
+ */
+ public void cancelProceed(ITupleReference tuple) throws
HyracksDataException;
/**
* This method is only called on a tuple that was reconciled on, and found
after
* retraversing. This method allows an opportunity to do some subsequent
action that was
* taken in {@link #reconcile(ITupleReference))}.
+ *
* @param tuple
* the tuple that was previously reconciled
*/
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/impls/NoOpOperationCallback.java
b/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/impls/NoOpOperationCallback.java
index 511d166..414aee5 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/impls/NoOpOperationCallback.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/impls/NoOpOperationCallback.java
@@ -51,7 +51,12 @@
}
@Override
- public void cancel(ITupleReference tuple) {
+ public void cancelReconcile(ITupleReference tuple) {
+ // Do nothing.
+ }
+
+ @Override
+ public void cancelProceed(ITupleReference tuple) {
// Do nothing.
}
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 2fb96c3..a493d9d 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
@@ -78,7 +78,7 @@
if (reconciled ||
searchCallback.proceed(predicate.getLowKey())) {
// if proceed is successful, then there's no need for
doing the "unlatch dance"
if (((ILSMTreeTupleReference)
rangeCursors[i].getTuple()).isAntimatter()) {
- searchCallback.cancel(predicate.getLowKey());
+ searchCallback.cancelReconcile(predicate.getLowKey());
rangeCursors[i].close();
return false;
} else {
@@ -99,7 +99,7 @@
if (rangeCursors[i].hasNext()) {
rangeCursors[i].next();
if (((ILSMTreeTupleReference)
rangeCursors[i].getTuple()).isAntimatter()) {
- searchCallback.cancel(predicate.getLowKey());
+
searchCallback.cancelReconcile(predicate.getLowKey());
rangeCursors[i].close();
return false;
} else {
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 d6c12e2..227dfae 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
@@ -119,7 +119,7 @@
if (checkElement.getCursorIndex() == 0) {
if (!isNotExhaustedCursor ||
cmp.compare(copyTuple, mutableElement.getTuple()) != 0) {
searchCallback.complete(copyTuple);
- searchCallback.cancel(copyTuple);
+ searchCallback.cancelReconcile(copyTuple);
continue;
}
searchCallback.complete(copyTuple);
@@ -139,7 +139,7 @@
// We cannot push immediately because the tuple may be
// modified if hasNext() is called
outputElement = outputPriorityQueue.poll();
- searchCallback.cancel(checkElement.getTuple());
+
searchCallback.cancelReconcile(checkElement.getTuple());
needPush = true;
proceed = false;
} else {
diff --git
a/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/storage/am/btree/AbstractSearchOperationCallbackTest.java
b/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/storage/am/btree/AbstractSearchOperationCallbackTest.java
index 2bb357a..b2f10de 100644
---
a/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/storage/am/btree/AbstractSearchOperationCallbackTest.java
+++
b/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/storage/am/btree/AbstractSearchOperationCallbackTest.java
@@ -181,7 +181,7 @@
}
@Override
- public void cancel(ITupleReference tuple) {
+ public void cancelReconcile(ITupleReference tuple) {
try {
TupleUtils.createIntegerTuple(builder,
SearchTask.this.tuple, blockingValue);
Assert.assertEquals(0, cmp.compare(tuple,
SearchTask.this.tuple));
@@ -192,6 +192,11 @@
}
@Override
+ public void cancelProceed(ITupleReference tuple) throws
HyracksDataException {
+
+ }
+
+ @Override
public void complete(ITupleReference tuple) throws
HyracksDataException {
}
diff --git
a/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/storage/am/common/TestOperationCallback.java
b/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/storage/am/common/TestOperationCallback.java
index 664d9d6..0573fbf 100644
---
a/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/storage/am/common/TestOperationCallback.java
+++
b/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/storage/am/common/TestOperationCallback.java
@@ -57,7 +57,12 @@
}
@Override
- public void cancel(ITupleReference tuple) {
+ public void cancelReconcile(ITupleReference tuple) {
+ // Do nothing.
+ }
+
+ @Override
+ public void cancelProceed(ITupleReference tuple) {
// Do nothing.
}
diff --git
a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeSearchOperationCallbackTest.java
b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeSearchOperationCallbackTest.java
index f408bb9..3f3a528 100644
---
a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeSearchOperationCallbackTest.java
+++
b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeSearchOperationCallbackTest.java
@@ -188,7 +188,7 @@
}
@Override
- public void cancel(ITupleReference tuple) throws
HyracksDataException {
+ public void cancelReconcile(ITupleReference tuple) throws
HyracksDataException {
boolean found = false;
for (int i : deleteSet) {
TupleUtils.createIntegerTuple(expectedTupleToBeCanceledBuilder,
expectedTupleToBeCanceled, i);
@@ -201,6 +201,10 @@
}
@Override
+ public void cancelProceed(ITupleReference tuple) throws
HyracksDataException {
+ }
+
+ @Override
public void complete(ITupleReference tuple) throws
HyracksDataException {
Assert.assertEquals(0,
cmp.compare(SearchTask.this.expectedTupleToBeLocked, tuple));
expectedTupleToBeLockedValue++;
--
To view, visit https://asterix-gerrit.ics.uci.edu/1597
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I16992b3bdc1bfc739417d11366d6bafc59294a0b
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Taewoo Kim <[email protected]>