Repository: asterixdb
Updated Branches:
  refs/heads/master d71214ae5 -> 50de6669f


[ASTERIXDB-2176] Fix deletion on LSMRTree

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

Details:
- The deletion on LSMRTree is not working on master, because initially
we insert anti-matter tuples into the memory BTree, and during flush
these tuples are copied to the RTree again. However, we forgot to
set these tuples from the in-memory BTree as anti-matter tuples. This
patch fixes this.
- Also modifies the test case to cover this case.

Change-Id: I3d9417e56f06044f585e019089004efd2b2af3b7
Reviewed-on: https://asterix-gerrit.ics.uci.edu/2188
Sonar-Qube: Jenkins <[email protected]>
Reviewed-by: Taewoo Kim <[email protected]>
Tested-by: Jenkins <[email protected]>
Integration-Tests: Jenkins <[email protected]>


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

Branch: refs/heads/master
Commit: 50de6669f24d376398d6977a363ac4223897c579
Parents: d71214a
Author: luochen01 <[email protected]>
Authored: Thu Nov 30 08:39:59 2017 -0800
Committer: Luo Chen <[email protected]>
Committed: Thu Nov 30 14:08:21 2017 -0800

----------------------------------------------------------------------
 .../storage/am/lsm/rtree/utils/LSMRTreeUtils.java |  2 +-
 .../storage/am/rtree/AbstractRTreeDeleteTest.java | 11 +++++++++++
 .../LSMRTreeWithAntiMatterTuplesDeleteTest.java   | 18 ++++++++++++++++++
 3 files changed, 30 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/asterixdb/blob/50de6669/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/utils/LSMRTreeUtils.java
----------------------------------------------------------------------
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/utils/LSMRTreeUtils.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/utils/LSMRTreeUtils.java
index 451b122..4b851e4 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/utils/LSMRTreeUtils.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/utils/LSMRTreeUtils.java
@@ -174,7 +174,7 @@ public class LSMRTreeUtils {
             rtreeLeafFrameBulkLoadWriterFactory = new 
LSMRTreeTupleWriterFactory(typeTraits, false);
         }
 
-        LSMRTreeTupleWriterFactory btreeTupleWriterFactory = new 
LSMRTreeTupleWriterFactory(typeTraits, false);
+        LSMRTreeTupleWriterFactory btreeTupleWriterFactory = new 
LSMRTreeTupleWriterFactory(typeTraits, true);
 
         RTreeFrameFactory rtreeInteriorFrameFactory = new 
RTreeNSMInteriorFrameFactory(
                 rtreeInteriorFrameTupleWriterFactory, valueProviderFactories, 
rtreePolicyType, isPointMBR);

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/50de6669/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/storage/am/rtree/AbstractRTreeDeleteTest.java
----------------------------------------------------------------------
diff --git 
a/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/storage/am/rtree/AbstractRTreeDeleteTest.java
 
b/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/storage/am/rtree/AbstractRTreeDeleteTest.java
index b53f0dc..ce486fd 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/storage/am/rtree/AbstractRTreeDeleteTest.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/storage/am/rtree/AbstractRTreeDeleteTest.java
@@ -20,6 +20,7 @@
 package org.apache.hyracks.storage.am.rtree;
 
 import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.dataflow.common.data.accessors.ITupleReference;
 import 
org.apache.hyracks.dataflow.common.data.marshalling.DoubleSerializerDeserializer;
 import 
org.apache.hyracks.dataflow.common.data.marshalling.IntegerSerializerDeserializer;
@@ -62,12 +63,22 @@ public abstract class AbstractRTreeDeleteTest extends 
AbstractRTreeTestDriver {
                 rTreeTestUtils.checkScan(ctx);
                 rTreeTestUtils.checkDiskOrderScan(ctx);
                 rTreeTestUtils.checkRangeSearch(ctx, key);
+                afterDeleteRound(ctx);
             }
+            afterInsertRound(ctx);
         }
         ctx.getIndex().deactivate();
         ctx.getIndex().destroy();
     }
 
+    protected void afterInsertRound(AbstractRTreeTestContext ctx) throws 
HyracksDataException {
+
+    }
+
+    protected void afterDeleteRound(AbstractRTreeTestContext ctx) throws 
HyracksDataException {
+
+    }
+
     @Override
     protected String getTestOpName() {
         return "Delete";

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/50de6669/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-rtree-test/src/test/java/org/apache/hyracks/storage/am/lsm/rtree/LSMRTreeWithAntiMatterTuplesDeleteTest.java
----------------------------------------------------------------------
diff --git 
a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-rtree-test/src/test/java/org/apache/hyracks/storage/am/lsm/rtree/LSMRTreeWithAntiMatterTuplesDeleteTest.java
 
b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-rtree-test/src/test/java/org/apache/hyracks/storage/am/lsm/rtree/LSMRTreeWithAntiMatterTuplesDeleteTest.java
index a4d67a9..581dbf7 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-rtree-test/src/test/java/org/apache/hyracks/storage/am/lsm/rtree/LSMRTreeWithAntiMatterTuplesDeleteTest.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-rtree-test/src/test/java/org/apache/hyracks/storage/am/lsm/rtree/LSMRTreeWithAntiMatterTuplesDeleteTest.java
@@ -25,6 +25,8 @@ import 
org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.storage.am.common.api.IPrimitiveValueProviderFactory;
 import org.apache.hyracks.storage.am.config.AccessMethodTestsConfig;
+import org.apache.hyracks.storage.am.lsm.common.api.ILSMIndex;
+import org.apache.hyracks.storage.am.lsm.common.api.ILSMIndexAccessor;
 import org.apache.hyracks.storage.am.lsm.rtree.util.LSMRTreeTestHarness;
 import 
org.apache.hyracks.storage.am.lsm.rtree.util.LSMRTreeWithAntiMatterTuplesTestContext;
 import org.apache.hyracks.storage.am.rtree.AbstractRTreeDeleteTest;
@@ -63,6 +65,22 @@ public class LSMRTreeWithAntiMatterTuplesDeleteTest extends 
AbstractRTreeDeleteT
     }
 
     @Override
+    protected void afterDeleteRound(AbstractRTreeTestContext ctx) throws 
HyracksDataException {
+        flush(ctx);
+    }
+
+    @Override
+    protected void afterInsertRound(AbstractRTreeTestContext ctx) throws 
HyracksDataException {
+        flush(ctx);
+    }
+
+    protected void flush(AbstractRTreeTestContext ctx) throws 
HyracksDataException {
+        ILSMIndex lsmIndex = (ILSMIndex) ctx.getIndex();
+        ILSMIndexAccessor accessor = (ILSMIndexAccessor) 
ctx.getIndexAccessor();
+        accessor.scheduleFlush(lsmIndex.getIOOperationCallback());
+    }
+
+    @Override
     protected Random getRandom() {
         return harness.getRandom();
     }

Reply via email to