@Override public void doDestroy() throws HyracksDataException { if (readLatched) { page.releaseReadLatch(); bufferCache.unpin(page); readLatched = false; } tupleIndex = 0; tupleIndexInc = 0; page = null; pathList = null; }
protected void releasePage() throws HyracksDataException { if (page != null) { page.releaseReadLatch(); bufferCache.unpin(page); page = null; } }
protected void releasePage() throws HyracksDataException { if (exclusiveLatchNodes) { page.releaseWriteLatch(isPageDirty); } else { page.releaseReadLatch(); } bufferCache.unpin(page); }
private void releasePage() throws HyracksDataException { if (exclusiveLatchNodes) { page.releaseWriteLatch(isPageDirty); } else { page.releaseReadLatch(); } bufferCache.unpin(page); }
private boolean legacyContains(long[] hashes) throws HyracksDataException { for (int i = 0; i < numHashes; ++i) { long hash = Math.abs((hashes[0] + i * hashes[1]) % numBits); // we increment the page id by one, since the metadata page id of the filter is 0. ICachedPage page = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, (int) (hash / numBitsPerPage) + 1), false); page.acquireReadLatch(); try { ByteBuffer buffer = page.getBuffer(); int byteIndex = (int) (hash % numBitsPerPage) >> 3; // divide by 8 byte b = buffer.get(byteIndex); int bitIndex = (int) (hash % numBitsPerPage) & 0x07; // mod 8 if (!((b & (1L << bitIndex)) != 0)) { return false; } } finally { page.releaseReadLatch(); bufferCache.unpin(page); } } return true; }
private void readBloomFilterMetaData() throws HyracksDataException { if (bufferCache.getNumPagesOfFile(fileId) == 0) { numPages = 0; numHashes = 0; numElements = 0; numBits = 0; version = DEFAULT_BLOOM_FILTER_VERSION; return; } ICachedPage metaPage = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, METADATA_PAGE_ID), false); metaPage.acquireReadLatch(); try { numPages = metaPage.getBuffer().getInt(NUM_PAGES_OFFSET); numHashes = metaPage.getBuffer().getInt(NUM_HASHES_USED_OFFSET); numElements = metaPage.getBuffer().getLong(NUM_ELEMENTS_OFFSET); numBits = metaPage.getBuffer().getLong(NUM_BITS_OFFSET); version = metaPage.getBuffer().getInt(VERSION_OFFSET); } finally { metaPage.releaseReadLatch(); bufferCache.unpin(metaPage); } }
@Override public void get(ITreeIndexMetadataFrame frame, IValueReference key, IPointable value) throws HyracksDataException { ICachedPage page = pinPage(); page.acquireReadLatch(); try { frame.setPage(page); frame.get(key, value); } finally { page.releaseReadLatch(); unpinPage(page); } }
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 int getMaxPageId(ITreeIndexMetadataFrame metaFrame) throws HyracksDataException { ICachedPage metaNode; int mdPage = getMetadataPageId(); if (mdPage < 0) { return IBufferCache.INVALID_PAGEID; } metaNode = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, mdPage), false); metaNode.acquireReadLatch(); int maxPage = -1; try { metaFrame.setPage(metaNode); maxPage = metaFrame.getMaxPage(); } finally { metaNode.releaseReadLatch(); bufferCache.unpin(metaNode); } return maxPage; }
@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 long getFileOffset(ITreeIndexMetadataFrame frame, IValueReference key) throws HyracksDataException { int pageId = getMetadataPageId(); if (pageId != IBufferCache.INVALID_PAGEID) { ICachedPage page = pinPage(); page.acquireReadLatch(); try { frame.setPage(page); int inPageOffset = frame.getOffset(key); return inPageOffset >= 0 ? ((long) pageId * bufferCache.getPageSizeWithHeader()) + frame.getOffset(key) + IBufferCache.RESERVED_HEADER_BYTES : -1L; } finally { page.releaseReadLatch(); unpinPage(page); } } return -1L; } }
@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); }
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; }
this.page.releaseReadLatch(); readLatched = false; bufferCache.unpin(this.page);
private void diskOrderScan(ITreeIndexCursor icursor, RTreeOpContext ctx) throws HyracksDataException { TreeIndexDiskOrderScanCursor cursor = (TreeIndexDiskOrderScanCursor) icursor; ctx.reset(); MultiComparator cmp = MultiComparator.create(cmpFactories); SearchPredicate searchPred = new SearchPredicate(null, cmp); int currentPageId = bulkloadLeafStart; int maxPageId = freePageManager.getMaxPageId(ctx.getMetaFrame()); ICachedPage page = bufferCache.pin(BufferedFileHandle.getDiskPageId(getFileId(), currentPageId), false); page.acquireReadLatch(); try { cursor.setBufferCache(bufferCache); cursor.setFileId(getFileId()); cursor.setCurrentPageId(currentPageId); cursor.setMaxPageId(maxPageId); ctx.getCursorInitialState().setOriginialKeyComparator(ctx.getCmp()); ctx.getCursorInitialState().setPage(page); cursor.open(ctx.getCursorInitialState(), searchPred); } catch (Exception e) { page.releaseReadLatch(); bufferCache.unpin(page); throw HyracksDataException.create(e); } }
private void diskOrderScan(ITreeIndexCursor icursor, BTreeOpContext ctx) throws HyracksDataException { TreeIndexDiskOrderScanCursor cursor = (TreeIndexDiskOrderScanCursor) icursor; ctx.reset(); RangePredicate diskOrderScanPred = new RangePredicate(null, null, true, true, ctx.getCmp(), ctx.getCmp()); int maxPageId = freePageManager.getMaxPageId(ctx.getMetaFrame()); int currentPageId = bulkloadLeafStart; ICachedPage page = bufferCache.pin(BufferedFileHandle.getDiskPageId(getFileId(), currentPageId), false); page.acquireReadLatch(); try { cursor.setBufferCache(bufferCache); cursor.setFileId(getFileId()); cursor.setCurrentPageId(currentPageId); cursor.setMaxPageId(maxPageId); ctx.getCursorInitialState().setPage(page); ctx.getCursorInitialState().setSearchOperationCallback(ctx.getSearchCallback()); ctx.getCursorInitialState().setOriginialKeyComparator(ctx.getCmp()); cursor.open(ctx.getCursorInitialState(), diskOrderScanPred); } catch (Exception e) { page.releaseReadLatch(); bufferCache.unpin(page); throw HyracksDataException.create(e); } }