http://git-wip-us.apache.org/repos/asf/asterixdb/blob/d9000469/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/dataflow/ExternalRTreeLocalResource.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/dataflow/ExternalRTreeLocalResource.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/dataflow/ExternalRTreeLocalResource.java index 3acfe92..6139420 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/dataflow/ExternalRTreeLocalResource.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/dataflow/ExternalRTreeLocalResource.java @@ -67,8 +67,9 @@ public class ExternalRTreeLocalResource extends LSMRTreeLocalResource { IIOManager ioManager = ncServiceCtx.getIoManager(); FileReference fileRef = ioManager.resolve(path); return LSMRTreeUtils.createExternalRTree(ioManager, fileRef, storageManager.getBufferCache(ncServiceCtx), - typeTraits, cmpFactories, btreeCmpFactories, valueProviderFactories, rtreePolicyType, - bloomFilterFalsePositiveRate, mergePolicyFactory.createMergePolicy(mergePolicyProperties, ncServiceCtx), + storageManager.getFileMapProvider(ncServiceCtx), typeTraits, cmpFactories, btreeCmpFactories, + valueProviderFactories, rtreePolicyType, bloomFilterFalsePositiveRate, + mergePolicyFactory.createMergePolicy(mergePolicyProperties, ncServiceCtx), opTrackerProvider.getOperationTracker(ncServiceCtx), ioSchedulerProvider.getIoScheduler(ncServiceCtx), ioOpCallbackFactory.createIoOpCallback(), linearizeCmpFactory, buddyBTreeFields, durable, isPointMBR, metadataPageManagerFactory);
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/d9000469/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/dataflow/LSMRTreeLocalResource.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/dataflow/LSMRTreeLocalResource.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/dataflow/LSMRTreeLocalResource.java index b272dbe..2eecb30 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/dataflow/LSMRTreeLocalResource.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/dataflow/LSMRTreeLocalResource.java @@ -84,9 +84,9 @@ public class LSMRTreeLocalResource extends LsmResource { FileReference fileRef = ioManager.resolve(path); List<IVirtualBufferCache> virtualBufferCaches = vbcProvider.getVirtualBufferCaches(ncServiceCtx, fileRef); return LSMRTreeUtils.createLSMTree(ioManager, virtualBufferCaches, fileRef, - storageManager.getBufferCache(ncServiceCtx), typeTraits, cmpFactories, btreeCmpFactories, - valueProviderFactories, rtreePolicyType, bloomFilterFalsePositiveRate, - mergePolicyFactory.createMergePolicy(mergePolicyProperties, ncServiceCtx), + storageManager.getBufferCache(ncServiceCtx), storageManager.getFileMapProvider(ncServiceCtx), + typeTraits, cmpFactories, btreeCmpFactories, valueProviderFactories, rtreePolicyType, + bloomFilterFalsePositiveRate, mergePolicyFactory.createMergePolicy(mergePolicyProperties, ncServiceCtx), opTrackerProvider.getOperationTracker(ncServiceCtx), ioSchedulerProvider.getIoScheduler(ncServiceCtx), ioOpCallbackFactory.createIoOpCallback(), linearizeCmpFactory, rtreeFields, buddyBTreeFields, filterTypeTraits, filterCmpFactories, filterFields, durable, isPointMBR, metadataPageManagerFactory); http://git-wip-us.apache.org/repos/asf/asterixdb/blob/d9000469/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/dataflow/LSMRTreeWithAntiMatterLocalResource.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/dataflow/LSMRTreeWithAntiMatterLocalResource.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/dataflow/LSMRTreeWithAntiMatterLocalResource.java index 78f1fd0..429a1cd 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/dataflow/LSMRTreeWithAntiMatterLocalResource.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/dataflow/LSMRTreeWithAntiMatterLocalResource.java @@ -79,8 +79,8 @@ public class LSMRTreeWithAntiMatterLocalResource extends LsmResource { FileReference file = ioManager.resolve(path); List<IVirtualBufferCache> virtualBufferCaches = vbcProvider.getVirtualBufferCaches(serviceCtx, file); return LSMRTreeUtils.createLSMTreeWithAntiMatterTuples(ioManager, virtualBufferCaches, file, - storageManager.getBufferCache(serviceCtx), typeTraits, cmpFactories, btreeComparatorFactories, - valueProviderFactories, rtreePolicyType, + storageManager.getBufferCache(serviceCtx), storageManager.getFileMapProvider(serviceCtx), typeTraits, + cmpFactories, btreeComparatorFactories, valueProviderFactories, rtreePolicyType, mergePolicyFactory.createMergePolicy(mergePolicyProperties, serviceCtx), opTrackerProvider.getOperationTracker(serviceCtx), ioSchedulerProvider.getIoScheduler(serviceCtx), ioOpCallbackFactory.createIoOpCallback(), linearizeCmpFactory, rtreeFields, filterTypeTraits, http://git-wip-us.apache.org/repos/asf/asterixdb/blob/d9000469/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/AbstractLSMRTree.java ---------------------------------------------------------------------- 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 4f29c89..444fd9d 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 @@ -56,6 +56,7 @@ import org.apache.hyracks.storage.common.IModificationOperationCallback; import org.apache.hyracks.storage.common.ISearchOperationCallback; import org.apache.hyracks.storage.common.ISearchPredicate; import org.apache.hyracks.storage.common.buffercache.IBufferCache; +import org.apache.hyracks.storage.common.file.IFileMapProvider; public abstract class AbstractLSMRTree extends AbstractLSMIndex implements ITreeIndex { @@ -80,24 +81,27 @@ public abstract class AbstractLSMRTree extends AbstractLSMIndex implements ITree public AbstractLSMRTree(IIOManager ioManager, List<IVirtualBufferCache> virtualBufferCaches, ITreeIndexFrameFactory rtreeInteriorFrameFactory, ITreeIndexFrameFactory rtreeLeafFrameFactory, ITreeIndexFrameFactory btreeInteriorFrameFactory, ITreeIndexFrameFactory btreeLeafFrameFactory, - ILSMIndexFileManager fileManager, ILSMDiskComponentFactory componentFactory, int fieldCount, - IBinaryComparatorFactory[] rtreeCmpFactories, IBinaryComparatorFactory[] btreeCmpFactories, - ILinearizeComparatorFactory linearizer, int[] comparatorFields, IBinaryComparatorFactory[] linearizerArray, - double bloomFilterFalsePositiveRate, ILSMMergePolicy mergePolicy, ILSMOperationTracker opTracker, - ILSMIOOperationScheduler ioScheduler, ILSMIOOperationCallback ioOpCallback, - IComponentFilterHelper filterHelper, ILSMComponentFilterFrameFactory filterFrameFactory, - LSMComponentFilterManager filterManager, int[] rtreeFields, int[] filterFields, boolean durable, - boolean isPointMBR, IBufferCache diskBufferCache) throws HyracksDataException { - super(ioManager, virtualBufferCaches, diskBufferCache, fileManager, bloomFilterFalsePositiveRate, mergePolicy, - opTracker, ioScheduler, ioOpCallback, filterFrameFactory, filterManager, filterFields, durable, - filterHelper, rtreeFields); + ILSMIndexFileManager fileManager, ILSMDiskComponentFactory componentFactory, + IFileMapProvider diskFileMapProvider, int fieldCount, IBinaryComparatorFactory[] rtreeCmpFactories, + IBinaryComparatorFactory[] btreeCmpFactories, ILinearizeComparatorFactory linearizer, + int[] comparatorFields, IBinaryComparatorFactory[] linearizerArray, double bloomFilterFalsePositiveRate, + ILSMMergePolicy mergePolicy, ILSMOperationTracker opTracker, ILSMIOOperationScheduler ioScheduler, + ILSMIOOperationCallback ioOpCallback, IComponentFilterHelper filterHelper, + ILSMComponentFilterFrameFactory filterFrameFactory, LSMComponentFilterManager filterManager, + int[] rtreeFields, int[] filterFields, boolean durable, boolean isPointMBR, IBufferCache diskBufferCache) + throws HyracksDataException { + super(ioManager, virtualBufferCaches, diskBufferCache, fileManager, diskFileMapProvider, + bloomFilterFalsePositiveRate, mergePolicy, opTracker, ioScheduler, ioOpCallback, filterFrameFactory, + filterManager, filterFields, durable, filterHelper, rtreeFields); int i = 0; for (IVirtualBufferCache virtualBufferCache : virtualBufferCaches) { - RTree memRTree = new RTree(virtualBufferCache, new VirtualFreePageManager(virtualBufferCache), - rtreeInteriorFrameFactory, rtreeLeafFrameFactory, rtreeCmpFactories, fieldCount, + RTree memRTree = new RTree(virtualBufferCache, virtualBufferCache.getFileMapProvider(), + new VirtualFreePageManager(virtualBufferCache), rtreeInteriorFrameFactory, rtreeLeafFrameFactory, + rtreeCmpFactories, fieldCount, ioManager.resolveAbsolutePath(fileManager.getBaseDir() + "_virtual_r_" + i), isPointMBR); - BTree memBTree = new BTree(virtualBufferCache, new VirtualFreePageManager(virtualBufferCache), - btreeInteriorFrameFactory, btreeLeafFrameFactory, btreeCmpFactories, btreeCmpFactories.length, + BTree memBTree = new BTree(virtualBufferCache, virtualBufferCache.getFileMapProvider(), + new VirtualFreePageManager(virtualBufferCache), btreeInteriorFrameFactory, btreeLeafFrameFactory, + btreeCmpFactories, btreeCmpFactories.length, ioManager.resolveAbsolutePath(fileManager.getBaseDir() + "_virtual_b_" + i)); LSMRTreeMemoryComponent mutableComponent = new LSMRTreeMemoryComponent(memRTree, memBTree, virtualBufferCache, i == 0 ? true : false, @@ -125,13 +129,14 @@ public abstract class AbstractLSMRTree extends AbstractLSMIndex implements ITree public AbstractLSMRTree(IIOManager ioManager, ITreeIndexFrameFactory rtreeInteriorFrameFactory, ITreeIndexFrameFactory rtreeLeafFrameFactory, ITreeIndexFrameFactory btreeInteriorFrameFactory, ITreeIndexFrameFactory btreeLeafFrameFactory, ILSMIndexFileManager fileManager, - ILSMDiskComponentFactory componentFactory, IBinaryComparatorFactory[] rtreeCmpFactories, - IBinaryComparatorFactory[] btreeCmpFactories, ILinearizeComparatorFactory linearizer, - int[] comparatorFields, IBinaryComparatorFactory[] linearizerArray, double bloomFilterFalsePositiveRate, - ILSMMergePolicy mergePolicy, ILSMOperationTracker opTracker, ILSMIOOperationScheduler ioScheduler, - ILSMIOOperationCallback ioOpCallback, boolean durable, boolean isPointMBR, IBufferCache diskBufferCache) { - super(ioManager, diskBufferCache, fileManager, bloomFilterFalsePositiveRate, mergePolicy, opTracker, - ioScheduler, ioOpCallback, durable); + ILSMDiskComponentFactory componentFactory, IFileMapProvider diskFileMapProvider, + IBinaryComparatorFactory[] rtreeCmpFactories, IBinaryComparatorFactory[] btreeCmpFactories, + ILinearizeComparatorFactory linearizer, int[] comparatorFields, IBinaryComparatorFactory[] linearizerArray, + double bloomFilterFalsePositiveRate, ILSMMergePolicy mergePolicy, ILSMOperationTracker opTracker, + ILSMIOOperationScheduler ioScheduler, ILSMIOOperationCallback ioOpCallback, boolean durable, + boolean isPointMBR, IBufferCache diskBufferCache) { + super(ioManager, diskBufferCache, fileManager, diskFileMapProvider, bloomFilterFalsePositiveRate, mergePolicy, + opTracker, ioScheduler, ioOpCallback, durable); this.rtreeInteriorFrameFactory = rtreeInteriorFrameFactory; this.rtreeLeafFrameFactory = rtreeLeafFrameFactory; this.btreeInteriorFrameFactory = btreeInteriorFrameFactory; @@ -324,6 +329,13 @@ public abstract class AbstractLSMRTree extends AbstractLSMIndex implements ITree } @Override + protected void destroyMemoryComponent(ILSMMemoryComponent c) throws HyracksDataException { + LSMRTreeMemoryComponent mutableComponent = (LSMRTreeMemoryComponent) c; + mutableComponent.getRTree().destroy(); + mutableComponent.getBTree().destroy(); + } + + @Override protected LSMComponentFileReferences getMergeFileReferences(ILSMDiskComponent firstComponent, ILSMDiskComponent lastComponent) throws HyracksDataException { RTree firstTree = ((LSMRTreeDiskComponent) firstComponent).getRTree(); http://git-wip-us.apache.org/repos/asf/asterixdb/blob/d9000469/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/ExternalRTree.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/ExternalRTree.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/ExternalRTree.java index 512e35c..987aec7 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/ExternalRTree.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/ExternalRTree.java @@ -62,6 +62,7 @@ import org.apache.hyracks.storage.common.IIndexCursor; import org.apache.hyracks.storage.common.IModificationOperationCallback; import org.apache.hyracks.storage.common.ISearchOperationCallback; import org.apache.hyracks.storage.common.ISearchPredicate; +import org.apache.hyracks.storage.common.file.IFileMapProvider; /** * This is an lsm r-tree that does not have memory component and is modified @@ -85,16 +86,17 @@ public class ExternalRTree extends LSMRTree implements ITwoPCIndex { ITreeIndexFrameFactory rtreeLeafFrameFactory, ITreeIndexFrameFactory btreeInteriorFrameFactory, ITreeIndexFrameFactory btreeLeafFrameFactory, ILSMIndexFileManager fileNameManager, TreeIndexFactory<RTree> diskRTreeFactory, TreeIndexFactory<BTree> diskBTreeFactory, - BloomFilterFactory bloomFilterFactory, double bloomFilterFalsePositiveRate, int fieldCount, - IBinaryComparatorFactory[] rtreeCmpFactories, IBinaryComparatorFactory[] btreeCmpFactories, - ILinearizeComparatorFactory linearizer, int[] comparatorFields, IBinaryComparatorFactory[] linearizerArray, - ILSMMergePolicy mergePolicy, ILSMOperationTracker opTracker, ILSMIOOperationScheduler ioScheduler, - ILSMIOOperationCallback ioOpCallback, int[] buddyBTreeFields, boolean durable, boolean isPointMBR) { + BloomFilterFactory bloomFilterFactory, double bloomFilterFalsePositiveRate, + IFileMapProvider diskFileMapProvider, int fieldCount, IBinaryComparatorFactory[] rtreeCmpFactories, + IBinaryComparatorFactory[] btreeCmpFactories, ILinearizeComparatorFactory linearizer, + int[] comparatorFields, IBinaryComparatorFactory[] linearizerArray, ILSMMergePolicy mergePolicy, + ILSMOperationTracker opTracker, ILSMIOOperationScheduler ioScheduler, ILSMIOOperationCallback ioOpCallback, + int[] buddyBTreeFields, boolean durable, boolean isPointMBR) { super(ioManager, rtreeInteriorFrameFactory, rtreeLeafFrameFactory, btreeInteriorFrameFactory, btreeLeafFrameFactory, fileNameManager, diskRTreeFactory, diskBTreeFactory, bloomFilterFactory, - bloomFilterFalsePositiveRate, rtreeCmpFactories, btreeCmpFactories, linearizer, comparatorFields, - linearizerArray, mergePolicy, opTracker, ioScheduler, ioOpCallback, buddyBTreeFields, durable, - isPointMBR); + bloomFilterFalsePositiveRate, diskFileMapProvider, rtreeCmpFactories, btreeCmpFactories, linearizer, + comparatorFields, linearizerArray, mergePolicy, opTracker, ioScheduler, ioOpCallback, buddyBTreeFields, + durable, isPointMBR); this.secondDiskComponents = new LinkedList<>(); this.fieldCount = fieldCount; } @@ -343,12 +345,25 @@ public class ExternalRTree extends LSMRTree implements ITwoPCIndex { cb.afterFinalize(LSMOperationType.FLUSH, null); } - for (ILSMDiskComponent c : diskComponents) { - deactivateDiskComponent(c); + for (ILSMComponent c : diskComponents) { + LSMRTreeDiskComponent component = (LSMRTreeDiskComponent) c; + RTree rtree = component.getRTree(); + BTree btree = component.getBTree(); + BloomFilter bloomFilter = component.getBloomFilter(); + rtree.deactivateCloseHandle(); + btree.deactivateCloseHandle(); + bloomFilter.deactivate(); } - for (ILSMDiskComponent c : secondDiskComponents) { + for (ILSMComponent c : secondDiskComponents) { + // Only deactivate non shared components if (!diskComponents.contains(c)) { - deactivateDiskComponent(c); + LSMRTreeDiskComponent component = (LSMRTreeDiskComponent) c; + RTree rtree = component.getRTree(); + BTree btree = component.getBTree(); + BloomFilter bloomFilter = component.getBloomFilter(); + rtree.deactivateCloseHandle(); + btree.deactivateCloseHandle(); + bloomFilter.deactivate(); } } isActive = false; @@ -395,13 +410,19 @@ public class ExternalRTree extends LSMRTree implements ITwoPCIndex { if (isActive) { throw new HyracksDataException("Failed to destroy the index since it is activated."); } - for (ILSMDiskComponent c : diskComponents) { - destroyDiskComponent(c); + for (ILSMComponent c : diskComponents) { + LSMRTreeDiskComponent component = (LSMRTreeDiskComponent) c; + component.getRTree().destroy(); + component.getBTree().destroy(); + component.getBloomFilter().destroy(); // Remove from second list to avoid destroying twice secondDiskComponents.remove(c); } - for (ILSMDiskComponent c : secondDiskComponents) { - destroyDiskComponent(c); + for (ILSMComponent c : secondDiskComponents) { + LSMRTreeDiskComponent component = (LSMRTreeDiskComponent) c; + component.getRTree().destroy(); + component.getBTree().destroy(); + component.getBloomFilter().destroy(); } diskComponents.clear(); secondDiskComponents.clear(); http://git-wip-us.apache.org/repos/asf/asterixdb/blob/d9000469/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTree.java ---------------------------------------------------------------------- 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 6c1d7ba..56af16d 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 @@ -73,6 +73,7 @@ import org.apache.hyracks.storage.common.IModificationOperationCallback; import org.apache.hyracks.storage.common.ISearchOperationCallback; import org.apache.hyracks.storage.common.ISearchPredicate; import org.apache.hyracks.storage.common.MultiComparator; +import org.apache.hyracks.storage.common.file.IFileMapProvider; public class LSMRTree extends AbstractLSMRTree { protected final int[] buddyBTreeFields; @@ -83,18 +84,19 @@ public class LSMRTree extends AbstractLSMRTree { ILSMIndexFileManager fileNameManager, TreeIndexFactory<RTree> diskRTreeFactory, TreeIndexFactory<BTree> diskBTreeFactory, BloomFilterFactory bloomFilterFactory, IComponentFilterHelper filterHelper, ILSMComponentFilterFrameFactory filterFrameFactory, - LSMComponentFilterManager filterManager, double bloomFilterFalsePositiveRate, int fieldCount, - IBinaryComparatorFactory[] rtreeCmpFactories, IBinaryComparatorFactory[] btreeCmpFactories, - ILinearizeComparatorFactory linearizer, int[] comparatorFields, IBinaryComparatorFactory[] linearizerArray, - ILSMMergePolicy mergePolicy, ILSMOperationTracker opTracker, ILSMIOOperationScheduler ioScheduler, - ILSMIOOperationCallback ioOpCallback, int[] rtreeFields, int[] buddyBTreeFields, int[] filterFields, - boolean durable, boolean isPointMBR) throws HyracksDataException { + LSMComponentFilterManager filterManager, double bloomFilterFalsePositiveRate, + IFileMapProvider diskFileMapProvider, int fieldCount, IBinaryComparatorFactory[] rtreeCmpFactories, + IBinaryComparatorFactory[] btreeCmpFactories, ILinearizeComparatorFactory linearizer, + int[] comparatorFields, IBinaryComparatorFactory[] linearizerArray, ILSMMergePolicy mergePolicy, + ILSMOperationTracker opTracker, ILSMIOOperationScheduler ioScheduler, ILSMIOOperationCallback ioOpCallback, + int[] rtreeFields, int[] buddyBTreeFields, int[] filterFields, boolean durable, boolean isPointMBR) + throws HyracksDataException { super(ioManager, virtualBufferCaches, rtreeInteriorFrameFactory, rtreeLeafFrameFactory, btreeInteriorFrameFactory, btreeLeafFrameFactory, fileNameManager, new LSMRTreeDiskComponentFactory(diskRTreeFactory, diskBTreeFactory, bloomFilterFactory, filterHelper), - fieldCount, rtreeCmpFactories, btreeCmpFactories, linearizer, comparatorFields, linearizerArray, - bloomFilterFalsePositiveRate, mergePolicy, opTracker, ioScheduler, ioOpCallback, filterHelper, - filterFrameFactory, filterManager, rtreeFields, filterFields, durable, isPointMBR, + diskFileMapProvider, fieldCount, rtreeCmpFactories, btreeCmpFactories, linearizer, comparatorFields, + linearizerArray, bloomFilterFalsePositiveRate, mergePolicy, opTracker, ioScheduler, ioOpCallback, + filterHelper, filterFrameFactory, filterManager, rtreeFields, filterFields, durable, isPointMBR, diskRTreeFactory.getBufferCache()); this.buddyBTreeFields = buddyBTreeFields; } @@ -107,16 +109,17 @@ public class LSMRTree extends AbstractLSMRTree { ITreeIndexFrameFactory btreeLeafFrameFactory, ILSMIndexFileManager fileNameManager, TreeIndexFactory<RTree> diskRTreeFactory, TreeIndexFactory<BTree> diskBTreeFactory, BloomFilterFactory bloomFilterFactory, double bloomFilterFalsePositiveRate, - IBinaryComparatorFactory[] rtreeCmpFactories, IBinaryComparatorFactory[] btreeCmpFactories, - ILinearizeComparatorFactory linearizer, int[] comparatorFields, IBinaryComparatorFactory[] linearizerArray, - ILSMMergePolicy mergePolicy, ILSMOperationTracker opTracker, ILSMIOOperationScheduler ioScheduler, - ILSMIOOperationCallback ioOpCallback, int[] buddyBTreeFields, boolean durable, boolean isPointMBR) { + IFileMapProvider diskFileMapProvider, IBinaryComparatorFactory[] rtreeCmpFactories, + IBinaryComparatorFactory[] btreeCmpFactories, ILinearizeComparatorFactory linearizer, + int[] comparatorFields, IBinaryComparatorFactory[] linearizerArray, ILSMMergePolicy mergePolicy, + ILSMOperationTracker opTracker, ILSMIOOperationScheduler ioScheduler, ILSMIOOperationCallback ioOpCallback, + int[] buddyBTreeFields, boolean durable, boolean isPointMBR) { super(ioManager, rtreeInteriorFrameFactory, rtreeLeafFrameFactory, btreeInteriorFrameFactory, btreeLeafFrameFactory, fileNameManager, new LSMRTreeDiskComponentFactory(diskRTreeFactory, diskBTreeFactory, bloomFilterFactory, null), - rtreeCmpFactories, btreeCmpFactories, linearizer, comparatorFields, linearizerArray, - bloomFilterFalsePositiveRate, mergePolicy, opTracker, ioScheduler, ioOpCallback, durable, isPointMBR, - diskRTreeFactory.getBufferCache()); + diskFileMapProvider, rtreeCmpFactories, btreeCmpFactories, linearizer, comparatorFields, + linearizerArray, bloomFilterFalsePositiveRate, mergePolicy, opTracker, ioScheduler, ioOpCallback, + durable, isPointMBR, diskRTreeFactory.getBufferCache()); this.buddyBTreeFields = buddyBTreeFields; } @@ -134,12 +137,9 @@ public class LSMRTree extends AbstractLSMRTree { RTree rtree = component.getRTree(); BTree btree = component.getBTree(); BloomFilter bloomFilter = component.getBloomFilter(); - rtree.deactivate(); - btree.deactivate(); + rtree.deactivateCloseHandle(); + btree.deactivateCloseHandle(); bloomFilter.deactivate(); - rtree.purge(); - btree.purge(); - bloomFilter.purge(); } @Override http://git-wip-us.apache.org/repos/asf/asterixdb/blob/d9000469/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTreeFileManager.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTreeFileManager.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTreeFileManager.java index 4d5eb5b..f9ee5c9 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTreeFileManager.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTreeFileManager.java @@ -37,8 +37,11 @@ import org.apache.hyracks.storage.am.common.api.ITreeIndex; import org.apache.hyracks.storage.am.lsm.common.impls.AbstractLSMIndexFileManager; import org.apache.hyracks.storage.am.lsm.common.impls.LSMComponentFileReferences; import org.apache.hyracks.storage.am.lsm.common.impls.TreeIndexFactory; +import org.apache.hyracks.storage.common.file.IFileMapProvider; public class LSMRTreeFileManager extends AbstractLSMIndexFileManager { + public static final String RTREE_STRING = "r"; + public static final String BTREE_STRING = "b"; private final TreeIndexFactory<? extends ITreeIndex> rtreeFactory; private final TreeIndexFactory<? extends ITreeIndex> btreeFactory; @@ -46,20 +49,20 @@ public class LSMRTreeFileManager extends AbstractLSMIndexFileManager { private static FilenameFilter btreeFilter = new FilenameFilter() { @Override public boolean accept(File dir, String name) { - return !name.startsWith(".") && name.endsWith(BTREE_SUFFIX); + return !name.startsWith(".") && name.endsWith(BTREE_STRING); } }; private static FilenameFilter rtreeFilter = new FilenameFilter() { @Override public boolean accept(File dir, String name) { - return !name.startsWith(".") && name.endsWith(RTREE_SUFFIX); + return !name.startsWith(".") && name.endsWith(RTREE_STRING); } }; - public LSMRTreeFileManager(IIOManager ioManager, FileReference file, + public LSMRTreeFileManager(IIOManager ioManager, IFileMapProvider fileMapProvider, FileReference file, TreeIndexFactory<? extends ITreeIndex> rtreeFactory, TreeIndexFactory<? extends ITreeIndex> btreeFactory) { - super(ioManager, file, null); + super(ioManager, fileMapProvider, file, null); this.rtreeFactory = rtreeFactory; this.btreeFactory = btreeFactory; } @@ -67,25 +70,25 @@ public class LSMRTreeFileManager extends AbstractLSMIndexFileManager { @Override public LSMComponentFileReferences getRelFlushFileReference() throws HyracksDataException { String ts = getCurrentTimestamp(); - String baseName = baseDir + ts + DELIMITER + ts; + String baseName = baseDir + ts + SPLIT_STRING + ts; // Begin timestamp and end timestamp are identical since it is a flush - return new LSMComponentFileReferences(createFlushFile(baseName + DELIMITER + RTREE_SUFFIX), - createFlushFile(baseName + DELIMITER + BTREE_SUFFIX), - createFlushFile(baseName + DELIMITER + BLOOM_FILTER_SUFFIX)); + return new LSMComponentFileReferences(createFlushFile(baseName + SPLIT_STRING + RTREE_STRING), + createFlushFile(baseName + SPLIT_STRING + BTREE_STRING), + createFlushFile(baseName + SPLIT_STRING + BLOOM_FILTER_STRING)); } @Override public LSMComponentFileReferences getRelMergeFileReference(String firstFileName, String lastFileName) throws HyracksDataException { - String[] firstTimestampRange = firstFileName.split(DELIMITER); - String[] lastTimestampRange = lastFileName.split(DELIMITER); + String[] firstTimestampRange = firstFileName.split(SPLIT_STRING); + String[] lastTimestampRange = lastFileName.split(SPLIT_STRING); - String baseName = baseDir + firstTimestampRange[0] + DELIMITER + lastTimestampRange[1]; + String baseName = baseDir + firstTimestampRange[0] + SPLIT_STRING + lastTimestampRange[1]; // Get the range of timestamps by taking the earliest and the latest // timestamps - return new LSMComponentFileReferences(createMergeFile(baseName + DELIMITER + RTREE_SUFFIX), - createMergeFile(baseName + DELIMITER + BTREE_SUFFIX), - createMergeFile(baseName + DELIMITER + BLOOM_FILTER_SUFFIX)); + return new LSMComponentFileReferences(createMergeFile(baseName + SPLIT_STRING + RTREE_STRING), + createMergeFile(baseName + SPLIT_STRING + BTREE_STRING), + createMergeFile(baseName + SPLIT_STRING + BLOOM_FILTER_STRING)); } @Override @@ -102,7 +105,7 @@ public class LSMRTreeFileManager extends AbstractLSMIndexFileManager { cleanupAndGetValidFilesInternal(getCompoundFilter(transactionFilter, btreeFilter), btreeFactory, allBTreeFiles); HashSet<String> btreeFilesSet = new HashSet<>(); for (ComparableFileName cmpFileName : allBTreeFiles) { - int index = cmpFileName.fileName.lastIndexOf(DELIMITER); + int index = cmpFileName.fileName.lastIndexOf(SPLIT_STRING); btreeFilesSet.add(cmpFileName.fileName.substring(0, index)); } validateFiles(btreeFilesSet, allRTreeFiles, getCompoundFilter(transactionFilter, rtreeFilter), rtreeFactory); @@ -200,19 +203,19 @@ public class LSMRTreeFileManager extends AbstractLSMIndexFileManager { public LSMComponentFileReferences getNewTransactionFileReference() throws IOException { String ts = getCurrentTimestamp(); // Create transaction lock file - Files.createFile(Paths.get(baseDir + TXN_PREFIX + ts)); + Files.createFile(Paths.get(baseDir + TRANSACTION_PREFIX + ts)); - String baseName = baseDir + ts + DELIMITER + ts; - return new LSMComponentFileReferences(createFlushFile(baseName + DELIMITER + RTREE_SUFFIX), - createFlushFile(baseName + DELIMITER + BTREE_SUFFIX), - createFlushFile(baseName + DELIMITER + BLOOM_FILTER_SUFFIX)); + String baseName = baseDir + ts + SPLIT_STRING + ts; + return new LSMComponentFileReferences(createFlushFile(baseName + SPLIT_STRING + RTREE_STRING), + createFlushFile(baseName + SPLIT_STRING + BTREE_STRING), + createFlushFile(baseName + SPLIT_STRING + BLOOM_FILTER_STRING)); } @Override public LSMComponentFileReferences getTransactionFileReferenceForCommit() throws HyracksDataException { FilenameFilter transactionFilter; File dir = new File(baseDir); - String[] files = dir.list(txnFileNameFilter); + String[] files = dir.list(transactionFileNameFilter); if (files.length == 0) { return null; } @@ -236,11 +239,11 @@ public class LSMRTreeFileManager extends AbstractLSMIndexFileManager { File bTreeFile = null; File bloomFilterFile = null; for (String fileName : files) { - if (fileName.endsWith(BTREE_SUFFIX)) { + if (fileName.endsWith(BTREE_STRING)) { bTreeFile = new File(dir.getPath() + File.separator + fileName); - } else if (fileName.endsWith(RTREE_SUFFIX)) { + } else if (fileName.endsWith(RTREE_STRING)) { rTreeFile = new File(dir.getPath() + File.separator + fileName); - } else if (fileName.endsWith(BLOOM_FILTER_SUFFIX)) { + } else if (fileName.endsWith(BLOOM_FILTER_STRING)) { bloomFilterFile = new File(dir.getPath() + File.separator + fileName); } else { throw new HyracksDataException("unrecognized file found = " + fileName); http://git-wip-us.apache.org/repos/asf/asterixdb/blob/d9000469/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTreeWithAntiMatterTuples.java ---------------------------------------------------------------------- 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 a5374c9..ae72884 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 @@ -69,6 +69,7 @@ import org.apache.hyracks.storage.common.IModificationOperationCallback; import org.apache.hyracks.storage.common.ISearchOperationCallback; import org.apache.hyracks.storage.common.ISearchPredicate; import org.apache.hyracks.storage.common.MultiComparator; +import org.apache.hyracks.storage.common.file.IFileMapProvider; public class LSMRTreeWithAntiMatterTuples extends AbstractLSMRTree { private static final ICursorFactory cursorFactory = opCtx -> new LSMRTreeWithAntiMatterTuplesSearchCursor(opCtx); @@ -82,18 +83,19 @@ public class LSMRTreeWithAntiMatterTuples extends AbstractLSMRTree { ITreeIndexFrameFactory btreeInteriorFrameFactory, ITreeIndexFrameFactory btreeLeafFrameFactory, ILSMIndexFileManager fileManager, TreeIndexFactory<RTree> diskRTreeFactory, TreeIndexFactory<RTree> bulkLoadRTreeFactory, IComponentFilterHelper filterHelper, - ILSMComponentFilterFrameFactory filterFrameFactory, LSMComponentFilterManager filterManager, int fieldCount, - IBinaryComparatorFactory[] rtreeCmpFactories, IBinaryComparatorFactory[] btreeComparatorFactories, - ILinearizeComparatorFactory linearizer, int[] comparatorFields, IBinaryComparatorFactory[] linearizerArray, - ILSMMergePolicy mergePolicy, ILSMOperationTracker opTracker, ILSMIOOperationScheduler ioScheduler, - ILSMIOOperationCallback ioOpCallback, int[] rtreeFields, int[] filterFields, boolean durable, - boolean isPointMBR) throws HyracksDataException { + ILSMComponentFilterFrameFactory filterFrameFactory, LSMComponentFilterManager filterManager, + IFileMapProvider diskFileMapProvider, int fieldCount, IBinaryComparatorFactory[] rtreeCmpFactories, + IBinaryComparatorFactory[] btreeComparatorFactories, ILinearizeComparatorFactory linearizer, + int[] comparatorFields, IBinaryComparatorFactory[] linearizerArray, ILSMMergePolicy mergePolicy, + ILSMOperationTracker opTracker, ILSMIOOperationScheduler ioScheduler, ILSMIOOperationCallback ioOpCallback, + int[] rtreeFields, int[] filterFields, boolean durable, boolean isPointMBR) throws HyracksDataException { super(ioManager, virtualBufferCaches, rtreeInteriorFrameFactory, rtreeLeafFrameFactory, btreeInteriorFrameFactory, btreeLeafFrameFactory, fileManager, - new LSMRTreeWithAntiMatterTuplesDiskComponentFactory(diskRTreeFactory, filterHelper), fieldCount, - rtreeCmpFactories, btreeComparatorFactories, linearizer, comparatorFields, linearizerArray, 0, - mergePolicy, opTracker, ioScheduler, ioOpCallback, filterHelper, filterFrameFactory, filterManager, - rtreeFields, filterFields, durable, isPointMBR, diskRTreeFactory.getBufferCache()); + new LSMRTreeWithAntiMatterTuplesDiskComponentFactory(diskRTreeFactory, filterHelper), + diskFileMapProvider, fieldCount, rtreeCmpFactories, btreeComparatorFactories, linearizer, + comparatorFields, linearizerArray, 0, mergePolicy, opTracker, ioScheduler, ioOpCallback, filterHelper, + filterFrameFactory, filterManager, rtreeFields, filterFields, durable, isPointMBR, + diskRTreeFactory.getBufferCache()); bulkLoaComponentFactory = new LSMRTreeWithAntiMatterTuplesDiskComponentFactory(bulkLoadRTreeFactory, filterHelper); } @@ -106,8 +108,7 @@ public class LSMRTreeWithAntiMatterTuples extends AbstractLSMRTree { @Override protected void deactivateDiskComponent(ILSMDiskComponent c) throws HyracksDataException { RTree rtree = ((LSMRTreeDiskComponent) c).getRTree(); - rtree.deactivate(); - rtree.purge(); + rtree.deactivateCloseHandle(); } @Override http://git-wip-us.apache.org/repos/asf/asterixdb/blob/d9000469/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTreeWithAntiMatterTuplesFileManager.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTreeWithAntiMatterTuplesFileManager.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTreeWithAntiMatterTuplesFileManager.java index e39033f..fd1aa71 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTreeWithAntiMatterTuplesFileManager.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTreeWithAntiMatterTuplesFileManager.java @@ -24,11 +24,13 @@ import org.apache.hyracks.api.io.IIOManager; import org.apache.hyracks.storage.am.common.api.ITreeIndex; import org.apache.hyracks.storage.am.lsm.common.impls.AbstractLSMIndexFileManager; import org.apache.hyracks.storage.am.lsm.common.impls.TreeIndexFactory; +import org.apache.hyracks.storage.common.file.IFileMapProvider; public class LSMRTreeWithAntiMatterTuplesFileManager extends AbstractLSMIndexFileManager { - public LSMRTreeWithAntiMatterTuplesFileManager(IIOManager ioManager, FileReference file, + public LSMRTreeWithAntiMatterTuplesFileManager(IIOManager ioManager, IFileMapProvider fileMapProvider, + FileReference file, TreeIndexFactory<? extends ITreeIndex> rtreeFactory) { - super(ioManager, file, rtreeFactory); + super(ioManager, fileMapProvider, file, rtreeFactory); } } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/d9000469/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/RTreeFactory.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/RTreeFactory.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/RTreeFactory.java index 55e70b2..8901c86 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/RTreeFactory.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/RTreeFactory.java @@ -27,24 +27,25 @@ import org.apache.hyracks.storage.am.common.api.ITreeIndexFrameFactory; import org.apache.hyracks.storage.am.lsm.common.impls.TreeIndexFactory; import org.apache.hyracks.storage.am.rtree.impls.RTree; import org.apache.hyracks.storage.common.buffercache.IBufferCache; +import org.apache.hyracks.storage.common.file.IFileMapProvider; public class RTreeFactory extends TreeIndexFactory<RTree> { private final boolean isPointMBR; - public RTreeFactory(IIOManager ioManager, IBufferCache bufferCache, + public RTreeFactory(IIOManager ioManager, IBufferCache bufferCache, IFileMapProvider fileMapProvider, IMetadataPageManagerFactory freePageManagerFactory, ITreeIndexFrameFactory interiorFrameFactory, ITreeIndexFrameFactory leafFrameFactory, IBinaryComparatorFactory[] cmpFactories, int fieldCount, boolean isPointMBR) { - super(ioManager, bufferCache, freePageManagerFactory, interiorFrameFactory, leafFrameFactory, cmpFactories, - fieldCount); + super(ioManager, bufferCache, fileMapProvider, freePageManagerFactory, interiorFrameFactory, leafFrameFactory, + cmpFactories, fieldCount); this.isPointMBR = isPointMBR; } @Override public RTree createIndexInstance(FileReference file) { - return new RTree(bufferCache, freePageManagerFactory.createPageManager(bufferCache), interiorFrameFactory, - leafFrameFactory, cmpFactories, fieldCount, file, isPointMBR); + return new RTree(bufferCache, fileMapProvider, freePageManagerFactory.createPageManager(bufferCache), + interiorFrameFactory, leafFrameFactory, cmpFactories, fieldCount, file, isPointMBR); } } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/d9000469/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/utils/LSMRTreeUtils.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/utils/LSMRTreeUtils.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/utils/LSMRTreeUtils.java index 48cd589..e37fa4a 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 @@ -68,14 +68,15 @@ import org.apache.hyracks.storage.am.rtree.linearize.HilbertDoubleComparatorFact import org.apache.hyracks.storage.am.rtree.linearize.ZCurveDoubleComparatorFactory; import org.apache.hyracks.storage.am.rtree.linearize.ZCurveIntComparatorFactory; import org.apache.hyracks.storage.common.buffercache.IBufferCache; +import org.apache.hyracks.storage.common.file.IFileMapProvider; public class LSMRTreeUtils { public static LSMRTree createLSMTree(IIOManager ioManager, List<IVirtualBufferCache> virtualBufferCaches, - FileReference file, IBufferCache diskBufferCache, ITypeTraits[] typeTraits, - IBinaryComparatorFactory[] rtreeCmpFactories, IBinaryComparatorFactory[] btreeCmpFactories, - IPrimitiveValueProviderFactory[] valueProviderFactories, RTreePolicyType rtreePolicyType, - double bloomFilterFalsePositiveRate, ILSMMergePolicy mergePolicy, ILSMOperationTracker opTracker, - ILSMIOOperationScheduler ioScheduler, ILSMIOOperationCallback ioOpCallback, + FileReference file, IBufferCache diskBufferCache, IFileMapProvider diskFileMapProvider, + ITypeTraits[] typeTraits, IBinaryComparatorFactory[] rtreeCmpFactories, + IBinaryComparatorFactory[] btreeCmpFactories, IPrimitiveValueProviderFactory[] valueProviderFactories, + RTreePolicyType rtreePolicyType, double bloomFilterFalsePositiveRate, ILSMMergePolicy mergePolicy, + ILSMOperationTracker opTracker, ILSMIOOperationScheduler ioScheduler, ILSMIOOperationCallback ioOpCallback, ILinearizeComparatorFactory linearizeCmpFactory, int[] rtreeFields, int[] buddyBTreeFields, ITypeTraits[] filterTypeTraits, IBinaryComparatorFactory[] filterCmpFactories, int[] filterFields, boolean durable, boolean isPointMBR, IMetadataPageManagerFactory freePageManagerFactory) @@ -103,10 +104,12 @@ public class LSMRTreeUtils { valueProviderFactories, rtreePolicyType, isPointMBR); ITreeIndexFrameFactory btreeInteriorFrameFactory = new BTreeNSMInteriorFrameFactory(btreeTupleWriterFactory); ITreeIndexFrameFactory btreeLeafFrameFactory = new BTreeNSMLeafFrameFactory(btreeTupleWriterFactory); - TreeIndexFactory<RTree> diskRTreeFactory = new RTreeFactory(ioManager, diskBufferCache, freePageManagerFactory, - rtreeInteriorFrameFactory, rtreeLeafFrameFactory, rtreeCmpFactories, typeTraits.length, isPointMBR); - TreeIndexFactory<BTree> diskBTreeFactory = new BTreeFactory(ioManager, diskBufferCache, freePageManagerFactory, - btreeInteriorFrameFactory, btreeLeafFrameFactory, btreeCmpFactories, btreeTypeTraits.length); + TreeIndexFactory<RTree> diskRTreeFactory = new RTreeFactory(ioManager, diskBufferCache, diskFileMapProvider, + freePageManagerFactory, rtreeInteriorFrameFactory, rtreeLeafFrameFactory, rtreeCmpFactories, + typeTraits.length, isPointMBR); + TreeIndexFactory<BTree> diskBTreeFactory = + new BTreeFactory(ioManager, diskBufferCache, diskFileMapProvider, freePageManagerFactory, + btreeInteriorFrameFactory, btreeLeafFrameFactory, btreeCmpFactories, btreeTypeTraits.length); int[] comparatorFields = { 0 }; IBinaryComparatorFactory[] linearizerArray = { linearizeCmpFactory }; @@ -115,7 +118,8 @@ public class LSMRTreeUtils { for (int i = 0; i < btreeCmpFactories.length; i++) { bloomFilterKeyFields[i] = i; } - BloomFilterFactory bloomFilterFactory = new BloomFilterFactory(diskBufferCache, bloomFilterKeyFields); + BloomFilterFactory bloomFilterFactory = + new BloomFilterFactory(diskBufferCache, diskFileMapProvider, bloomFilterKeyFields); ComponentFilterHelper filterHelper = null; LSMComponentFilterFrameFactory filterFrameFactory = null; @@ -127,19 +131,19 @@ public class LSMRTreeUtils { filterManager = new LSMComponentFilterManager(filterFrameFactory); } ILSMIndexFileManager fileNameManager = - new LSMRTreeFileManager(ioManager, file, diskRTreeFactory, diskBTreeFactory); + new LSMRTreeFileManager(ioManager, diskFileMapProvider, file, diskRTreeFactory, diskBTreeFactory); return new LSMRTree(ioManager, virtualBufferCaches, rtreeInteriorFrameFactory, rtreeLeafFrameFactory, btreeInteriorFrameFactory, btreeLeafFrameFactory, fileNameManager, diskRTreeFactory, diskBTreeFactory, bloomFilterFactory, filterHelper, filterFrameFactory, filterManager, bloomFilterFalsePositiveRate, - typeTraits.length, rtreeCmpFactories, btreeCmpFactories, linearizeCmpFactory, comparatorFields, - linearizerArray, mergePolicy, opTracker, ioScheduler, ioOpCallback, rtreeFields, buddyBTreeFields, - filterFields, durable, isPointMBR); + diskFileMapProvider, typeTraits.length, rtreeCmpFactories, btreeCmpFactories, linearizeCmpFactory, + comparatorFields, linearizerArray, mergePolicy, opTracker, ioScheduler, ioOpCallback, rtreeFields, + buddyBTreeFields, filterFields, durable, isPointMBR); } public static LSMRTreeWithAntiMatterTuples createLSMTreeWithAntiMatterTuples(IIOManager ioManager, List<IVirtualBufferCache> virtualBufferCaches, FileReference file, IBufferCache diskBufferCache, - ITypeTraits[] typeTraits, IBinaryComparatorFactory[] rtreeCmpFactories, - IBinaryComparatorFactory[] btreeComparatorFactories, + IFileMapProvider diskFileMapProvider, ITypeTraits[] typeTraits, + IBinaryComparatorFactory[] rtreeCmpFactories, IBinaryComparatorFactory[] btreeComparatorFactories, IPrimitiveValueProviderFactory[] valueProviderFactories, RTreePolicyType rtreePolicyType, ILSMMergePolicy mergePolicy, ILSMOperationTracker opTracker, ILSMIOOperationScheduler ioScheduler, ILSMIOOperationCallback ioOpCallback, ILinearizeComparatorFactory linearizerCmpFactory, int[] rtreeFields, @@ -180,12 +184,13 @@ public class LSMRTreeUtils { ITreeIndexFrameFactory copyTupleLeafFrameFactory = new RTreeNSMLeafFrameFactory( rtreeLeafFrameCopyTupleWriterFactory, valueProviderFactories, rtreePolicyType, isPointMBR); - TreeIndexFactory<RTree> diskRTreeFactory = new RTreeFactory(ioManager, diskBufferCache, freePageManagerFactory, - rtreeInteriorFrameFactory, copyTupleLeafFrameFactory, rtreeCmpFactories, typeTraits.length, isPointMBR); + TreeIndexFactory<RTree> diskRTreeFactory = new RTreeFactory(ioManager, diskBufferCache, diskFileMapProvider, + freePageManagerFactory, rtreeInteriorFrameFactory, copyTupleLeafFrameFactory, rtreeCmpFactories, + typeTraits.length, isPointMBR); - TreeIndexFactory<RTree> bulkLoadRTreeFactory = - new RTreeFactory(ioManager, diskBufferCache, freePageManagerFactory, rtreeInteriorFrameFactory, - rtreeLeafFrameBulkLoadFactory, rtreeCmpFactories, typeTraits.length, isPointMBR); + TreeIndexFactory<RTree> bulkLoadRTreeFactory = new RTreeFactory(ioManager, diskBufferCache, diskFileMapProvider, + freePageManagerFactory, rtreeInteriorFrameFactory, rtreeLeafFrameBulkLoadFactory, rtreeCmpFactories, + typeTraits.length, isPointMBR); // The first field is for the sorted curve (e.g. Hilbert curve), and the // second field is for the primary key. @@ -214,20 +219,21 @@ public class LSMRTreeUtils { filterManager = new LSMComponentFilterManager(filterFrameFactory); } ILSMIndexFileManager fileNameManager = - new LSMRTreeWithAntiMatterTuplesFileManager(ioManager, file, diskRTreeFactory); + new LSMRTreeWithAntiMatterTuplesFileManager(ioManager, diskFileMapProvider, file, diskRTreeFactory); return new LSMRTreeWithAntiMatterTuples(ioManager, virtualBufferCaches, rtreeInteriorFrameFactory, rtreeLeafFrameFactory, btreeInteriorFrameFactory, btreeLeafFrameFactory, fileNameManager, diskRTreeFactory, bulkLoadRTreeFactory, filterHelper, filterFrameFactory, filterManager, - typeTraits.length, rtreeCmpFactories, btreeComparatorFactories, linearizerCmpFactory, comparatorFields, - linearizerArray, mergePolicy, opTracker, ioScheduler, ioOpCallback, rtreeFields, filterFields, durable, - isPointMBR); + diskFileMapProvider, typeTraits.length, rtreeCmpFactories, btreeComparatorFactories, + linearizerCmpFactory, comparatorFields, linearizerArray, mergePolicy, opTracker, ioScheduler, + ioOpCallback, rtreeFields, filterFields, durable, isPointMBR); } public static ExternalRTree createExternalRTree(IIOManager ioManager, FileReference file, - IBufferCache diskBufferCache, ITypeTraits[] typeTraits, IBinaryComparatorFactory[] rtreeCmpFactories, - IBinaryComparatorFactory[] btreeCmpFactories, IPrimitiveValueProviderFactory[] valueProviderFactories, - RTreePolicyType rtreePolicyType, double bloomFilterFalsePositiveRate, ILSMMergePolicy mergePolicy, - ILSMOperationTracker opTracker, ILSMIOOperationScheduler ioScheduler, ILSMIOOperationCallback ioOpCallback, + IBufferCache diskBufferCache, IFileMapProvider diskFileMapProvider, ITypeTraits[] typeTraits, + IBinaryComparatorFactory[] rtreeCmpFactories, IBinaryComparatorFactory[] btreeCmpFactories, + IPrimitiveValueProviderFactory[] valueProviderFactories, RTreePolicyType rtreePolicyType, + double bloomFilterFalsePositiveRate, ILSMMergePolicy mergePolicy, ILSMOperationTracker opTracker, + ILSMIOOperationScheduler ioScheduler, ILSMIOOperationCallback ioOpCallback, ILinearizeComparatorFactory linearizeCmpFactory, int[] buddyBTreeFields, boolean durable, boolean isPointMBR, IMetadataPageManagerFactory freePageManagerFactory) throws HyracksDataException { @@ -254,10 +260,12 @@ public class LSMRTreeUtils { valueProviderFactories, rtreePolicyType, isPointMBR); ITreeIndexFrameFactory btreeInteriorFrameFactory = new BTreeNSMInteriorFrameFactory(btreeTupleWriterFactory); ITreeIndexFrameFactory btreeLeafFrameFactory = new BTreeNSMLeafFrameFactory(btreeTupleWriterFactory); - TreeIndexFactory<RTree> diskRTreeFactory = new RTreeFactory(ioManager, diskBufferCache, freePageManagerFactory, - rtreeInteriorFrameFactory, rtreeLeafFrameFactory, rtreeCmpFactories, typeTraits.length, isPointMBR); - TreeIndexFactory<BTree> diskBTreeFactory = new BTreeFactory(ioManager, diskBufferCache, freePageManagerFactory, - btreeInteriorFrameFactory, btreeLeafFrameFactory, btreeCmpFactories, btreeTypeTraits.length); + TreeIndexFactory<RTree> diskRTreeFactory = new RTreeFactory(ioManager, diskBufferCache, diskFileMapProvider, + freePageManagerFactory, rtreeInteriorFrameFactory, rtreeLeafFrameFactory, rtreeCmpFactories, + typeTraits.length, isPointMBR); + TreeIndexFactory<BTree> diskBTreeFactory = + new BTreeFactory(ioManager, diskBufferCache, diskFileMapProvider, freePageManagerFactory, + btreeInteriorFrameFactory, btreeLeafFrameFactory, btreeCmpFactories, btreeTypeTraits.length); int[] comparatorFields = { 0 }; IBinaryComparatorFactory[] linearizerArray = { linearizeCmpFactory }; @@ -265,15 +273,17 @@ public class LSMRTreeUtils { for (int i = 0; i < btreeCmpFactories.length; i++) { bloomFilterKeyFields[i] = i; } - BloomFilterFactory bloomFilterFactory = new BloomFilterFactory(diskBufferCache, bloomFilterKeyFields); + BloomFilterFactory bloomFilterFactory = + new BloomFilterFactory(diskBufferCache, diskFileMapProvider, bloomFilterKeyFields); ILSMIndexFileManager fileNameManager = - new LSMRTreeFileManager(ioManager, file, diskRTreeFactory, diskBTreeFactory); - return new ExternalRTree(ioManager, rtreeInteriorFrameFactory, rtreeLeafFrameFactory, btreeInteriorFrameFactory, - btreeLeafFrameFactory, fileNameManager, diskRTreeFactory, diskBTreeFactory, bloomFilterFactory, - bloomFilterFalsePositiveRate, typeTraits.length, rtreeCmpFactories, btreeCmpFactories, - linearizeCmpFactory, comparatorFields, linearizerArray, mergePolicy, opTracker, ioScheduler, - ioOpCallback, buddyBTreeFields, durable, isPointMBR); + new LSMRTreeFileManager(ioManager, diskFileMapProvider, file, diskRTreeFactory, diskBTreeFactory); + ExternalRTree lsmTree = new ExternalRTree(ioManager, rtreeInteriorFrameFactory, rtreeLeafFrameFactory, + btreeInteriorFrameFactory, btreeLeafFrameFactory, fileNameManager, diskRTreeFactory, diskBTreeFactory, + bloomFilterFactory, bloomFilterFalsePositiveRate, diskFileMapProvider, typeTraits.length, + rtreeCmpFactories, btreeCmpFactories, linearizeCmpFactory, comparatorFields, linearizerArray, + mergePolicy, opTracker, ioScheduler, ioOpCallback, buddyBTreeFields, durable, isPointMBR); + return lsmTree; } public static ILinearizeComparatorFactory proposeBestLinearizer(ITypeTraits[] typeTraits, int numKeyFields) http://git-wip-us.apache.org/repos/asf/asterixdb/blob/d9000469/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/dataflow/RTreeResource.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/dataflow/RTreeResource.java b/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/dataflow/RTreeResource.java index df4fbf2..5dc0a4e 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/dataflow/RTreeResource.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/dataflow/RTreeResource.java @@ -59,8 +59,9 @@ public class RTreeResource implements IResource { public IIndex createInstance(INCServiceContext ctx) throws HyracksDataException { IIOManager ioManager = ctx.getIoManager(); FileReference resourceRef = ioManager.resolve(path); - return RTreeUtils.createRTree(storageManager.getBufferCache(ctx), typeTraits, valueProviderFactories, - comparatorFactories, rtreePolicyType, resourceRef, false, pageManagerFactory); + return RTreeUtils.createRTree(storageManager.getBufferCache(ctx), storageManager.getFileMapProvider(ctx), + typeTraits, valueProviderFactories, comparatorFactories, rtreePolicyType, resourceRef, false, + pageManagerFactory); } @Override http://git-wip-us.apache.org/repos/asf/asterixdb/blob/d9000469/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/impls/RTree.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/impls/RTree.java b/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/impls/RTree.java index 1750067..1160da7 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/impls/RTree.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/impls/RTree.java @@ -60,6 +60,7 @@ import org.apache.hyracks.storage.common.buffercache.BufferCache; import org.apache.hyracks.storage.common.buffercache.IBufferCache; import org.apache.hyracks.storage.common.buffercache.ICachedPage; import org.apache.hyracks.storage.common.file.BufferedFileHandle; +import org.apache.hyracks.storage.common.file.IFileMapProvider; public class RTree extends AbstractTreeIndex { @@ -69,10 +70,11 @@ public class RTree extends AbstractTreeIndex { private final int maxTupleSize; private final boolean isPointMBR; // used for reducing storage space to store point objects. - public RTree(IBufferCache bufferCache, IPageManager freePageManager, ITreeIndexFrameFactory interiorFrameFactory, - ITreeIndexFrameFactory leafFrameFactory, IBinaryComparatorFactory[] cmpFactories, int fieldCount, - FileReference file, boolean isPointMBR) { - super(bufferCache, freePageManager, interiorFrameFactory, leafFrameFactory, cmpFactories, fieldCount, file); + public RTree(IBufferCache bufferCache, IFileMapProvider fileMapProvider, IPageManager freePageManager, + ITreeIndexFrameFactory interiorFrameFactory, ITreeIndexFrameFactory leafFrameFactory, + IBinaryComparatorFactory[] cmpFactories, int fieldCount, FileReference file, boolean isPointMBR) { + super(bufferCache, fileMapProvider, freePageManager, interiorFrameFactory, leafFrameFactory, cmpFactories, + fieldCount, file); globalNsn = new AtomicLong(); ITreeIndexFrame leafFrame = leafFrameFactory.createFrame(); ITreeIndexFrame interiorFrame = interiorFrameFactory.createFrame(); @@ -99,7 +101,7 @@ public class RTree extends AbstractTreeIndex { public void printTree(int pageId, ICachedPage parent, boolean unpin, IRTreeLeafFrame leafFrame, IRTreeInteriorFrame interiorFrame, byte treeHeight, ISerializerDeserializer[] keySerdes, StringBuilder strBuilder, MultiComparator cmp) throws Exception { - ICachedPage node = bufferCache.pin(BufferedFileHandle.getDiskPageId(getFileId(), pageId), false); + ICachedPage node = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, pageId), false); node.acquireReadLatch(); try { if (parent != null && unpin == true) { @@ -169,7 +171,7 @@ public class RTree extends AbstractTreeIndex { while (true) { if (!writeLatched) { - node = bufferCache.pin(BufferedFileHandle.getDiskPageId(getFileId(), pageId), false); + node = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, pageId), false); ctx.getInteriorFrame().setPage(node); isLeaf = ctx.getInteriorFrame().isLeaf(); if (isLeaf) { @@ -227,7 +229,7 @@ public class RTree extends AbstractTreeIndex { readLatched = false; bufferCache.unpin(node); - node = bufferCache.pin(BufferedFileHandle.getDiskPageId(getFileId(), pageId), false); + node = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, pageId), false); node.acquireWriteLatch(); writeLatched = true; ctx.getInteriorFrame().setPage(node); @@ -343,8 +345,7 @@ public class RTree extends AbstractTreeIndex { case INSUFFICIENT_SPACE: { int rightPageId = freePageManager.takePage(ctx.getMetaFrame()); - ICachedPage rightNode = - bufferCache.pin(BufferedFileHandle.getDiskPageId(getFileId(), rightPageId), true); + ICachedPage rightNode = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, rightPageId), true); rightNode.acquireWriteLatch(); try { @@ -389,7 +390,7 @@ public class RTree extends AbstractTreeIndex { if (pageId == rootPage) { int newLeftId = freePageManager.takePage(ctx.getMetaFrame()); ICachedPage newLeftNode = - bufferCache.pin(BufferedFileHandle.getDiskPageId(getFileId(), newLeftId), true); + bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, newLeftId), true); newLeftNode.acquireWriteLatch(); succeeded = false; try { @@ -447,7 +448,7 @@ public class RTree extends AbstractTreeIndex { boolean succeeded = false; boolean writeLatched = false; int parentId = ctx.getPathList().getLastPageId(); - ICachedPage parentNode = bufferCache.pin(BufferedFileHandle.getDiskPageId(getFileId(), parentId), false); + ICachedPage parentNode = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, parentId), false); parentNode.acquireWriteLatch(); writeLatched = true; ctx.getInteriorFrame().setPage(parentNode); @@ -473,7 +474,7 @@ public class RTree extends AbstractTreeIndex { } parentId = rightPage; - parentNode = bufferCache.pin(BufferedFileHandle.getDiskPageId(getFileId(), parentId), false); + parentNode = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, parentId), false); parentNode.acquireWriteLatch(); writeLatched = true; ctx.getInteriorFrame().setPage(parentNode); @@ -527,7 +528,7 @@ public class RTree extends AbstractTreeIndex { pageId = ctx.getTraverseList().getFirstPageId(); parentIndex = ctx.getTraverseList().getFirstPageIndex(); - node = bufferCache.pin(BufferedFileHandle.getDiskPageId(getFileId(), pageId), false); + node = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, pageId), false); node.acquireReadLatch(); readLatched = true; ctx.getInteriorFrame().setPage(node); @@ -610,7 +611,7 @@ public class RTree extends AbstractTreeIndex { int pageId = ctx.getPathList().getLastPageId(); long parentLsn = ctx.getPathList().getLastPageLsn(); ctx.getPathList().moveLast(); - node = bufferCache.pin(BufferedFileHandle.getDiskPageId(getFileId(), pageId), false); + node = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, pageId), false); node.acquireReadLatch(); readLatched = true; ctx.getInteriorFrame().setPage(node); @@ -643,7 +644,7 @@ public class RTree extends AbstractTreeIndex { readLatched = false; bufferCache.unpin(node); - node = bufferCache.pin(BufferedFileHandle.getDiskPageId(getFileId(), pageId), false); + node = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, pageId), false); node.acquireWriteLatch(); writeLatched = true; ctx.getLeafFrame().setPage(node); @@ -713,7 +714,7 @@ public class RTree extends AbstractTreeIndex { ctx.setCursor(cursor); cursor.setBufferCache(bufferCache); - cursor.setFileId(getFileId()); + cursor.setFileId(fileId); ctx.getCursorInitialState().setRootPage(rootPage); ctx.getCursor().open(ctx.getCursorInitialState(), searchPred); } @@ -732,11 +733,11 @@ public class RTree extends AbstractTreeIndex { int currentPageId = bulkloadLeafStart; int maxPageId = freePageManager.getMaxPageId(ctx.getMetaFrame()); - ICachedPage page = bufferCache.pin(BufferedFileHandle.getDiskPageId(getFileId(), currentPageId), false); + ICachedPage page = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, currentPageId), false); page.acquireReadLatch(); try { cursor.setBufferCache(bufferCache); - cursor.setFileId(getFileId()); + cursor.setFileId(fileId); cursor.setCurrentPageId(currentPageId); cursor.setMaxPageId(maxPageId); ctx.getCursorInitialState().setOriginialKeyComparator(ctx.getCmp()); @@ -937,8 +938,8 @@ public class RTree extends AbstractTreeIndex { } pagesToWrite.clear(); - leafFrontier.page = bufferCache - .confiscatePage(BufferedFileHandle.getDiskPageId(getFileId(), leafFrontier.pageId)); + leafFrontier.page = + bufferCache.confiscatePage(BufferedFileHandle.getDiskPageId(fileId, leafFrontier.pageId)); leafFrame.setPage(leafFrontier.page); leafFrame.initBuffer((byte) 0); @@ -991,7 +992,7 @@ public class RTree extends AbstractTreeIndex { int finalPageId = freePageManager.takePage(metaFrame); n.pageId = finalPageId; - bufferCache.setPageDiskId(n.page, BufferedFileHandle.getDiskPageId(getFileId(), finalPageId)); + bufferCache.setPageDiskId(n.page, BufferedFileHandle.getDiskPageId(fileId, finalPageId)); //else we are looking at a leaf } //set next guide MBR @@ -1054,7 +1055,7 @@ public class RTree extends AbstractTreeIndex { } else { prevNodeFrontierPages.set(level, finalPageId); } - bufferCache.setPageDiskId(frontier.page, BufferedFileHandle.getDiskPageId(getFileId(), finalPageId)); + bufferCache.setPageDiskId(frontier.page, BufferedFileHandle.getDiskPageId(fileId, finalPageId)); pagesToWrite.add(frontier.page); lowerFrame = prevInteriorFrame; http://git-wip-us.apache.org/repos/asf/asterixdb/blob/d9000469/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/util/RTreeUtils.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/util/RTreeUtils.java b/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/util/RTreeUtils.java index 650b6a8..a8e668b 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/util/RTreeUtils.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-am-rtree/src/main/java/org/apache/hyracks/storage/am/rtree/util/RTreeUtils.java @@ -36,20 +36,23 @@ import org.apache.hyracks.storage.am.rtree.impls.RTree; import org.apache.hyracks.storage.am.rtree.tuples.RTreeTypeAwareTupleWriterFactory; import org.apache.hyracks.storage.common.MultiComparator; import org.apache.hyracks.storage.common.buffercache.IBufferCache; +import org.apache.hyracks.storage.common.file.IFileMapProvider; public class RTreeUtils { - public static RTree createRTree(IBufferCache bufferCache, ITypeTraits[] typeTraits, - IPrimitiveValueProviderFactory[] valueProviderFactories, IBinaryComparatorFactory[] cmpFactories, - RTreePolicyType rtreePolicyType, FileReference file, boolean isPointMBR, - IPageManagerFactory pageManagerFactory) { + public static RTree createRTree(IBufferCache bufferCache, IFileMapProvider fileMapProvider, + ITypeTraits[] typeTraits, IPrimitiveValueProviderFactory[] valueProviderFactories, + IBinaryComparatorFactory[] cmpFactories, RTreePolicyType rtreePolicyType, FileReference file, + boolean isPointMBR, IPageManagerFactory pageManagerFactory) { RTreeTypeAwareTupleWriterFactory tupleWriterFactory = new RTreeTypeAwareTupleWriterFactory(typeTraits); ITreeIndexFrameFactory interiorFrameFactory = new RTreeNSMInteriorFrameFactory(tupleWriterFactory, valueProviderFactories, rtreePolicyType, isPointMBR); - ITreeIndexFrameFactory leafFrameFactory = - new RTreeNSMLeafFrameFactory(tupleWriterFactory, valueProviderFactories, rtreePolicyType, isPointMBR); - return new RTree(bufferCache, pageManagerFactory.createPageManager(bufferCache), interiorFrameFactory, - leafFrameFactory, cmpFactories, typeTraits.length, file, isPointMBR); + ITreeIndexFrameFactory leafFrameFactory = new RTreeNSMLeafFrameFactory(tupleWriterFactory, + valueProviderFactories, rtreePolicyType, isPointMBR); + RTree rtree = new RTree(bufferCache, fileMapProvider, pageManagerFactory.createPageManager(bufferCache), + interiorFrameFactory, leafFrameFactory, + cmpFactories, typeTraits.length, file, isPointMBR); + return rtree; } // Creates a new MultiComparator by constructing new IBinaryComparators. http://git-wip-us.apache.org/repos/asf/asterixdb/blob/d9000469/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/IStorageManager.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/IStorageManager.java b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/IStorageManager.java index dfc2f41..68f4cbb 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/IStorageManager.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/IStorageManager.java @@ -22,6 +22,7 @@ import java.io.Serializable; import org.apache.hyracks.api.application.INCServiceContext; import org.apache.hyracks.storage.common.buffercache.IBufferCache; +import org.apache.hyracks.storage.common.file.IFileMapProvider; import org.apache.hyracks.storage.common.file.IResourceIdFactory; /** @@ -38,6 +39,13 @@ public interface IStorageManager extends Serializable { /** * @param ctx * the nc service context + * @return the file map provider {@link org.apache.hyracks.storage.common.file.IFileMapProvider} + */ + IFileMapProvider getFileMapProvider(INCServiceContext ctx); + + /** + * @param ctx + * the nc service context * @return the local resource repository {@link org.apache.hyracks.storage.am.common.build.ILocalResourceRepository} */ ILocalResourceRepository getLocalResourceRepository(INCServiceContext ctx);
