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; } /**