private void releasePage() throws HyracksDataException { if (exclusiveLatchNodes) { page.releaseWriteLatch(isPageDirty); } else { page.releaseReadLatch(); } bufferCache.unpin(page); }
protected void releasePage() throws HyracksDataException { if (exclusiveLatchNodes) { page.releaseWriteLatch(isPageDirty); } else { page.releaseReadLatch(); } bufferCache.unpin(page); }
@Override public void setRootPageId(int rootPage) throws HyracksDataException { ITreeIndexMetadataFrame metaFrame = frameFactory.createFrame(); confiscatedPage.acquireWriteLatch(); try { metaFrame.setPage(confiscatedPage); metaFrame.setRootPageId(rootPage); } finally { confiscatedPage.releaseWriteLatch(false); } ready = true; }
@Override public void put(ITreeIndexMetadataFrame frame, IValueReference key, IValueReference value) throws HyracksDataException { if (confiscatedPage == null) { throw HyracksDataException.create(ErrorCode.ILLEGAL_WRITE_AFTER_FLUSH_ATTEMPT); } confiscatedPage.acquireWriteLatch(); try { frame.setPage(confiscatedPage); frame.put(key, value); } finally { confiscatedPage.releaseWriteLatch(false); } }
@Override public void init(ITreeIndexFrameFactory interiorFrameFactory, ITreeIndexFrameFactory leafFrameFactory) throws HyracksDataException { currentPageId.set(1); ICachedPage page = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, 0), true); page.acquireWriteLatch(); page.releaseWriteLatch(false); bufferCache.unpin(page); page = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, currentPageId.get()), true); if (leafFrameFactory != null) { page.acquireWriteLatch(); ITreeIndexFrame leafFrame = leafFrameFactory.createFrame(); leafFrame.setPage(page); leafFrame.initBuffer((byte) 0); page.releaseWriteLatch(true); } bufferCache.unpin(page); }
@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; } }
nextNode.releaseWriteLatch(true); bufferCache.unpin(nextNode); confiscatedPage.releaseWriteLatch(false);
metaFrame.addFreePage(freePageNum); } finally { newNode.releaseWriteLatch(true); bufferCache.unpin(newNode); metaPage.releaseWriteLatch(true); bufferCache.unpin(metaPage);
metaFrame.addFreePage(freePageNum); } finally { newNode.releaseWriteLatch(true); bufferCache.unpin(newNode); metaPage.releaseWriteLatch(true); bufferCache.unpin(metaPage);
nextNode.releaseWriteLatch(true); bufferCache.unpin(nextNode); metaNode.releaseWriteLatch(true); bufferCache.unpin(metaNode);
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 void unsetSmPages(BTreeOpContext ctx) throws HyracksDataException { ICachedPage originalPage = ctx.getInteriorFrame().getPage(); for (int i = 0; i < ctx.getSmPages().size(); i++) { int pageId = ctx.getSmPages().get(i); ICachedPage smPage = bufferCache.pin(BufferedFileHandle.getDiskPageId(getFileId(), pageId), false); smPage.acquireWriteLatch(); try { ctx.getInteriorFrame().setPage(smPage); ctx.getInteriorFrame().setSmFlag(false); } finally { smPage.releaseWriteLatch(true); bufferCache.unpin(smPage); } } if (ctx.getSmPages().size() > 0) { if (ctx.getSmoCount() == Integer.MAX_VALUE) { smoCounter.set(0); } else { smoCounter.incrementAndGet(); } treeLatch.writeLock().unlock(); ctx.getSmPages().clear(); } ctx.getInteriorFrame().setPage(originalPage); }
@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 void delete(ITupleReference tuple, RTreeOpContext ctx) throws HyracksDataException { ctx.reset(); ctx.setTuple(tuple); ctx.getSplitKey().reset(); ctx.getSplitKey().getLeftTuple().setFieldCount(cmpFactories.length); // We delete the first matching tuple (including the payload data). // We don't update the MBRs of the parents after deleting the record. int tupleIndex = findTupleToDelete(ctx); if (tupleIndex != -1) { try { deleteTuple(tupleIndex, ctx); } finally { ctx.getLeafFrame().getPage().releaseWriteLatch(true); bufferCache.unpin(ctx.getLeafFrame().getPage()); } } }
metaFrame.setMaxPage(1); } finally { metaNode.releaseWriteLatch(true); bufferCache.flush(metaNode); bufferCache.unpin(metaNode); leafFrame.initBuffer((byte) 0); } finally { rootNode.releaseWriteLatch(true); bufferCache.flush(rootNode); bufferCache.unpin(rootNode);
throw e; } finally { rightNode.releaseWriteLatch(true); bufferCache.unpin(rightNode);
newLeftNode.releaseWriteLatch(true); bufferCache.unpin(newLeftNode); leftNode.releaseWriteLatch(true); bufferCache.unpin(leftNode);
ctx.getInteriorFrame().setPage(node); ctx.getInteriorFrame().setPageLsn(incrementGlobalNsn()); node.releaseWriteLatch(true); bufferCache.unpin(node);
@Override public void close(IPageWriteFailureCallback callback) throws HyracksDataException { if (ready) { IFIFOPageQueue queue = bufferCache.createFIFOQueue(); ITreeIndexMetadataFrame metaFrame = frameFactory.createFrame(); confiscatedPage.acquireWriteLatch(); try { metaFrame.setPage(confiscatedPage); metaFrame.setValid(true); } finally { confiscatedPage.releaseWriteLatch(false); } int finalMetaPage = getMaxPageId(metaFrame) + 1; confiscatedPage.setDiskPageId(BufferedFileHandle.getDiskPageId(fileId, finalMetaPage)); final ICompressedPageWriter compressedPageWriter = bufferCache.getCompressedPageWriter(fileId); compressedPageWriter.prepareWrite(confiscatedPage); // WARNING: flushing the metadata page should be done after releasing the write latch; otherwise, the page // won't be flushed to disk because it won't be dirty until the write latch has been released. queue.put(confiscatedPage, callback); bufferCache.finishQueue(); compressedPageWriter.endWriting(); metadataPage = getMetadataPageId(); ready = false; } else if (confiscatedPage != null) { bufferCache.returnPage(confiscatedPage, false); } confiscatedPage = null; }
rightNode.releaseWriteLatch(true); bufferCache.unpin(rightNode);