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(); }
