Luo Chen has uploaded a new change for review.
https://asterix-gerrit.ics.uci.edu/2188
Change subject: [ASTERIXDB-2176] Fix deletion on LSMRTree
......................................................................
[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
---
M
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/utils/LSMRTreeUtils.java
M
hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/storage/am/rtree/AbstractRTreeDeleteTest.java
M
hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-rtree-test/src/test/java/org/apache/hyracks/storage/am/lsm/rtree/LSMRTreeWithAntiMatterTuplesDeleteTest.java
3 files changed, 32 insertions(+), 3 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/88/2188/1
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 @@
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);
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..2d3289c 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;
@@ -55,19 +56,29 @@
} else if (fieldSerdes[0] instanceof DoubleSerializerDeserializer)
{
rTreeTestUtils.insertDoubleTuples(ctx, numTuplesToInsert,
getRandom());
}
- int numTuplesPerDeleteRound = (int) Math
- .ceil((float) ctx.getCheckTuples().size() / (float)
numDeleteRounds);
+ int numTuplesPerDeleteRound =
+ (int) Math.ceil((float) ctx.getCheckTuples().size() /
(float) numDeleteRounds);
for (int j = 0; j < numDeleteRounds; j++) {
rTreeTestUtils.deleteTuples(ctx, numTuplesPerDeleteRound,
getRandom());
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";
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.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 @@
}
@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();
}
--
To view, visit https://asterix-gerrit.ics.uci.edu/2188
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I3d9417e56f06044f585e019089004efd2b2af3b7
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Luo Chen <[email protected]>