Young-Seok Kim has uploaded a new change for review. https://asterix-gerrit.ics.uci.edu/838
Change subject: Set LSMRTreeWithAntiMatterTuples as the default RTree for interal dataset ...................................................................... Set LSMRTreeWithAntiMatterTuples as the default RTree for interal dataset Change-Id: I19323ef38335409bc914265502ae56655db6d106 --- M asterixdb/asterix-app/src/main/java/org/apache/asterix/file/SecondaryRTreeOperationsHelper.java M asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/AqlMetadataProvider.java M hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/AbstractLSMRTree.java M hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTree.java M hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTreeWithAntiMatterTuples.java M hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/utils/LSMRTreeUtils.java 6 files changed, 112 insertions(+), 75 deletions(-) git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb refs/changes/38/838/1 diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/file/SecondaryRTreeOperationsHelper.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/file/SecondaryRTreeOperationsHelper.java index d3788fc..1f32654 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/file/SecondaryRTreeOperationsHelper.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/file/SecondaryRTreeOperationsHelper.java @@ -73,7 +73,7 @@ import org.apache.hyracks.storage.am.common.impls.NoOpOperationCallbackFactory; import org.apache.hyracks.storage.am.lsm.common.dataflow.LSMTreeIndexCompactOperatorDescriptor; import org.apache.hyracks.storage.am.lsm.rtree.dataflow.ExternalRTreeDataflowHelperFactory; -import org.apache.hyracks.storage.am.lsm.rtree.dataflow.LSMRTreeDataflowHelperFactory; +import org.apache.hyracks.storage.am.lsm.rtree.dataflow.LSMRTreeWithAntiMatterTuplesDataflowHelperFactory; import org.apache.hyracks.storage.am.rtree.frames.RTreePolicyType; import org.apache.hyracks.storage.common.file.ILocalResourceFactoryProvider; import org.apache.hyracks.storage.common.file.LocalResource; @@ -103,22 +103,23 @@ IIndexDataflowHelperFactory indexDataflowHelperFactory; ILocalResourceFactoryProvider localResourceFactoryProvider; if (dataset.getDatasetType() == DatasetType.INTERNAL) { + + IBinaryComparatorFactory[] btreeCompFactories = getComparatorFactoriesForDeletedKeyBTree(); + //prepare a LocalResourceMetadata which will be stored in NC's local resource repository ILocalResourceMetadata localResourceMetadata = new LSMRTreeLocalResourceMetadata(secondaryTypeTraits, - secondaryComparatorFactories, primaryComparatorFactories, valueProviderFactories, - RTreePolicyType.RTREE, + secondaryComparatorFactories, btreeCompFactories, valueProviderFactories, RTreePolicyType.RTREE, AqlMetadataProvider.proposeLinearizer(keyType, secondaryComparatorFactories.length), dataset.getDatasetId(), mergePolicyFactory, mergePolicyFactoryProperties, filterTypeTraits, filterCmpFactories, rtreeFields, primaryKeyFields, secondaryFilterFields, isPointMBR); localResourceFactoryProvider = new PersistentLocalResourceFactoryProvider(localResourceMetadata, LocalResource.LSMRTreeResource); - indexDataflowHelperFactory = new LSMRTreeDataflowHelperFactory(valueProviderFactories, - RTreePolicyType.RTREE, primaryComparatorFactories, + indexDataflowHelperFactory = new LSMRTreeWithAntiMatterTuplesDataflowHelperFactory(valueProviderFactories, + RTreePolicyType.RTREE, btreeCompFactories, new AsterixVirtualBufferCacheProvider(dataset.getDatasetId()), mergePolicyFactory, mergePolicyFactoryProperties, new SecondaryIndexOperationTrackerProvider(dataset.getDatasetId()), AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER, LSMRTreeIOOperationCallbackFactory.INSTANCE, - AqlMetadataProvider.proposeLinearizer(keyType, secondaryComparatorFactories.length), - storageProperties.getBloomFilterFalsePositiveRate(), rtreeFields, primaryKeyFields, + AqlMetadataProvider.proposeLinearizer(keyType, secondaryComparatorFactories.length), rtreeFields, filterTypeTraits, filterCmpFactories, secondaryFilterFields, !temp, isPointMBR); } else { // External dataset @@ -152,6 +153,18 @@ spec.addRoot(secondaryIndexCreateOp); spec.setConnectorPolicyAssignmentPolicy(new ConnectorPolicyAssignmentPolicy()); return spec; + } + + private IBinaryComparatorFactory[] getComparatorFactoriesForDeletedKeyBTree() { + IBinaryComparatorFactory[] btreeCompFactories = new IBinaryComparatorFactory[secondaryTypeTraits.length];; + int i = 0; + for (; i < secondaryComparatorFactories.length; i++) { + btreeCompFactories[i] = secondaryComparatorFactories[i]; + } + for (int j = 0; i < secondaryTypeTraits.length; i++, j++) { + btreeCompFactories[i] = primaryComparatorFactories[j]; + } + return btreeCompFactories; } @Override @@ -303,18 +316,20 @@ isPointMBR ? secondaryRecDescForPointMBR : secondaryRecDesc); AsterixStorageProperties storageProperties = propertiesProvider.getStorageProperties(); + + IBinaryComparatorFactory[] btreeCompFactories = getComparatorFactoriesForDeletedKeyBTree(); + IIndexDataflowHelperFactory idff = null; + idff = new LSMRTreeWithAntiMatterTuplesDataflowHelperFactory(valueProviderFactories, RTreePolicyType.RTREE, + btreeCompFactories, new AsterixVirtualBufferCacheProvider(dataset.getDatasetId()), + mergePolicyFactory, mergePolicyFactoryProperties, + new SecondaryIndexOperationTrackerProvider(dataset.getDatasetId()), + AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER, LSMRTreeIOOperationCallbackFactory.INSTANCE, + AqlMetadataProvider.proposeLinearizer(keyType, secondaryComparatorFactories.length), rtreeFields, + filterTypeTraits, filterCmpFactories, secondaryFilterFields, !temp, isPointMBR); + // Create secondary RTree bulk load op. TreeIndexBulkLoadOperatorDescriptor secondaryBulkLoadOp = createTreeIndexBulkLoadOp(spec, fieldPermutation, - new LSMRTreeDataflowHelperFactory(valueProviderFactories, RTreePolicyType.RTREE, - primaryComparatorFactories, new AsterixVirtualBufferCacheProvider(dataset.getDatasetId()), - mergePolicyFactory, mergePolicyFactoryProperties, - new SecondaryIndexOperationTrackerProvider(dataset.getDatasetId()), - AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER, - LSMRTreeIOOperationCallbackFactory.INSTANCE, - AqlMetadataProvider.proposeLinearizer(keyType, secondaryComparatorFactories.length), - storageProperties.getBloomFilterFalsePositiveRate(), rtreeFields, primaryKeyFields, - filterTypeTraits, filterCmpFactories, secondaryFilterFields, !temp, isPointMBR), - GlobalConfig.DEFAULT_TREE_FILL_FACTOR); + idff, GlobalConfig.DEFAULT_TREE_FILL_FACTOR); AlgebricksMetaOperatorDescriptor metaOp = new AlgebricksMetaOperatorDescriptor(spec, 1, 0, new IPushRuntimeFactory[] { new SinkRuntimeFactory() }, new RecordDescriptor[] {}); // Connect the operators. @@ -456,19 +471,18 @@ boolean temp = dataset.getDatasetDetails().isTemp(); LSMTreeIndexCompactOperatorDescriptor compactOp; if (dataset.getDatasetType() == DatasetType.INTERNAL) { + IBinaryComparatorFactory[] btreeCompFactories = getComparatorFactoriesForDeletedKeyBTree();; + IIndexDataflowHelperFactory idff = new LSMRTreeWithAntiMatterTuplesDataflowHelperFactory( + valueProviderFactories, RTreePolicyType.RTREE, btreeCompFactories, + new AsterixVirtualBufferCacheProvider(dataset.getDatasetId()), mergePolicyFactory, + mergePolicyFactoryProperties, new SecondaryIndexOperationTrackerProvider(dataset.getDatasetId()), + AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER, LSMRTreeIOOperationCallbackFactory.INSTANCE, + AqlMetadataProvider.proposeLinearizer(keyType, secondaryComparatorFactories.length), rtreeFields, + filterTypeTraits, filterCmpFactories, secondaryFilterFields, !temp, isPointMBR); compactOp = new LSMTreeIndexCompactOperatorDescriptor(spec, AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER, AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER, secondaryFileSplitProvider, secondaryTypeTraits, - secondaryComparatorFactories, secondaryBloomFilterKeyFields, - new LSMRTreeDataflowHelperFactory(valueProviderFactories, RTreePolicyType.RTREE, - primaryComparatorFactories, new AsterixVirtualBufferCacheProvider(dataset.getDatasetId()), - mergePolicyFactory, mergePolicyFactoryProperties, - new SecondaryIndexOperationTrackerProvider(dataset.getDatasetId()), - AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER, - LSMRTreeIOOperationCallbackFactory.INSTANCE, - AqlMetadataProvider.proposeLinearizer(keyType, secondaryComparatorFactories.length), - storageProperties.getBloomFilterFalsePositiveRate(), rtreeFields, primaryKeyFields, - filterTypeTraits, filterCmpFactories, secondaryFilterFields, !temp, isPointMBR), + secondaryComparatorFactories, secondaryBloomFilterKeyFields, idff, NoOpOperationCallbackFactory.INSTANCE); } else { // External dataset diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/AqlMetadataProvider.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/AqlMetadataProvider.java index 129b6bc..09f208b 100644 --- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/AqlMetadataProvider.java +++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/AqlMetadataProvider.java @@ -180,6 +180,7 @@ import org.apache.hyracks.storage.am.lsm.invertedindex.tokenizers.IBinaryTokenizerFactory; import org.apache.hyracks.storage.am.lsm.rtree.dataflow.ExternalRTreeDataflowHelperFactory; import org.apache.hyracks.storage.am.lsm.rtree.dataflow.LSMRTreeDataflowHelperFactory; +import org.apache.hyracks.storage.am.lsm.rtree.dataflow.LSMRTreeWithAntiMatterTuplesDataflowHelperFactory; import org.apache.hyracks.storage.am.rtree.dataflow.RTreeSearchOperatorDescriptor; import org.apache.hyracks.storage.am.rtree.frames.RTreePolicyType; @@ -909,22 +910,20 @@ RTreeSearchOperatorDescriptor rtreeSearchOp; if (dataset.getDatasetType() == DatasetType.INTERNAL) { + IBinaryComparatorFactory[] deletedKeyBTreeCompFactories = getMergedComparatorFactories( + comparatorFactories, primaryComparatorFactories); + IIndexDataflowHelperFactory idff = new LSMRTreeWithAntiMatterTuplesDataflowHelperFactory( + valueProviderFactories, RTreePolicyType.RTREE, deletedKeyBTreeCompFactories, + new AsterixVirtualBufferCacheProvider(dataset.getDatasetId()), compactionInfo.first, + compactionInfo.second, new SecondaryIndexOperationTrackerProvider(dataset.getDatasetId()), + AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER, LSMRTreeIOOperationCallbackFactory.INSTANCE, + AqlMetadataProvider.proposeLinearizer(nestedKeyType.getTypeTag(), comparatorFactories.length), + rtreeFields, filterTypeTraits, filterCmpFactories, filterFields, !temp, isPointMBR); rtreeSearchOp = new RTreeSearchOperatorDescriptor(jobSpec, outputRecDesc, appContext.getStorageManagerInterface(), appContext.getIndexLifecycleManagerProvider(), - spPc.first, typeTraits, comparatorFactories, keyFields, - new LSMRTreeDataflowHelperFactory(valueProviderFactories, RTreePolicyType.RTREE, - primaryComparatorFactories, - new AsterixVirtualBufferCacheProvider(dataset.getDatasetId()), compactionInfo.first, - compactionInfo.second, - new SecondaryIndexOperationTrackerProvider(dataset.getDatasetId()), - AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER, - LSMRTreeIOOperationCallbackFactory.INSTANCE, - proposeLinearizer(nestedKeyType.getTypeTag(), comparatorFactories.length), - storageProperties.getBloomFilterFalsePositiveRate(), rtreeFields, btreeFields, - filterTypeTraits, filterCmpFactories, filterFields, !temp, isPointMBR), - retainInput, retainNull, context.getNullWriterFactory(), searchCallbackFactory, - minFilterFieldIndexes, maxFilterFieldIndexes); - + spPc.first, typeTraits, comparatorFactories, keyFields, idff, retainInput, retainNull, + context.getNullWriterFactory(), searchCallbackFactory, minFilterFieldIndexes, + maxFilterFieldIndexes); } else { // External Dataset ExternalRTreeDataflowHelperFactory indexDataflowHelperFactory = new ExternalRTreeDataflowHelperFactory( @@ -948,6 +947,21 @@ } catch (MetadataException me) { throw new AlgebricksException(me); } + } + + private IBinaryComparatorFactory[] getMergedComparatorFactories(IBinaryComparatorFactory[] comparatorFactories, + IBinaryComparatorFactory[] primaryComparatorFactories) { + IBinaryComparatorFactory[] btreeCompFactories = null; + int btreeCompFactoriesCount = comparatorFactories.length + primaryComparatorFactories.length; + btreeCompFactories = new IBinaryComparatorFactory[btreeCompFactoriesCount]; + int i = 0; + for (; i < comparatorFactories.length; i++) { + btreeCompFactories[i] = comparatorFactories[i]; + } + for (int j = 0; i < btreeCompFactoriesCount; i++, j++) { + btreeCompFactories[i] = primaryComparatorFactories[j]; + } + return btreeCompFactories; } @Override @@ -2042,36 +2056,28 @@ Pair<ILSMMergePolicyFactory, Map<String, String>> compactionInfo = DatasetUtils .getMergePolicyFactory(dataset, mdTxnCtx); - IIndexDataflowHelperFactory idfh = new LSMRTreeDataflowHelperFactory(valueProviderFactories, - RTreePolicyType.RTREE, primaryComparatorFactories, + + IBinaryComparatorFactory[] deletedKeyBTreeCompFactories = getMergedComparatorFactories(comparatorFactories, + primaryComparatorFactories); + IIndexDataflowHelperFactory idff = new LSMRTreeWithAntiMatterTuplesDataflowHelperFactory( + valueProviderFactories, RTreePolicyType.RTREE, deletedKeyBTreeCompFactories, new AsterixVirtualBufferCacheProvider(dataset.getDatasetId()), compactionInfo.first, compactionInfo.second, new SecondaryIndexOperationTrackerProvider(dataset.getDatasetId()), AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER, LSMRTreeIOOperationCallbackFactory.INSTANCE, - proposeLinearizer(nestedKeyType.getTypeTag(), comparatorFactories.length), - storageProperties.getBloomFilterFalsePositiveRate(), rtreeFields, btreeFields, filterTypeTraits, - filterCmpFactories, filterFields, !temp, isPointMBR); + AqlMetadataProvider.proposeLinearizer(nestedKeyType.getTypeTag(), comparatorFactories.length), + rtreeFields, filterTypeTraits, filterCmpFactories, filterFields, !temp, isPointMBR); IOperatorDescriptor op; if (bulkload) { long numElementsHint = getCardinalityPerPartitionHint(dataset); op = new TreeIndexBulkLoadOperatorDescriptor(spec, recordDesc, appContext.getStorageManagerInterface(), appContext.getIndexLifecycleManagerProvider(), splitsAndConstraint.first, typeTraits, primaryComparatorFactories, btreeFields, fieldPermutation, - GlobalConfig.DEFAULT_TREE_FILL_FACTOR, false, numElementsHint, false, idfh); + GlobalConfig.DEFAULT_TREE_FILL_FACTOR, false, numElementsHint, false, idff); } else { op = new AsterixLSMTreeInsertDeleteOperatorDescriptor(spec, recordDesc, appContext.getStorageManagerInterface(), appContext.getIndexLifecycleManagerProvider(), splitsAndConstraint.first, typeTraits, comparatorFactories, null, fieldPermutation, indexOp, - new LSMRTreeDataflowHelperFactory(valueProviderFactories, RTreePolicyType.RTREE, - primaryComparatorFactories, - new AsterixVirtualBufferCacheProvider(dataset.getDatasetId()), compactionInfo.first, - compactionInfo.second, - new SecondaryIndexOperationTrackerProvider(dataset.getDatasetId()), - AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER, - LSMRTreeIOOperationCallbackFactory.INSTANCE, - proposeLinearizer(nestedKeyType.getTypeTag(), comparatorFactories.length), - storageProperties.getBloomFilterFalsePositiveRate(), rtreeFields, btreeFields, - filterTypeTraits, filterCmpFactories, filterFields, !temp, isPointMBR), - filterFactory, false, indexName, null, modificationCallbackFactory, + idff, filterFactory, false, indexName, null, modificationCallbackFactory, NoOpOperationCallbackFactory.INSTANCE); } return new Pair<IOperatorDescriptor, AlgebricksPartitionConstraint>(op, splitsAndConstraint.second); diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/AbstractLSMRTree.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/AbstractLSMRTree.java index 7092a37..b2a5b2b 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/AbstractLSMRTree.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/AbstractLSMRTree.java @@ -32,6 +32,7 @@ import org.apache.hyracks.storage.am.common.api.IIndexOperationContext; import org.apache.hyracks.storage.am.common.api.IMetaDataPageManager; import org.apache.hyracks.storage.am.common.api.IModificationOperationCallback; +import org.apache.hyracks.storage.am.common.api.ISearchOperationCallback; import org.apache.hyracks.storage.am.common.api.ISearchPredicate; import org.apache.hyracks.storage.am.common.api.ITreeIndex; import org.apache.hyracks.storage.am.common.api.ITreeIndexFrameFactory; @@ -372,11 +373,11 @@ } } - protected LSMRTreeOpContext createOpContext(IModificationOperationCallback modCallback) { + protected LSMRTreeOpContext createOpContext(IModificationOperationCallback modCallback, + ISearchOperationCallback searchCallback) { return new LSMRTreeOpContext(memoryComponents, rtreeLeafFrameFactory, rtreeInteriorFrameFactory, btreeLeafFrameFactory, btreeInteriorFrameFactory, rtreeCmpFactories, btreeCmpFactories, modCallback, - NoOpOperationCallback.INSTANCE, rtreeFields, filterFields, lsmHarness, comparatorFields, - linearizerArray); + searchCallback, rtreeFields, filterFields, lsmHarness, comparatorFields, linearizerArray); } @Override diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTree.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTree.java index 010cc27..60eafa4 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTree.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTree.java @@ -207,7 +207,8 @@ throws HyracksDataException { ILSMComponent flushingComponent = ctx.getComponentHolder().get(0); LSMComponentFileReferences componentFileRefs = fileManager.getRelFlushFileReference(); - ILSMIndexOperationContext rctx = createOpContext(NoOpOperationCallback.INSTANCE); + ILSMIndexOperationContext rctx = createOpContext(NoOpOperationCallback.INSTANCE, + NoOpOperationCallback.INSTANCE); rctx.setOperation(IndexOperation.FLUSH); rctx.getComponentHolder().addAll(ctx.getComponentHolder()); LSMRTreeAccessor accessor = new LSMRTreeAccessor(lsmHarness, rctx); @@ -330,7 +331,8 @@ @Override public void scheduleMerge(ILSMIndexOperationContext ctx, ILSMIOOperationCallback callback) throws HyracksDataException, IndexException { - ILSMIndexOperationContext rctx = createOpContext(NoOpOperationCallback.INSTANCE); + ILSMIndexOperationContext rctx = createOpContext(NoOpOperationCallback.INSTANCE, + NoOpOperationCallback.INSTANCE); rctx.setOperation(IndexOperation.MERGE); List<ILSMComponent> mergingComponents = ctx.getComponentHolder(); ITreeIndexCursor cursor = new LSMRTreeSortedCursor(rctx, linearizer, buddyBTreeFields); @@ -418,7 +420,7 @@ @Override public ILSMIndexAccessorInternal createAccessor(IModificationOperationCallback modificationCallback, ISearchOperationCallback searchCallback) { - return new LSMRTreeAccessor(lsmHarness, createOpContext(modificationCallback)); + return new LSMRTreeAccessor(lsmHarness, createOpContext(modificationCallback, searchCallback)); } public class LSMRTreeAccessor extends LSMTreeIndexAccessor { diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTreeWithAntiMatterTuples.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTreeWithAntiMatterTuples.java index 6d14c0f..36e0161 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTreeWithAntiMatterTuples.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTreeWithAntiMatterTuples.java @@ -161,7 +161,7 @@ public void scheduleFlush(ILSMIndexOperationContext ctx, ILSMIOOperationCallback callback) throws HyracksDataException { ILSMComponent flushingComponent = ctx.getComponentHolder().get(0); - LSMRTreeOpContext opCtx = createOpContext(NoOpOperationCallback.INSTANCE); + LSMRTreeOpContext opCtx = createOpContext(NoOpOperationCallback.INSTANCE, NoOpOperationCallback.INSTANCE); LSMComponentFileReferences relFlushFileRefs = fileManager.getRelFlushFileReference(); opCtx.setOperation(IndexOperation.FLUSH); opCtx.getComponentHolder().add(flushingComponent); @@ -264,7 +264,7 @@ @Override public void scheduleMerge(ILSMIndexOperationContext ctx, ILSMIOOperationCallback callback) throws HyracksDataException, IndexException { - LSMRTreeOpContext rctx = createOpContext(NoOpOperationCallback.INSTANCE); + LSMRTreeOpContext rctx = createOpContext(NoOpOperationCallback.INSTANCE, NoOpOperationCallback.INSTANCE); rctx.setOperation(IndexOperation.MERGE); List<ILSMComponent> mergingComponents = ctx.getComponentHolder(); boolean returnDeletedTuples = false; @@ -319,7 +319,8 @@ @Override public ILSMIndexAccessorInternal createAccessor(IModificationOperationCallback modificationCallback, ISearchOperationCallback searchCallback) { - return new LSMRTreeWithAntiMatterTuplesAccessor(lsmHarness, createOpContext(modificationCallback)); + return new LSMRTreeWithAntiMatterTuplesAccessor(lsmHarness, + createOpContext(modificationCallback, searchCallback)); } public class LSMRTreeWithAntiMatterTuplesAccessor extends LSMTreeIndexAccessor { 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 25b0bcf..a1b06af 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 @@ -160,21 +160,34 @@ ILSMIOOperationCallback ioOpCallback, ILinearizeComparatorFactory linearizerCmpFactory, int[] rtreeFields, ITypeTraits[] filterTypeTraits, IBinaryComparatorFactory[] filterCmpFactories, int[] filterFields, boolean durable, boolean isPointMBR) throws TreeIndexException { - LSMRTreeTupleWriterFactory rtreeTupleWriterFactory = new LSMRTreeTupleWriterFactory(typeTraits, false); + ITreeIndexTupleWriterFactory rtreeInteriorFrameTupleWriterFactory = new LSMRTreeTupleWriterFactory(typeTraits, + false); + ITreeIndexTupleWriterFactory rtreeLeafFrameTupleWriterFactory = null; + ITreeIndexTupleWriterFactory rtreeLeafFrameCopyTupleWriterFactory = null; + if (isPointMBR) { + int keyFieldCount = rtreeCmpFactories.length; + int valueFieldCount = btreeCmpFactories.length - keyFieldCount; + rtreeLeafFrameTupleWriterFactory = new LSMRTreeTupleWriterFactoryForPointMBR(typeTraits, keyFieldCount, + valueFieldCount, true); + rtreeLeafFrameCopyTupleWriterFactory = new LSMRTreeTupleWriterFactoryForPointMBR(typeTraits, keyFieldCount, + valueFieldCount, true); + + } else { + rtreeLeafFrameTupleWriterFactory = new LSMRTreeTupleWriterFactory(typeTraits, false); + rtreeLeafFrameCopyTupleWriterFactory = new LSMRTreeCopyTupleWriterFactory(typeTraits); + } LSMRTreeTupleWriterFactory btreeTupleWriterFactory = new LSMRTreeTupleWriterFactory(typeTraits, true); - LSMRTreeCopyTupleWriterFactory copyTupleWriterFactory = new LSMRTreeCopyTupleWriterFactory(typeTraits); - - ITreeIndexFrameFactory rtreeInteriorFrameFactory = new RTreeNSMInteriorFrameFactory(rtreeTupleWriterFactory, - valueProviderFactories, rtreePolicyType, isPointMBR); - ITreeIndexFrameFactory rtreeLeafFrameFactory = new RTreeNSMLeafFrameFactory(rtreeTupleWriterFactory, + ITreeIndexFrameFactory rtreeInteriorFrameFactory = new RTreeNSMInteriorFrameFactory( + rtreeInteriorFrameTupleWriterFactory, valueProviderFactories, rtreePolicyType, isPointMBR); + ITreeIndexFrameFactory rtreeLeafFrameFactory = new RTreeNSMLeafFrameFactory(rtreeLeafFrameTupleWriterFactory, valueProviderFactories, rtreePolicyType, isPointMBR); ITreeIndexFrameFactory btreeInteriorFrameFactory = new BTreeNSMInteriorFrameFactory(btreeTupleWriterFactory); ITreeIndexFrameFactory btreeLeafFrameFactory = new BTreeNSMLeafFrameFactory(btreeTupleWriterFactory); - ITreeIndexFrameFactory copyTupleLeafFrameFactory = new RTreeNSMLeafFrameFactory(copyTupleWriterFactory, - valueProviderFactories, rtreePolicyType, isPointMBR); + ITreeIndexFrameFactory copyTupleLeafFrameFactory = new RTreeNSMLeafFrameFactory( + rtreeLeafFrameCopyTupleWriterFactory, valueProviderFactories, rtreePolicyType, isPointMBR); ITreeIndexMetaDataFrameFactory metaFrameFactory = new LIFOMetaDataFrameFactory(); LinkedListMetadataManagerFactory freePageManagerFactory = new LinkedListMetadataManagerFactory(diskBufferCache, -- To view, visit https://asterix-gerrit.ics.uci.edu/838 To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I19323ef38335409bc914265502ae56655db6d106 Gerrit-PatchSet: 1 Gerrit-Project: asterixdb Gerrit-Branch: master Gerrit-Owner: Young-Seok Kim <kiss...@gmail.com>