Repository: asterixdb Updated Branches: refs/heads/master f52bc5882 -> e66346a34
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/e66346a3/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/BTreeUpdateSearchTest.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/BTreeUpdateSearchTest.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/BTreeUpdateSearchTest.java index 78c92eb..77bd64a 100644 --- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/BTreeUpdateSearchTest.java +++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/BTreeUpdateSearchTest.java @@ -39,6 +39,7 @@ import org.apache.hyracks.storage.am.btree.frames.BTreeNSMLeafFrameFactory; import org.apache.hyracks.storage.am.btree.impls.BTree; import org.apache.hyracks.storage.am.btree.impls.BTreeRangeSearchCursor; import org.apache.hyracks.storage.am.btree.impls.RangePredicate; +import org.apache.hyracks.storage.am.btree.tuples.BTreeTypeAwareTupleWriterFactory; import org.apache.hyracks.storage.am.btree.util.AbstractBTreeTest; import org.apache.hyracks.storage.am.common.TestOperationCallback; import org.apache.hyracks.storage.am.common.api.IMetadataPageManager; @@ -48,7 +49,6 @@ import org.apache.hyracks.storage.am.common.api.ITreeIndexFrameFactory; import org.apache.hyracks.storage.am.common.api.ITreeIndexMetadataFrameFactory; import org.apache.hyracks.storage.am.common.frames.LIFOMetaDataFrameFactory; import org.apache.hyracks.storage.am.common.freepage.LinkedMetaDataPageManager; -import org.apache.hyracks.storage.am.common.tuples.TypeAwareTupleWriterFactory; import org.apache.hyracks.storage.common.buffercache.IBufferCache; import org.junit.Test; @@ -74,7 +74,7 @@ public class BTreeUpdateSearchTest extends AbstractBTreeTest { ISerializerDeserializer[] recDescSers = { IntegerSerializerDeserializer.INSTANCE, IntegerSerializerDeserializer.INSTANCE }; - TypeAwareTupleWriterFactory tupleWriterFactory = new TypeAwareTupleWriterFactory(typeTraits); + BTreeTypeAwareTupleWriterFactory tupleWriterFactory = new BTreeTypeAwareTupleWriterFactory(typeTraits, false); ITreeIndexFrameFactory leafFrameFactory = new BTreeNSMLeafFrameFactory(tupleWriterFactory); ITreeIndexFrameFactory interiorFrameFactory = new BTreeNSMInteriorFrameFactory(tupleWriterFactory); ITreeIndexMetadataFrameFactory metaFrameFactory = new LIFOMetaDataFrameFactory(); http://git-wip-us.apache.org/repos/asf/asterixdb/blob/e66346a3/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/FieldPrefixNSMTest.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/FieldPrefixNSMTest.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/FieldPrefixNSMTest.java index 33177b0..bd5d5b8 100644 --- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/FieldPrefixNSMTest.java +++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/FieldPrefixNSMTest.java @@ -41,9 +41,8 @@ import org.apache.hyracks.dataflow.common.data.accessors.FrameTupleReference; import org.apache.hyracks.dataflow.common.data.accessors.ITupleReference; import org.apache.hyracks.dataflow.common.data.marshalling.IntegerSerializerDeserializer; import org.apache.hyracks.storage.am.btree.frames.BTreeFieldPrefixNSMLeafFrame; +import org.apache.hyracks.storage.am.btree.tuples.BTreeTypeAwareTupleWriter; import org.apache.hyracks.storage.am.btree.util.AbstractBTreeTest; -import org.apache.hyracks.storage.am.common.api.ITreeIndexTupleWriter; -import org.apache.hyracks.storage.am.common.tuples.TypeAwareTupleWriter; import org.apache.hyracks.storage.am.common.util.TreeIndexUtils; import org.apache.hyracks.storage.common.MultiComparator; import org.apache.hyracks.storage.common.buffercache.IBufferCache; @@ -133,7 +132,7 @@ public class FieldPrefixNSMTest extends AbstractBTreeTest { ICachedPage page = bufferCache.pin(BufferedFileHandle.getDiskPageId(btreeFileId, 0), true); try { - ITreeIndexTupleWriter tupleWriter = new TypeAwareTupleWriter(typeTraits); + BTreeTypeAwareTupleWriter tupleWriter = new BTreeTypeAwareTupleWriter(typeTraits, false); BTreeFieldPrefixNSMLeafFrame frame = new BTreeFieldPrefixNSMLeafFrame(tupleWriter); frame.setPage(page); frame.initBuffer((byte) 0); http://git-wip-us.apache.org/repos/asf/asterixdb/blob/e66346a3/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/multithread/BTreeMultiThreadTest.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/multithread/BTreeMultiThreadTest.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/multithread/BTreeMultiThreadTest.java index fc58452..dcdbdc6 100644 --- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/multithread/BTreeMultiThreadTest.java +++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/multithread/BTreeMultiThreadTest.java @@ -54,7 +54,7 @@ public class BTreeMultiThreadTest extends OrderedIndexMultiThreadTest { int[] bloomFilterKeyFields) throws HyracksDataException { return BTreeUtils.createBTree(harness.getBufferCache(), typeTraits, cmpFactories, BTreeLeafFrameType.REGULAR_NSM, harness.getFileReference(), - harness.getPageManagerFactory().createPageManager(harness.getBufferCache())); + harness.getPageManagerFactory().createPageManager(harness.getBufferCache()), false); } @Override http://git-wip-us.apache.org/repos/asf/asterixdb/blob/e66346a3/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/util/BTreeTestContext.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/util/BTreeTestContext.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/util/BTreeTestContext.java index c6c43c8..9d66b64 100644 --- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/util/BTreeTestContext.java +++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/util/BTreeTestContext.java @@ -56,7 +56,7 @@ public class BTreeTestContext extends OrderedIndexTestContext { IPageManager pageManager) throws Exception { ITypeTraits[] typeTraits = SerdeUtils.serdesToTypeTraits(fieldSerdes); IBinaryComparatorFactory[] cmpFactories = SerdeUtils.serdesToComparatorFactories(fieldSerdes, numKeyFields); - BTree btree = BTreeUtils.createBTree(bufferCache, typeTraits, cmpFactories, leafType, file, pageManager); + BTree btree = BTreeUtils.createBTree(bufferCache, typeTraits, cmpFactories, leafType, file, pageManager, false); BTreeTestContext testCtx = new BTreeTestContext(fieldSerdes, btree); return testCtx; } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/e66346a3/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeBulkLoadTest.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeBulkLoadTest.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeBulkLoadTest.java index 52279b8..57b3ee5 100644 --- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeBulkLoadTest.java +++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeBulkLoadTest.java @@ -57,7 +57,7 @@ public class LSMBTreeBulkLoadTest extends OrderedIndexBulkLoadTest { harness.getFileReference(), harness.getDiskBufferCache(), fieldSerdes, numKeys, harness.getBoomFilterFalsePositiveRate(), harness.getMergePolicy(), harness.getOperationTracker(), harness.getIOScheduler(), harness.getIOOperationCallback(), harness.getMetadataPageManagerFactory(), - false); + false, true, false); } @Override http://git-wip-us.apache.org/repos/asf/asterixdb/blob/e66346a3/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeDeleteTest.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeDeleteTest.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeDeleteTest.java index 2be956d..466f67a 100644 --- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeDeleteTest.java +++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeDeleteTest.java @@ -57,7 +57,7 @@ public class LSMBTreeDeleteTest extends OrderedIndexDeleteTest { harness.getFileReference(), harness.getDiskBufferCache(), fieldSerdes, numKeys, harness.getBoomFilterFalsePositiveRate(), harness.getMergePolicy(), harness.getOperationTracker(), harness.getIOScheduler(), harness.getIOOperationCallback(), harness.getMetadataPageManagerFactory(), - false); + false, true, false); } @Override http://git-wip-us.apache.org/repos/asf/asterixdb/blob/e66346a3/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeExamplesTest.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeExamplesTest.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeExamplesTest.java index 4b82349..39b16c6 100644 --- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeExamplesTest.java +++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeExamplesTest.java @@ -53,7 +53,7 @@ public class LSMBTreeExamplesTest extends OrderedIndexExamplesTest { bloomFilterKeyFields, harness.getBoomFilterFalsePositiveRate(), harness.getMergePolicy(), harness.getOperationTracker(), harness.getIOScheduler(), harness.getIOOperationCallback(), true, filterTypeTraits, filterCmpFactories, btreeFields, filterFields, true, - harness.getMetadataPageManagerFactory()); + harness.getMetadataPageManagerFactory(), false); } @Before http://git-wip-us.apache.org/repos/asf/asterixdb/blob/e66346a3/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeFileManagerTest.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeFileManagerTest.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeFileManagerTest.java index 282623c..fd76a10 100644 --- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeFileManagerTest.java +++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeFileManagerTest.java @@ -57,7 +57,7 @@ public class LSMBTreeFileManagerTest { harness.getFileReference(), harness.getDiskBufferCache(), fieldSerdes, 1, harness.getBoomFilterFalsePositiveRate(), harness.getMergePolicy(), harness.getOperationTracker(), harness.getIOScheduler(), harness.getIOOperationCallback(), harness.getMetadataPageManagerFactory(), - false); + false, true, false); ctx.getIndex().create(); ctx.getIndex().activate(); http://git-wip-us.apache.org/repos/asf/asterixdb/blob/e66346a3/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeFilterMergeTest.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeFilterMergeTest.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeFilterMergeTest.java index 29259c0..318091d 100644 --- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeFilterMergeTest.java +++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeFilterMergeTest.java @@ -56,7 +56,7 @@ public class LSMBTreeFilterMergeTest extends LSMBTreeFilterMergeTestDriver { harness.getFileReference(), harness.getDiskBufferCache(), fieldSerdes, numKeys, harness.getBoomFilterFalsePositiveRate(), harness.getMergePolicy(), harness.getOperationTracker(), harness.getIOScheduler(), harness.getIOOperationCallback(), harness.getMetadataPageManagerFactory(), - filtered); + filtered, true, false); } @Override http://git-wip-us.apache.org/repos/asf/asterixdb/blob/e66346a3/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeInsertTest.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeInsertTest.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeInsertTest.java index 28eedd0..aa69f4b 100644 --- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeInsertTest.java +++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeInsertTest.java @@ -57,7 +57,7 @@ public class LSMBTreeInsertTest extends OrderedIndexInsertTest { harness.getFileReference(), harness.getDiskBufferCache(), fieldSerdes, numKeys, harness.getBoomFilterFalsePositiveRate(), harness.getMergePolicy(), harness.getOperationTracker(), harness.getIOScheduler(), harness.getIOOperationCallback(), harness.getMetadataPageManagerFactory(), - false); + false, true, false); } @Override http://git-wip-us.apache.org/repos/asf/asterixdb/blob/e66346a3/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeLifecycleTest.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeLifecycleTest.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeLifecycleTest.java index 98c5fb0..9064734 100644 --- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeLifecycleTest.java +++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeLifecycleTest.java @@ -61,7 +61,7 @@ public class LSMBTreeLifecycleTest extends AbstractIndexLifecycleTest { harness.getFileReference(), harness.getDiskBufferCache(), fieldSerdes, fieldSerdes.length, harness.getBoomFilterFalsePositiveRate(), harness.getMergePolicy(), harness.getOperationTracker(), harness.getIOScheduler(), harness.getIOOperationCallback(), harness.getMetadataPageManagerFactory(), - false); + false, true, false); index = testCtx.getIndex(); } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/e66346a3/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeMergeTest.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeMergeTest.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeMergeTest.java index f24db13..c04bd4b 100644 --- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeMergeTest.java +++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeMergeTest.java @@ -56,7 +56,7 @@ public class LSMBTreeMergeTest extends LSMBTreeMergeTestDriver { harness.getFileReference(), harness.getDiskBufferCache(), fieldSerdes, numKeys, harness.getBoomFilterFalsePositiveRate(), harness.getMergePolicy(), harness.getOperationTracker(), harness.getIOScheduler(), harness.getIOOperationCallback(), harness.getMetadataPageManagerFactory(), - filtered); + filtered, true, false); } @Override http://git-wip-us.apache.org/repos/asf/asterixdb/blob/e66346a3/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeModificationOperationCallbackTest.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeModificationOperationCallbackTest.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeModificationOperationCallbackTest.java index 3f6e74a..98672e7 100644 --- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeModificationOperationCallbackTest.java +++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeModificationOperationCallbackTest.java @@ -52,7 +52,7 @@ public class LSMBTreeModificationOperationCallbackTest extends AbstractModificat harness.getBoomFilterFalsePositiveRate(), harness.getMergePolicy(), NoOpOperationTrackerFactory.INSTANCE.getOperationTracker(null), harness.getIOScheduler(), harness.getIOOperationCallback(), true, null, null, null, null, true, - harness.getMetadataPageManagerFactory()); + harness.getMetadataPageManagerFactory(), false); } @Override http://git-wip-us.apache.org/repos/asf/asterixdb/blob/e66346a3/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeMultiBulkLoadTest.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeMultiBulkLoadTest.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeMultiBulkLoadTest.java index 0ce9051..1f5a6ca 100644 --- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeMultiBulkLoadTest.java +++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeMultiBulkLoadTest.java @@ -58,7 +58,7 @@ public class LSMBTreeMultiBulkLoadTest extends OrderedIndexBulkLoadTest { harness.getFileReference(), harness.getDiskBufferCache(), fieldSerdes, numKeys, harness.getBoomFilterFalsePositiveRate(), harness.getMergePolicy(), harness.getOperationTracker(), harness.getIOScheduler(), harness.getIOOperationCallback(), harness.getMetadataPageManagerFactory(), - false); + false, true, false); } @Override http://git-wip-us.apache.org/repos/asf/asterixdb/blob/e66346a3/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeScanDiskComponentsTest.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeScanDiskComponentsTest.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeScanDiskComponentsTest.java index cb20b81..a8eff99 100644 --- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeScanDiskComponentsTest.java +++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeScanDiskComponentsTest.java @@ -81,7 +81,7 @@ public class LSMBTreeScanDiskComponentsTest extends OrderedIndexTestDriver { harness.getFileReference(), harness.getDiskBufferCache(), fieldSerdes, numKeys, harness.getBoomFilterFalsePositiveRate(), harness.getMergePolicy(), harness.getOperationTracker(), harness.getIOScheduler(), harness.getIOOperationCallback(), harness.getMetadataPageManagerFactory(), - false); + false, true, false); } @Override http://git-wip-us.apache.org/repos/asf/asterixdb/blob/e66346a3/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeSearchOperationCallbackTest.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeSearchOperationCallbackTest.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeSearchOperationCallbackTest.java index f841d99..8aa4428 100644 --- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeSearchOperationCallbackTest.java +++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeSearchOperationCallbackTest.java @@ -58,7 +58,7 @@ public class LSMBTreeSearchOperationCallbackTest extends AbstractSearchOperation harness.getBoomFilterFalsePositiveRate(), harness.getMergePolicy(), NoOpOperationTrackerFactory.INSTANCE.getOperationTracker(null), harness.getIOScheduler(), harness.getIOOperationCallback(), true, null, null, null, null, true, - harness.getMetadataPageManagerFactory()); + harness.getMetadataPageManagerFactory(), false); } @Override http://git-wip-us.apache.org/repos/asf/asterixdb/blob/e66346a3/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeUpdateInPlaceScanDiskComponentsTest.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeUpdateInPlaceScanDiskComponentsTest.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeUpdateInPlaceScanDiskComponentsTest.java new file mode 100644 index 0000000..71d6310 --- /dev/null +++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeUpdateInPlaceScanDiskComponentsTest.java @@ -0,0 +1,408 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.hyracks.storage.am.lsm.btree; + +import static org.junit.Assert.fail; + +import java.io.ByteArrayInputStream; +import java.io.DataInput; +import java.io.DataInputStream; +import java.util.Random; +import java.util.SortedSet; +import java.util.TreeSet; +import java.util.logging.Level; + +import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer; +import org.apache.hyracks.api.exceptions.ErrorCode; +import org.apache.hyracks.api.exceptions.HyracksDataException; +import org.apache.hyracks.dataflow.common.comm.io.ArrayTupleBuilder; +import org.apache.hyracks.dataflow.common.comm.io.ArrayTupleReference; +import org.apache.hyracks.dataflow.common.data.accessors.ITupleReference; +import org.apache.hyracks.dataflow.common.data.marshalling.IntegerSerializerDeserializer; +import org.apache.hyracks.dataflow.common.utils.TupleUtils; +import org.apache.hyracks.storage.am.btree.OrderedIndexTestContext; +import org.apache.hyracks.storage.am.btree.OrderedIndexTestDriver; +import org.apache.hyracks.storage.am.btree.OrderedIndexTestUtils; +import org.apache.hyracks.storage.am.btree.frames.BTreeLeafFrameType; +import org.apache.hyracks.storage.am.btree.impls.BTree; +import org.apache.hyracks.storage.am.common.CheckTuple; +import org.apache.hyracks.storage.am.common.IIndexTestContext; +import org.apache.hyracks.storage.am.common.TestOperationCallback; +import org.apache.hyracks.storage.am.common.api.ITreeIndexCursor; +import org.apache.hyracks.storage.am.config.AccessMethodTestsConfig; +import org.apache.hyracks.storage.am.lsm.btree.impls.LSMBTree; +import org.apache.hyracks.storage.am.lsm.btree.impls.LSMBTreeDiskComponent; +import org.apache.hyracks.storage.am.lsm.btree.tuples.LSMBTreeTupleReference; +import org.apache.hyracks.storage.am.lsm.btree.util.LSMBTreeTestContext; +import org.apache.hyracks.storage.am.lsm.btree.util.LSMBTreeTestHarness; +import org.apache.hyracks.storage.am.lsm.common.api.ILSMIndexAccessor; +import org.apache.hyracks.storage.am.lsm.common.impls.NoOpIOOperationCallbackFactory; +import org.apache.hyracks.storage.common.IIndexCursor; +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; + +@SuppressWarnings("rawtypes") +public class LSMBTreeUpdateInPlaceScanDiskComponentsTest extends OrderedIndexTestDriver { + + private final LSMBTreeTestHarness harness = new LSMBTreeTestHarness(); + + protected final TreeSet<UpdatedCheckTuple> checkTuples = new TreeSet<>(); + private boolean hasOnlyKeys; + + class UpdatedCheckTuple<T extends Comparable<T>> extends CheckTuple<T> { + + private boolean isUpdated = false; + private boolean antimatter = false; + + public UpdatedCheckTuple(int numFields, int numKeys) { + super(numFields, numKeys); + } + + public void setUpdated(boolean updated) { + isUpdated = updated; + } + + public void setAntimatter(boolean antimatter) { + this.antimatter = antimatter; + } + + public boolean isUpdated() { + return isUpdated; + } + + public boolean isAntimatter() { + return antimatter; + } + } + + public LSMBTreeUpdateInPlaceScanDiskComponentsTest() { + super(LSMBTreeTestHarness.LEAF_FRAMES_TO_TEST); + } + + @Before + public void setUp() throws HyracksDataException { + harness.setUp(); + } + + @After + public void tearDown() throws HyracksDataException { + harness.tearDown(); + } + + @Override + protected Random getRandom() { + return harness.getRandom(); + } + + @Override + protected String getTestOpName() { + return "Update in-place disk Components Scan"; + } + + @Override + protected OrderedIndexTestContext createTestContext(ISerializerDeserializer[] fieldSerdes, int numKeys, + BTreeLeafFrameType leafType, boolean filtered) throws HyracksDataException { + return LSMBTreeTestContext.create(harness.getIOManager(), harness.getVirtualBufferCaches(), + harness.getFileReference(), harness.getDiskBufferCache(), fieldSerdes, numKeys, + harness.getBoomFilterFalsePositiveRate(), harness.getMergePolicy(), harness.getOperationTracker(), + harness.getIOScheduler(), harness.getIOOperationCallback(), harness.getMetadataPageManagerFactory(), + false, !hasOnlyKeys, hasOnlyKeys); + } + + interface IndexModification { + void modify(IIndexTestContext ctx, ITupleReference tuple, UpdatedCheckTuple checkTuple) + throws HyracksDataException; + } + + IndexModification insertModification = + (IIndexTestContext ctx, ITupleReference tuple, UpdatedCheckTuple checkTuple) -> { + try { + ctx.getIndexAccessor().insert(tuple); + checkTuples.add(checkTuple); + } catch (HyracksDataException e) { + // We set expected values only after insertion succeeds because + // we ignore duplicate keys. + if (e.getErrorCode() != ErrorCode.DUPLICATE_KEY) { + throw e; + } + } + }; + + IndexModification upsertModification = + (IIndexTestContext ctx, ITupleReference tuple, UpdatedCheckTuple checkTuple) -> { + try { + ctx.getIndexAccessor().upsert(tuple); + SortedSet<UpdatedCheckTuple> existingSet = checkTuples.subSet(checkTuple, true, checkTuple, true); + if (existingSet.isEmpty()) { + checkTuples.add(checkTuple); + } else { + UpdatedCheckTuple existingTuple = existingSet.first(); + checkTuples.remove(existingTuple); + checkTuple.setUpdated(!existingTuple.isUpdated()); + checkTuples.add(checkTuple); + } + } catch (HyracksDataException e) { + // We set expected values only after insertion succeeds because + // we ignore duplicate keys. + if (e.getErrorCode() != ErrorCode.DUPLICATE_KEY) { + throw e; + } + } + }; + + IndexModification deleteModification = + (IIndexTestContext ctx, ITupleReference tuple, UpdatedCheckTuple checkTuple) -> { + ctx.getIndexAccessor().delete(tuple); + // Remove check tuple from expected results. + if (!checkTuples.contains(checkTuple)) + fail("Trying to delete tuple " + checkTuple + " that does not exist"); + checkTuple.setUpdated(!checkTuple.isUpdated()); + checkTuple.setAntimatter(true); + }; + + abstract class TupleOperation { + protected final IndexModification op; + + public TupleOperation(IndexModification op) { + this.op = op; + } + + public abstract void performOperation(IIndexTestContext ctx, int numTuples) throws HyracksDataException; + } + + class GenerateTupleOperation extends TupleOperation { + public GenerateTupleOperation(IndexModification op) { + super(op); + } + + @Override + public void performOperation(IIndexTestContext ctx, int numTuples) throws HyracksDataException { + int fieldCount = ctx.getFieldCount(); + int numKeyFields = ctx.getKeyFieldCount(); + // Scale range of values according to number of keys. + // For example, for 2 keys we want the square root of numTuples, for 3 + // keys the cube root of numTuples, etc. + int maxValue = (int) Math.ceil(Math.pow(numTuples, 1.0 / numKeyFields)); + for (int i = 0; i < numTuples; i++) { + if (LOGGER.isLoggable(Level.INFO)) { + if ((i + 1) % (numTuples / Math.min(10, numTuples)) == 0) { + LOGGER.info("Generating Tuple " + (i + 1) + "/" + numTuples); + } + } + UpdatedCheckTuple newCheckTuple; + if (ctx.getFieldSerdes()[0] instanceof IntegerSerializerDeserializer) { + newCheckTuple = + createIntTuple(fieldCount, numKeyFields, maxValue, ctx.getTupleBuilder(), ctx.getTuple()); + } else { + newCheckTuple = createStringTuple(ctx.getFieldSerdes(), fieldCount, numKeyFields, + ctx.getTupleBuilder(), ctx.getTuple()); + } + op.modify(ctx, ctx.getTuple(), newCheckTuple); + } + } + } + + private UpdatedCheckTuple createStringTuple(ISerializerDeserializer[] fieldSerdes, int fieldCount, int numKeyFields, + ArrayTupleBuilder tupleBuilder, ArrayTupleReference tuple) throws HyracksDataException { + String[] fieldValues = new String[fieldCount]; + // Set keys. + for (int j = 0; j < numKeyFields; j++) { + int length = (Math.abs(getRandom().nextInt()) % 10) + 1; + fieldValues[j] = OrderedIndexTestUtils.getRandomString(length, getRandom()); + } + // Set values. + for (int j = numKeyFields; j < fieldCount; j++) { + fieldValues[j] = OrderedIndexTestUtils.getRandomString(5, getRandom()); + } + TupleUtils.createTuple(tupleBuilder, tuple, fieldSerdes, false, (Object[]) fieldValues); + UpdatedCheckTuple<String> checkTuple = new UpdatedCheckTuple<>(fieldValues.length, numKeyFields); + for (String s : fieldValues) { + checkTuple.appendField(s); + } + return checkTuple; + } + + private UpdatedCheckTuple createIntTuple(int fieldCount, int numKeyFields, int maxValue, + ArrayTupleBuilder tupleBuilder, ArrayTupleReference tuple) throws HyracksDataException { + int[] fieldValues = new int[fieldCount]; + // Set keys. + for (int j = 0; j < numKeyFields; j++) { + fieldValues[j] = getRandom().nextInt() % maxValue; + } + // Set values. + for (int j = numKeyFields; j < fieldCount; j++) { + fieldValues[j] = j; + } + TupleUtils.createIntegerTuple(tupleBuilder, tuple, fieldValues); + UpdatedCheckTuple<Integer> checkTuple = new UpdatedCheckTuple<>(fieldValues.length, numKeyFields); + for (int v : fieldValues) { + checkTuple.appendField(v); + } + return checkTuple; + } + + class DeleteTupleOperation extends TupleOperation { + public DeleteTupleOperation(IndexModification op) { + super(op); + } + + @Override + public void performOperation(IIndexTestContext ctx, int numTuples) throws HyracksDataException { + ArrayTupleBuilder deleteTupleBuilder = new ArrayTupleBuilder(ctx.getKeyFieldCount()); + ArrayTupleReference deleteTuple = new ArrayTupleReference(); + int numCheckTuples = checkTuples.size(); + // Copy CheckTuple references into array, so we can randomly pick from there. + UpdatedCheckTuple[] checkTuplesArray = new UpdatedCheckTuple[numCheckTuples]; + int idx = 0; + for (UpdatedCheckTuple t : checkTuples) + checkTuplesArray[idx++] = t; + + for (int i = 0; i < numTuples && numCheckTuples > 0; i++) { + if (LOGGER.isLoggable(Level.INFO)) { + if ((i + 1) % (numTuples / Math.min(10, numTuples)) == 0) { + LOGGER.info("Deleting Tuple " + (i + 1) + "/" + numTuples); + } + } + int checkTupleIdx = Math.abs(getRandom().nextInt() % numCheckTuples); + UpdatedCheckTuple checkTuple = checkTuplesArray[checkTupleIdx]; + OrderedIndexTestUtils.createTupleFromCheckTuple(checkTuple, deleteTupleBuilder, deleteTuple, + ctx.getFieldSerdes()); + + op.modify(ctx, deleteTuple, checkTuple); + + // Swap with last "valid" CheckTuple. + UpdatedCheckTuple tmp = checkTuplesArray[numCheckTuples - 1]; + checkTuplesArray[numCheckTuples - 1] = checkTuple; + checkTuplesArray[checkTupleIdx] = tmp; + numCheckTuples--; + } + } + } + + private void insertDeleteTest(OrderedIndexTestContext ctx) throws HyracksDataException { + test(ctx, new GenerateTupleOperation(insertModification), new DeleteTupleOperation(deleteModification)); + } + + private void upsertDeleteTest(OrderedIndexTestContext ctx) throws HyracksDataException { + test(ctx, new GenerateTupleOperation(upsertModification), new DeleteTupleOperation(deleteModification)); + } + + private void insertUpsertTest(OrderedIndexTestContext ctx) throws HyracksDataException { + test(ctx, new GenerateTupleOperation(insertModification), new GenerateTupleOperation(upsertModification)); + } + + private void upsertUpsertTest(OrderedIndexTestContext ctx) throws HyracksDataException { + test(ctx, new GenerateTupleOperation(upsertModification), new GenerateTupleOperation(upsertModification)); + } + + @Override + protected void runTest(ISerializerDeserializer[] fieldSerdes, int numKeys, BTreeLeafFrameType leafType, + ITupleReference lowKey, ITupleReference highKey, ITupleReference prefixLowKey, + ITupleReference prefixHighKey) throws Exception { + //tests with tuples consisting only of keys create secondary index, others - a primary index + hasOnlyKeys = fieldSerdes.length == numKeys; + + OrderedIndexTestContext ctx = createTestContext(fieldSerdes, numKeys, leafType, false); + ctx.getIndex().create(); + ctx.getIndex().activate(); + + insertDeleteTest(ctx); + ctx.getIndex().clear(); + checkTuples.clear(); + + upsertDeleteTest(ctx); + ctx.getIndex().clear(); + checkTuples.clear(); + + insertUpsertTest(ctx); + ctx.getIndex().clear(); + checkTuples.clear(); + + upsertUpsertTest(ctx); + ctx.getIndex().clear(); + checkTuples.clear(); + + ctx.getIndex().validate(); + ctx.getIndex().deactivate(); + ctx.getIndex().destroy(); + } + + protected void test(OrderedIndexTestContext ctx, TupleOperation op1, TupleOperation op2) + throws HyracksDataException { + + ILSMIndexAccessor accessor = (ILSMIndexAccessor) ctx.getIndexAccessor(); + op1.performOperation(ctx, AccessMethodTestsConfig.BTREE_NUM_TUPLES_TO_INSERT); + op2.performOperation(ctx, + AccessMethodTestsConfig.BTREE_NUM_TUPLES_TO_INSERT / AccessMethodTestsConfig.BTREE_NUM_INSERT_ROUNDS); + accessor.scheduleFlush(NoOpIOOperationCallbackFactory.INSTANCE.createIoOpCallback()); + + LSMBTree btree = (LSMBTree) ctx.getIndex(); + Assert.assertEquals("Check disk components", 1, btree.getImmutableComponents().size()); + + LSMBTreeDiskComponent btreeComponent = (LSMBTreeDiskComponent) btree.getImmutableComponents().get(0); + BTree.BTreeAccessor btreeAccessor = (BTree.BTreeAccessor) btreeComponent.getBTree() + .createAccessor(TestOperationCallback.INSTANCE, TestOperationCallback.INSTANCE); + + ITreeIndexCursor cursor = btreeAccessor.createDiskOrderScanCursor(); + try { + btreeAccessor.diskOrderScan(cursor); + for (UpdatedCheckTuple t : checkTuples) { + if (!t.isUpdated() || !hasOnlyKeys) { + checkReturnedTuple((LSMBTreeTupleReference) getNext(cursor), ctx.getFieldSerdes(), t, + ctx.getKeyFieldCount()); + } + } + Assert.assertFalse(cursor.hasNext()); + } finally { + cursor.close(); + } + } + + protected void checkReturnedTuple(LSMBTreeTupleReference tuple, ISerializerDeserializer[] fieldSerdes, + UpdatedCheckTuple checkTuple, int numKeys) throws HyracksDataException { + Assert.assertEquals("Check tuple anti-matter flag", checkTuple.isAntimatter(), tuple.isAntimatter()); + //check keys + for (int i = 0; i < numKeys; i++) { + ByteArrayInputStream inStream = + new ByteArrayInputStream(tuple.getFieldData(i), tuple.getFieldStart(i), tuple.getFieldLength(i)); + DataInput dataIn = new DataInputStream(inStream); + Object actualObj = fieldSerdes[i].deserialize(dataIn); + Assert.assertEquals("Actual and expected keys do not match on key " + i, checkTuple.getField(i), actualObj); + } + //check the rest of fields only if the tuple is not anti-matter + if (!tuple.isAntimatter()) { + for (int i = numKeys; i < fieldSerdes.length; i++) { + ByteArrayInputStream inStream = new ByteArrayInputStream(tuple.getFieldData(i), tuple.getFieldStart(i), + tuple.getFieldLength(i)); + DataInput dataIn = new DataInputStream(inStream); + Object actualObj = fieldSerdes[i].deserialize(dataIn); + Assert.assertEquals("Actual and expected fields do not match on field " + i, checkTuple.getField(i), + actualObj); + } + } + } + + protected ITupleReference getNext(IIndexCursor cursor) throws HyracksDataException { + Assert.assertTrue(cursor.hasNext()); + cursor.next(); + return cursor.getTuple(); + } +} http://git-wip-us.apache.org/repos/asf/asterixdb/blob/e66346a3/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeUpdateInPlaceTest.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeUpdateInPlaceTest.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeUpdateInPlaceTest.java new file mode 100644 index 0000000..4cfb102 --- /dev/null +++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeUpdateInPlaceTest.java @@ -0,0 +1,179 @@ +/* + + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + + */ + +package org.apache.hyracks.storage.am.lsm.btree; + +import org.apache.hyracks.api.exceptions.HyracksDataException; +import org.apache.hyracks.dataflow.common.comm.io.ArrayTupleBuilder; +import org.apache.hyracks.dataflow.common.comm.io.ArrayTupleReference; +import org.apache.hyracks.dataflow.common.data.accessors.ITupleReference; +import org.apache.hyracks.dataflow.common.utils.SerdeUtils; +import org.apache.hyracks.dataflow.common.utils.TupleUtils; +import org.apache.hyracks.storage.am.btree.AbstractOperationCallbackTest; +import org.apache.hyracks.storage.am.common.api.IBTreeIndexTupleReference; +import org.apache.hyracks.storage.am.common.impls.NoOpOperationCallback; +import org.apache.hyracks.storage.am.config.AccessMethodTestsConfig; +import org.apache.hyracks.storage.am.lsm.btree.util.LSMBTreeTestHarness; +import org.apache.hyracks.storage.am.lsm.btree.utils.LSMBTreeUtil; +import org.apache.hyracks.storage.am.lsm.common.api.ILSMIndexAccessor; +import org.apache.hyracks.storage.am.lsm.common.impls.BlockingIOOperationCallbackWrapper; +import org.apache.hyracks.storage.am.lsm.common.impls.NoOpIOOperationCallbackFactory; +import org.apache.hyracks.storage.am.lsm.common.impls.NoOpOperationTrackerFactory; +import org.apache.hyracks.storage.common.IIndexAccessor; +import org.apache.hyracks.storage.common.IModificationOperationCallback; +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +public class LSMBTreeUpdateInPlaceTest extends AbstractOperationCallbackTest { + private final LSMBTreeTestHarness harness; + private final BlockingIOOperationCallbackWrapper ioOpCallback; + private final ArrayTupleBuilder builder; + private final ArrayTupleReference tuple; + private final IModificationOperationCallback cb; + + private IIndexAccessor accessor; + private boolean isUpdated; + private boolean isFoundNull; + + public LSMBTreeUpdateInPlaceTest() { + this.builder = new ArrayTupleBuilder(NUM_KEY_FIELDS); + this.tuple = new ArrayTupleReference(); + this.cb = new VerifyingUpdateModificationCallback(tuple); + this.ioOpCallback = + new BlockingIOOperationCallbackWrapper(NoOpIOOperationCallbackFactory.INSTANCE.createIoOpCallback()); + this.harness = new LSMBTreeTestHarness(); + this.isUpdated = false; + this.isFoundNull = true; + } + + @Override + protected void createIndexInstance() throws Exception { + index = LSMBTreeUtil.createLSMTree(harness.getIOManager(), harness.getVirtualBufferCaches(), + harness.getFileReference(), harness.getDiskBufferCache(), SerdeUtils.serdesToTypeTraits(keySerdes), + SerdeUtils.serdesToComparatorFactories(keySerdes, keySerdes.length), bloomFilterKeyFields, + harness.getBoomFilterFalsePositiveRate(), harness.getMergePolicy(), + NoOpOperationTrackerFactory.INSTANCE.getOperationTracker(null), harness.getIOScheduler(), + harness.getIOOperationCallback(), true, null, null, null, null, true, + harness.getMetadataPageManagerFactory(), true); + } + + @Override + @Before + public void setup() throws Exception { + harness.setUp(); + super.setup(); + accessor = index.createAccessor(cb, NoOpOperationCallback.INSTANCE); + } + + @Override + @After + public void tearDown() throws Exception { + super.tearDown(); + harness.tearDown(); + } + + interface IndexModification { + void modify(IIndexAccessor accessor) throws HyracksDataException; + } + + private void test(IndexModification op1, IndexModification op2) throws Exception { + ILSMIndexAccessor lsmAccessor = (ILSMIndexAccessor) accessor; + for (int j = 0; j < 2; j++) { + index.clear(); + isFoundNull = true; + isUpdated = false; + for (int i = 0; i < AccessMethodTestsConfig.BTREE_NUM_TUPLES_TO_INSERT; i++) { + TupleUtils.createIntegerTuple(builder, tuple, i); + op1.modify(lsmAccessor); + } + + if (j == 1) { + lsmAccessor.scheduleFlush(ioOpCallback); + ioOpCallback.waitForIO(); + isFoundNull = true; + isUpdated = false; + } else { + isFoundNull = false; + isUpdated = true; + } + + for (int i = 0; i < AccessMethodTestsConfig.BTREE_NUM_TUPLES_TO_INSERT; i++) { + TupleUtils.createIntegerTuple(builder, tuple, i); + op2.modify(lsmAccessor); + } + + if (j == 1) { + lsmAccessor.scheduleFlush(ioOpCallback); + ioOpCallback.waitForIO(); + } else { + isFoundNull = false; + } + } + } + + @Test + public void insertDeleteTest() throws Exception { + test((IIndexAccessor a) -> a.insert(tuple), (IIndexAccessor a) -> a.delete(tuple)); + } + + @Test + public void upsertDeleteTest() throws Exception { + test((IIndexAccessor a) -> a.upsert(tuple), (IIndexAccessor a) -> a.delete(tuple)); + } + + @Test + public void insertUpsertTest() throws Exception { + test((IIndexAccessor a) -> a.insert(tuple), (IIndexAccessor a) -> a.upsert(tuple)); + } + + @Test + public void upsertUpsertTest() throws Exception { + test((IIndexAccessor a) -> a.upsert(tuple), (IIndexAccessor a) -> a.upsert(tuple)); + } + + private class VerifyingUpdateModificationCallback implements IModificationOperationCallback { + + private final ITupleReference tuple; + + public VerifyingUpdateModificationCallback(ITupleReference tuple) { + this.tuple = tuple; + } + + @Override + public void before(ITupleReference tuple) throws HyracksDataException { + Assert.assertEquals(0, cmp.compare(this.tuple, tuple)); + } + + @Override + public void found(ITupleReference before, ITupleReference after) throws HyracksDataException { + if (isFoundNull) { + Assert.assertEquals(null, before); + } else { + Assert.assertEquals(0, cmp.compare(this.tuple, before)); + Assert.assertEquals(isUpdated, ((IBTreeIndexTupleReference) before).isUpdated()); + } + Assert.assertEquals(0, cmp.compare(this.tuple, after)); + } + } + +} http://git-wip-us.apache.org/repos/asf/asterixdb/blob/e66346a3/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeUpdateTest.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeUpdateTest.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeUpdateTest.java index 7a4af94..e48f488 100644 --- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeUpdateTest.java +++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeUpdateTest.java @@ -57,7 +57,7 @@ public class LSMBTreeUpdateTest extends OrderedIndexUpdateTest { harness.getFileReference(), harness.getDiskBufferCache(), fieldSerdes, numKeys, harness.getBoomFilterFalsePositiveRate(), harness.getMergePolicy(), harness.getOperationTracker(), harness.getIOScheduler(), harness.getIOOperationCallback(), harness.getMetadataPageManagerFactory(), - false); + false, true, false); } @Override http://git-wip-us.apache.org/repos/asf/asterixdb/blob/e66346a3/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/multithread/LSMBTreeMultiThreadTest.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/multithread/LSMBTreeMultiThreadTest.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/multithread/LSMBTreeMultiThreadTest.java index 531a4fd..db626c8 100644 --- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/multithread/LSMBTreeMultiThreadTest.java +++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/multithread/LSMBTreeMultiThreadTest.java @@ -56,7 +56,7 @@ public class LSMBTreeMultiThreadTest extends OrderedIndexMultiThreadTest { harness.getFileReference(), harness.getDiskBufferCache(), typeTraits, cmpFactories, bloomFilterKeyFields, harness.getBoomFilterFalsePositiveRate(), harness.getMergePolicy(), harness.getOperationTracker(), harness.getIOScheduler(), harness.getIOOperationCallback(), true, null, - null, null, null, true, harness.getMetadataPageManagerFactory()); + null, null, null, true, harness.getMetadataPageManagerFactory(), false); } @Override http://git-wip-us.apache.org/repos/asf/asterixdb/blob/e66346a3/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/perf/BTreeRunner.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/perf/BTreeRunner.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/perf/BTreeRunner.java index df6558c..60a054e 100644 --- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/perf/BTreeRunner.java +++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/perf/BTreeRunner.java @@ -49,6 +49,6 @@ public class BTreeRunner extends InMemoryBTreeRunner { ITreeIndexMetadataFrameFactory metaFrameFactory = new LIFOMetaDataFrameFactory(); LinkedMetaDataPageManager freePageManager = new LinkedMetaDataPageManager(bufferCache, metaFrameFactory); btree = BTreeUtils.createBTree(bufferCache, typeTraits, cmpFactories, BTreeLeafFrameType.REGULAR_NSM, file, - freePageManager); + freePageManager, false); } } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/e66346a3/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/perf/ConcurrentSkipListRunner.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/perf/ConcurrentSkipListRunner.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/perf/ConcurrentSkipListRunner.java index 9628b05..c476a8c 100644 --- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/perf/ConcurrentSkipListRunner.java +++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/perf/ConcurrentSkipListRunner.java @@ -117,12 +117,12 @@ public class ConcurrentSkipListRunner implements IExperimentRunner { this.numBatches = numBatches; this.skipList = skipList; tupleWriterFactory = new TypeAwareTupleWriterFactory(typeTraits); - tupleWriter = (TypeAwareTupleWriter) tupleWriterFactory.createTupleWriter(); + tupleWriter = tupleWriterFactory.createTupleWriter(); int numTuples = numBatches * batchSize; tuples = new TypeAwareTupleReference[numTuples]; tupleBuf = ByteBuffer.allocate(numTuples * tupleSize); for (int i = 0; i < numTuples; i++) { - tuples[i] = (TypeAwareTupleReference) tupleWriter.createTupleReference(); + tuples[i] = tupleWriter.createTupleReference(); } } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/e66346a3/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/perf/InMemoryBTreeRunner.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/perf/InMemoryBTreeRunner.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/perf/InMemoryBTreeRunner.java index d0b798a..cc754c0 100644 --- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/perf/InMemoryBTreeRunner.java +++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/perf/InMemoryBTreeRunner.java @@ -30,13 +30,13 @@ import org.apache.hyracks.api.io.IIOManager; import org.apache.hyracks.storage.am.btree.frames.BTreeNSMInteriorFrameFactory; import org.apache.hyracks.storage.am.btree.frames.BTreeNSMLeafFrameFactory; import org.apache.hyracks.storage.am.btree.impls.BTree; +import org.apache.hyracks.storage.am.btree.tuples.BTreeTypeAwareTupleWriterFactory; import org.apache.hyracks.storage.am.common.api.IPageManager; import org.apache.hyracks.storage.am.common.api.ITreeIndexAccessor; import org.apache.hyracks.storage.am.common.api.ITreeIndexFrameFactory; import org.apache.hyracks.storage.am.common.datagen.DataGenThread; import org.apache.hyracks.storage.am.common.datagen.TupleBatch; import org.apache.hyracks.storage.am.common.impls.NoOpOperationCallback; -import org.apache.hyracks.storage.am.common.tuples.TypeAwareTupleWriterFactory; import org.apache.hyracks.storage.am.lsm.common.freepage.VirtualFreePageManager; import org.apache.hyracks.storage.am.lsm.common.impls.VirtualBufferCache; import org.apache.hyracks.storage.common.buffercache.HeapBufferAllocator; @@ -68,7 +68,7 @@ public class InMemoryBTreeRunner extends Thread implements IExperimentRunner { protected void init(int pageSize, int numPages, ITypeTraits[] typeTraits, IBinaryComparatorFactory[] cmpFactories) throws HyracksDataException { bufferCache = new VirtualBufferCache(new HeapBufferAllocator(), pageSize, numPages); - TypeAwareTupleWriterFactory tupleWriterFactory = new TypeAwareTupleWriterFactory(typeTraits); + BTreeTypeAwareTupleWriterFactory tupleWriterFactory = new BTreeTypeAwareTupleWriterFactory(typeTraits, false); ITreeIndexFrameFactory leafFrameFactory = new BTreeNSMLeafFrameFactory(tupleWriterFactory); ITreeIndexFrameFactory interiorFrameFactory = new BTreeNSMInteriorFrameFactory(tupleWriterFactory); IPageManager freePageManager = new VirtualFreePageManager(bufferCache); http://git-wip-us.apache.org/repos/asf/asterixdb/blob/e66346a3/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/perf/InMemorySortRunner.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/perf/InMemorySortRunner.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/perf/InMemorySortRunner.java index fc80932..62aeb3e 100644 --- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/perf/InMemorySortRunner.java +++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/perf/InMemorySortRunner.java @@ -132,12 +132,12 @@ public class InMemorySortRunner implements IExperimentRunner { this.numBatches = numBatches; this.skipList = skipList; tupleWriterFactory = new TypeAwareTupleWriterFactory(typeTraits); - tupleWriter = (TypeAwareTupleWriter) tupleWriterFactory.createTupleWriter(); + tupleWriter = tupleWriterFactory.createTupleWriter(); int numTuples = numBatches * batchSize; tuples = new TypeAwareTupleReference[numTuples]; tupleBuf = ByteBuffer.allocate(numTuples * tupleSize); for (int i = 0; i < numTuples; i++) { - tuples[i] = (TypeAwareTupleReference) tupleWriter.createTupleReference(); + tuples[i] = tupleWriter.createTupleReference(); } } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/e66346a3/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/perf/LSMTreeRunner.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/perf/LSMTreeRunner.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/perf/LSMTreeRunner.java index 0c31795..a7ed646 100644 --- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/perf/LSMTreeRunner.java +++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/perf/LSMTreeRunner.java @@ -108,7 +108,8 @@ public class LSMTreeRunner implements IExperimentRunner { lsmtree = LSMBTreeUtil.createLSMTree(ioManager, virtualBufferCaches, file, bufferCache, typeTraits, cmpFactories, bloomFilterKeyFields, bloomFilterFalsePositiveRate, new NoMergePolicy(), new ThreadCountingTracker(), ioScheduler, NoOpIOOperationCallbackFactory.INSTANCE.createIoOpCallback(), - true, null, null, null, null, true, TestStorageManagerComponentHolder.getMetadataPageManagerFactory()); + true, null, null, null, null, true, TestStorageManagerComponentHolder.getMetadataPageManagerFactory(), + false); } @Override http://git-wip-us.apache.org/repos/asf/asterixdb/blob/e66346a3/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/tuples/LSMBTreeTuplesTest.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/tuples/LSMBTreeTuplesTest.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/tuples/LSMBTreeTuplesTest.java index 028a7f9..4c51520 100644 --- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/tuples/LSMBTreeTuplesTest.java +++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/tuples/LSMBTreeTuplesTest.java @@ -68,7 +68,8 @@ public class LSMBTreeTuplesTest { // Create tuples with varying number of fields, and try to interpret their bytes with the lsmBTreeTuple. for (int numFields = numKeyFields; numFields <= maxFieldSerdes.length; numFields++) { // Create and write tuple to bytes using an LSMBTreeTupleWriter. - LSMBTreeTupleWriter maxMatterTupleWriter = new LSMBTreeTupleWriter(maxTypeTraits, numKeyFields, false); + LSMBTreeTupleWriter maxMatterTupleWriter = + new LSMBTreeTupleWriter(maxTypeTraits, numKeyFields, false, false); ITupleReference maxTuple = TupleUtils.createTuple(maxFieldSerdes, (Object[])maxFields); ByteBuffer maxMatterBuf = writeTuple(maxTuple, maxMatterTupleWriter); // Tuple reference should work for both matter and antimatter tuples (doesn't matter which factory creates it). @@ -84,9 +85,10 @@ public class LSMBTreeTuplesTest { } // Create and write tuple to bytes using an LSMBTreeTupleWriter. ITupleReference tuple = TupleUtils.createTuple(fieldSerdes, (Object[])fields); - LSMBTreeTupleWriter matterTupleWriter = new LSMBTreeTupleWriter(typeTraits, numKeyFields, false); - LSMBTreeTupleWriter antimatterTupleWriter = new LSMBTreeTupleWriter(typeTraits, numKeyFields, true); - LSMBTreeCopyTupleWriter copyTupleWriter = new LSMBTreeCopyTupleWriter(typeTraits, numKeyFields); + LSMBTreeTupleWriter matterTupleWriter = new LSMBTreeTupleWriter(typeTraits, numKeyFields, false, false); + LSMBTreeTupleWriter antimatterTupleWriter = + new LSMBTreeTupleWriter(typeTraits, numKeyFields, true, false); + LSMBTreeCopyTupleWriter copyTupleWriter = new LSMBTreeCopyTupleWriter(typeTraits, numKeyFields, false); ByteBuffer matterBuf = writeTuple(tuple, matterTupleWriter); ByteBuffer antimatterBuf = writeTuple(tuple, antimatterTupleWriter); http://git-wip-us.apache.org/repos/asf/asterixdb/blob/e66346a3/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/util/LSMBTreeTestContext.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/util/LSMBTreeTestContext.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/util/LSMBTreeTestContext.java index 8667d85..ec78f6a 100644 --- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/util/LSMBTreeTestContext.java +++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/util/LSMBTreeTestContext.java @@ -74,7 +74,8 @@ public final class LSMBTreeTestContext extends OrderedIndexTestContext { FileReference file, IBufferCache diskBufferCache, ISerializerDeserializer[] fieldSerdes, int numKeyFields, double bloomFilterFalsePositiveRate, ILSMMergePolicy mergePolicy, ILSMOperationTracker opTracker, ILSMIOOperationScheduler ioScheduler, ILSMIOOperationCallback ioOpCallback, - IMetadataPageManagerFactory metadataPageManagerFactory, boolean filtered) throws Exception { + IMetadataPageManagerFactory metadataPageManagerFactory, boolean filtered, boolean needKeyDupCheck, + boolean updateAware) throws HyracksDataException { ITypeTraits[] typeTraits = SerdeUtils.serdesToTypeTraits(fieldSerdes); IBinaryComparatorFactory[] cmpFactories = SerdeUtils.serdesToComparatorFactories(fieldSerdes, numKeyFields); int[] bloomFilterKeyFields = new int[numKeyFields]; @@ -93,12 +94,15 @@ public final class LSMBTreeTestContext extends OrderedIndexTestContext { IBinaryComparatorFactory[] filterCmp = { cmpFactories[0] }; lsmTree = LSMBTreeUtil.createLSMTree(ioManager, virtualBufferCaches, file, diskBufferCache, typeTraits, cmpFactories, bloomFilterKeyFields, bloomFilterFalsePositiveRate, mergePolicy, opTracker, - ioScheduler, ioOpCallback, true, filterTypeTraits, filterCmp, btreefields, filterfields, true, - metadataPageManagerFactory); + ioScheduler, ioOpCallback, needKeyDupCheck, filterTypeTraits, filterCmp, btreefields, filterfields, + true, + metadataPageManagerFactory, updateAware); } else { lsmTree = LSMBTreeUtil.createLSMTree(ioManager, virtualBufferCaches, file, diskBufferCache, typeTraits, cmpFactories, bloomFilterKeyFields, bloomFilterFalsePositiveRate, mergePolicy, opTracker, - ioScheduler, ioOpCallback, true, null, null, null, null, true, metadataPageManagerFactory); + ioScheduler, ioOpCallback, needKeyDupCheck, null, null, null, null, true, + metadataPageManagerFactory, + updateAware); } LSMBTreeTestContext testCtx = new LSMBTreeTestContext(fieldSerdes, lsmTree, filtered); return testCtx;
