@Override public ICachedPage pin(long dpid, boolean newPage) throws HyracksDataException { ICachedPage page = bufferCache.pin(dpid, newPage); pinCount.addAndGet(1); return page; }
@Override protected ICachedPage acquireNextPage() throws HyracksDataException { ICachedPage nextPage = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, currentPageId), false); return nextPage; }
@Override protected ICachedPage acquirePage(int pageId) throws HyracksDataException { return bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, pageId), false); }
public synchronized void pinAllPages() throws HyracksDataException { if (pinCount == 0) { // first time pin if (pages == null) { pages = new ICachedPage[numPages]; } for (int i = 0; i < numPages; i++) { pages[i] = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, i + 1), false); } pagesPinned = true; } pinCount++; }
private ICachedPage pinPage() throws HyracksDataException { return confiscatedPage == null ? bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, getMetadataPageId()), false) : confiscatedPage; }
protected ICachedPage acquireNextPage() throws HyracksDataException { ICachedPage nextPage = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, currentPageId), false); nextPage.acquireReadLatch(); return nextPage; } }
private ICachedPage pinAndGetPage(int compressedPageId) throws HyracksDataException { final int pageId = compressedPageId * ENTRY_LENGTH / bufferCache.getPageSize(); return bufferCache.pin(getDiskPageId(pageId), false); }
/** * Loads one page from the inverted list into the buffer cache. */ @Override public void loadPages() throws HyracksDataException { if (currentPageId == endPageId) { // inverted list exhausted, return return; } currentPageId++; if (pinned && pinnedPageId == currentPageId) { // already pinned, return return; } unloadPages(); page = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, currentPageId), false); pinnedPageId = currentPageId; pinned = true; }
protected ICachedPage acquirePage(int pageId) throws HyracksDataException { ICachedPage nextPage = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, pageId), false); if (exclusiveLatchNodes) { nextPage.acquireWriteLatch(); } else { nextPage.acquireReadLatch(); } return nextPage; } }
@Override public boolean doHasNext() throws HyracksDataException { if (numTuples <= currentTupleIndex) { return false; } // We don't latch pages since this code is only used by flush () before // bulk-loading the r-tree to disk and flush is not concurrent. // ICachedPage node1 = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, tPointers[currentTupleIndex * 2]), false); try { leafFrame1.setPage(node1); frameTuple1.resetByTupleOffset(leafFrame1.getBuffer().array(), tPointers[currentTupleIndex * 2 + 1]); } finally { bufferCache.unpin(node1); } return true; }
public byte getTreeHeight(ITreeIndexFrame frame) throws HyracksDataException { ICachedPage rootNode = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, rootPage), false); rootNode.acquireReadLatch(); try { frame.setPage(rootNode); return frame.getLevel(); } finally { rootNode.releaseReadLatch(); bufferCache.unpin(rootNode); } }
@Override public boolean isEmpty(ITreeIndexFrame frame, int rootPage) throws HyracksDataException { ICachedPage rootNode = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, rootPage), false); rootNode.acquireReadLatch(); try { frame.setPage(rootNode); return frame.getLevel() == 0 && frame.getTupleCount() == 0; } finally { rootNode.releaseReadLatch(); bufferCache.unpin(rootNode); } }
@Override public boolean isEmpty(ITreeIndexFrame frame, int rootPage) throws HyracksDataException { ICachedPage rootNode = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, rootPage), false); rootNode.acquireReadLatch(); try { frame.setPage(rootNode); return frame.getLevel() == 0 && frame.getTupleCount() == 0; } finally { rootNode.releaseReadLatch(); bufferCache.unpin(rootNode); } } }
@Override public void setRootPageId(int rootPage) throws HyracksDataException { ICachedPage metaNode = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, getMetadataPageId()), false); ITreeIndexMetadataFrame metaFrame = frameFactory.createFrame(); metaNode.acquireWriteLatch(); try { metaFrame.setPage(metaNode); metaFrame.setRootPageId(rootPage); } finally { metaNode.releaseWriteLatch(true); bufferCache.unpin(metaNode); ready = true; } }
@Override public int getRootPageId() throws HyracksDataException { ICachedPage metaNode; metaNode = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, getMetadataPageId()), false); ITreeIndexMetadataFrame metaFrame = frameFactory.createFrame(); metaNode.acquireReadLatch(); try { metaFrame.setPage(metaNode); return metaFrame.getRootPageId(); } finally { metaNode.releaseReadLatch(); bufferCache.unpin(metaNode); } }
@Override public int getRootPageId() throws HyracksDataException { ICachedPage metaNode; if (confiscatedPage == null) { metaNode = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, getMetadataPageId()), false); } else { metaNode = confiscatedPage; } ITreeIndexMetadataFrame metaFrame = frameFactory.createFrame(); metaNode.acquireReadLatch(); try { metaFrame.setPage(metaNode); return metaFrame.getRootPageId(); } finally { metaNode.releaseReadLatch(); if (confiscatedPage == null) { bufferCache.unpin(metaNode); } } }
@Override public long getFileOffset(ITreeIndexMetadataFrame frame, IValueReference key) throws HyracksDataException { int metadataPageNum = getMetadataPageId(); if (metadataPageNum != IBufferCache.INVALID_PAGEID) { ICachedPage metaNode = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, getMetadataPageId()), false); metaNode.acquireReadLatch(); try { frame.setPage(metaNode); return ((long) metadataPageNum * bufferCache.getPageSizeWithHeader()) + frame.getOffset(key); } finally { metaNode.releaseReadLatch(); bufferCache.unpin(metaNode); } } return -1; } }
private void fetchNextLeafPage(int nextLeafPage) throws HyracksDataException { do { ICachedPage nextLeaf = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, nextLeafPage), false); if (exclusiveLatchNodes) { nextLeaf.acquireWriteLatch(); page.releaseWriteLatch(isPageDirty); } else { nextLeaf.acquireReadLatch(); page.releaseReadLatch(); } bufferCache.unpin(page); page = nextLeaf; isPageDirty = false; frame.setPage(page); nextLeafPage = frame.getNextLeaf(); } while (frame.getTupleCount() == 0 && nextLeafPage > 0); }
@Override public void close(IPageWriteFailureCallback callback) throws HyracksDataException { if (ready) { ICachedPage metaNode = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, getMetadataPageId()), false); ITreeIndexMetadataFrame metaFrame = frameFactory.createFrame(); metaNode.acquireWriteLatch(); try { metaFrame.setPage(metaNode); metaFrame.setValid(true); } finally { metaNode.releaseWriteLatch(true); bufferCache.flush(metaNode); bufferCache.unpin(metaNode); ready = true; } ready = false; } }
private ICachedPage isConsistent(int pageId, BTreeOpContext ctx) throws Exception { ICachedPage node = bufferCache.pin(BufferedFileHandle.getDiskPageId(getFileId(), pageId), false); node.acquireReadLatch(); ctx.getInteriorFrame().setPage(node); boolean isConsistent = ctx.getPageLsns().getLast() == ctx.getInteriorFrame().getPageLsn(); if (!isConsistent) { node.releaseReadLatch(); bufferCache.unpin(node); return null; } return node; }