private void persistFrontiers(int level, int rightPage) throws HyracksDataException { if (level >= nodeFrontiers.size()) { rootPage = nodeFrontiers.get(level - 1).pageId; releasedLatches = true; return; } if (level < 1) { ICachedPage lastLeaf = nodeFrontiers.get(level).page; int lastLeafPage = nodeFrontiers.get(level).pageId; lastLeaf.setDiskPageId(BufferedFileHandle.getDiskPageId(getFileId(), nodeFrontiers.get(level).pageId)); putInQueue(lastLeaf); nodeFrontiers.get(level).page = null; persistFrontiers(level + 1, lastLeafPage); return; } NodeFrontier frontier = nodeFrontiers.get(level); interiorFrame.setPage(frontier.page); //just finalize = the layer right above the leaves has correct righthand pointers already if (rightPage < 0) { throw new HyracksDataException( "Error in index creation. Internal node appears to have no rightmost guide"); } ((IBTreeInteriorFrame) interiorFrame).setRightmostChildPageId(rightPage); int finalPageId = freePageManager.takePage(metaFrame); frontier.page.setDiskPageId(BufferedFileHandle.getDiskPageId(getFileId(), finalPageId)); putInQueue(frontier.page); frontier.pageId = finalPageId; persistFrontiers(level + 1, finalPageId); }
prevPageId); int finalPageId = freePageManager.takePage(metaFrame); n.pageId = finalPageId; n.page.setDiskPageId(BufferedFileHandle.getDiskPageId(getFileId(), finalPageId));
leafFrontier.pageId = freePageManager.takePage(metaFrame);
if (spaceForTwoTuples != FrameOpSpaceStatus.SUFFICIENT_CONTIGUOUS_SPACE && !toRoot) { int finalPageId = freePageManager.takePage(metaFrame); if (prevNodeFrontierPages.size() <= level) { prevNodeFrontierPages.add(finalPageId);
public AbstractTreeIndexBulkLoader(float fillFactor) throws HyracksDataException { leafFrame = leafFrameFactory.createFrame(); interiorFrame = interiorFrameFactory.createFrame(); metaFrame = freePageManager.createMetadataFrame(); queue = bufferCache.createFIFOQueue(); if (!isEmptyTree(leafFrame)) { throw HyracksDataException.create(ErrorCode.CANNOT_BULK_LOAD_NON_EMPTY_TREE); } this.cmp = MultiComparator.create(cmpFactories); leafFrame.setMultiComparator(cmp); interiorFrame.setMultiComparator(cmp); tupleWriter = leafFrame.getTupleWriter(); NodeFrontier leafFrontier = new NodeFrontier(leafFrame.createTupleReference()); leafFrontier.pageId = freePageManager.takePage(metaFrame); leafFrontier.page = bufferCache.confiscatePage(BufferedFileHandle.getDiskPageId(fileId, leafFrontier.pageId)); interiorFrame.setPage(leafFrontier.page); interiorFrame.initBuffer((byte) 0); interiorMaxBytes = (int) (interiorFrame.getBuffer().capacity() * fillFactor); leafFrame.setPage(leafFrontier.page); leafFrame.initBuffer((byte) 0); leafMaxBytes = (int) (leafFrame.getBuffer().capacity() * fillFactor); slotSize = leafFrame.getSlotSize(); nodeFrontiers.add(leafFrontier); pagesToWrite = new ArrayList<>(); compressedPageWriter = bufferCache.getCompressedPageWriter(fileId); }
int finalPageId = freePageManager.takePage(metaFrame); frontier.page.setDiskPageId(BufferedFileHandle.getDiskPageId(getFileId(), finalPageId)); pagesToWrite.add(frontier.page);
int rightPageId = freePageManager.takePage(ctx.getMetaFrame()); ICachedPage rightNode = bufferCache.pin(BufferedFileHandle.getDiskPageId(getFileId(), rightPageId), true); rightNode.acquireWriteLatch();
leafFrontier.pageId = freePageManager.takePage(metaFrame);
int rightPageId = freePageManager.takePage(ctx.getMetaFrame()); ICachedPage rightNode = bufferCache.pin(BufferedFileHandle.getDiskPageId(getFileId(), rightPageId), true); int newLeftId = freePageManager.takePage(ctx.getMetaFrame()); ICachedPage newLeftNode = bufferCache.pin(BufferedFileHandle.getDiskPageId(getFileId(), newLeftId), true);
leftNode.acquireWriteLatch(); try { int newLeftId = freePageManager.takePage(ctx.getMetaFrame()); ICachedPage newLeftNode = bufferCache.pin(BufferedFileHandle.getDiskPageId(getFileId(), newLeftId), true); newLeftNode.acquireWriteLatch();
switch (spaceStatus) { case INSUFFICIENT_SPACE: { int rightPageId = freePageManager.takePage(ctx.getMetaFrame()); ICachedPage rightNode = bufferCache.pin(BufferedFileHandle.getDiskPageId(getFileId(), rightPageId), true);