abdullah alamoudi has uploaded a new change for review.

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

Change subject: Fix: Cursor can release entity lock twice in case of reconsile
......................................................................

Fix: Cursor can release entity lock twice in case of reconsile

Change-Id: Ia7f831147f6df6a712e592e029a28a1e9b8ef5a5
---
M 
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreeRangeSearchCursor.java
1 file changed, 4 insertions(+), 1 deletion(-)


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

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 3b8b160..65323ea 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
@@ -89,6 +89,7 @@
         while (!outputPriorityQueue.isEmpty() || needPushElementIntoQueue == 
true) {
             if (!outputPriorityQueue.isEmpty()) {
                 PriorityQueueElement checkElement = outputPriorityQueue.peek();
+                boolean completed = false;
                 if (canCallProceed) {
                     resultOfSearchCallBackProceed = 
searchCallback.proceed(checkElement.getTuple());
                     if (!resultOfSearchCallBackProceed) {
@@ -128,6 +129,7 @@
                                     // after reconcile() since we can 
guarantee that there is no change.
                                     
searchCallback.reconcile(checkElement.getTuple());
                                     
searchCallback.complete(checkElement.getTuple());
+                                    completed = true;
                                 }
                                 // Re-traverses the index.
                                 reusablePred.setLowKey(copyTuple, true);
@@ -146,6 +148,7 @@
                                     // The searched key is still there.
                                     // TODO: do we need to call or not call 
complete() in this case?
                                     searchCallback.complete(copyTuple);
+                                    completed = true;
                                 }
                             } else {
                                 // The mutable cursor is exhausted and it 
couldn't find the element.
@@ -163,7 +166,7 @@
                 // If there is no previous tuple or the previous tuple can be 
ignored.
                 // This check is needed not to release the same tuple again.
                 if (outputElement == null) {
-                    if (isDeleted(checkElement) && !returnDeletedTuples) {
+                    if (isDeleted(checkElement) && !returnDeletedTuples && 
!completed) {
                         // If the key has been deleted then pop it and set 
needPush to true.
                         // We cannot push immediately because the tuple may be
                         // modified if hasNext() is called

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

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

Reply via email to