Repository: asterixdb
Updated Branches:
  refs/heads/master 11d5b2812 -> 776e1c25b


[ASTERIXDB-2467][STO] Fix locking protocol with bad tuples

- user model changes: no
- storage format changes: no
- interface changes: no

Details:
- The current locking protocol is not correct when there are bad tuples,
e.g., duplicates. When locking fails, the write must push partial frames
so that the previous acquired locks are released. However, if there are
bad tuples in the frame, after bad tuples are removed from the frame, the
state of pushed partial frames will be completely lost.

Change-Id: I86baa1f21ef7390777c8e2b0ce226095528e7f18
Reviewed-on: https://asterix-gerrit.ics.uci.edu/3003
Reviewed-by: Xikui Wang <xkk...@gmail.com>
Sonar-Qube: Jenkins <jenk...@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <jenk...@fulliautomatix.ics.uci.edu>
Integration-Tests: Jenkins <jenk...@fulliautomatix.ics.uci.edu>
Reviewed-by: Murtadha Hubail <mhub...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo
Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/776e1c25
Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/776e1c25
Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/776e1c25

Branch: refs/heads/master
Commit: 776e1c25b11b85aa752671ff8992dcc509e28913
Parents: 11d5b28
Author: luochen <cl...@uci.edu>
Authored: Tue Oct 23 15:16:22 2018 -0700
Committer: Luo Chen <cl...@uci.edu>
Committed: Wed Oct 24 15:48:48 2018 -0700

----------------------------------------------------------------------
 .../dataflow/LSMInsertDeleteOperatorNodePushable.java    | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/asterixdb/blob/776e1c25/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/dataflow/LSMInsertDeleteOperatorNodePushable.java
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/dataflow/LSMInsertDeleteOperatorNodePushable.java
 
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/dataflow/LSMInsertDeleteOperatorNodePushable.java
index 1401c0a..5e4b5a1 100644
--- 
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/dataflow/LSMInsertDeleteOperatorNodePushable.java
+++ 
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/dataflow/LSMInsertDeleteOperatorNodePushable.java
@@ -80,6 +80,10 @@ public class LSMInsertDeleteOperatorNodePushable extends 
LSMIndexInsertUpdateDel
 
     @Override
     public void open() throws HyracksDataException {
+        i = 0;
+        currentTupleIdx = 0;
+        lastFlushedTupleIdx = 0;
+        flushedPartialTuples = false;
         accessor = new FrameTupleAccessor(inputRecDesc);
         writeBuffer = new VSizeFrame(ctx);
         appender = new FrameTupleAppender(writeBuffer);
@@ -109,10 +113,6 @@ public class LSMInsertDeleteOperatorNodePushable extends 
LSMIndexInsertUpdateDel
 
     @Override
     public void nextFrame(ByteBuffer buffer) throws HyracksDataException {
-        currentTupleIdx = 0;
-        lastFlushedTupleIdx = 0;
-        flushedPartialTuples = false;
-
         accessor.reset(buffer);
         ILSMIndexAccessor lsmAccessor = (ILSMIndexAccessor) indexAccessor;
         int tupleCount = accessor.getTupleCount();
@@ -164,6 +164,9 @@ public class LSMInsertDeleteOperatorNodePushable extends 
LSMIndexInsertUpdateDel
             FrameUtils.flushFrame(writeBuffer.getBuffer(), writer);
         }
         i = 0;
+        currentTupleIdx = 0;
+        lastFlushedTupleIdx = 0;
+        flushedPartialTuples = false;
     }
 
     /**

Reply via email to