public static void markAsValid(ITreeIndex treeIndex, boolean forceToDisk, IPageWriteFailureCallback callback) throws HyracksDataException { int fileId = treeIndex.getFileId(); IBufferCache bufferCache = treeIndex.getBufferCache(); treeIndex.getPageManager().close(callback); if (callback.hasFailed()) { throw HyracksDataException.create(callback.getFailure()); } // Force modified metadata page to disk. // If the index is not durable, then the flush is not necessary. if (forceToDisk) { bufferCache.force(fileId, true); } }
protected TreeIndexState isValidTreeIndex(ITreeIndex treeIndex) throws HyracksDataException { IBufferCache bufferCache = treeIndex.getBufferCache(); treeIndex.activate(); try { int metadataPage = treeIndex.getPageManager().getMetadataPageId(); if (metadataPage < 0) { return TreeIndexState.INVALID; } ITreeIndexMetadataFrame metadataFrame = treeIndex.getPageManager().createMetadataFrame(); ICachedPage page = bufferCache.pin(BufferedFileHandle.getDiskPageId(treeIndex.getFileId(), metadataPage), false); page.acquireReadLatch(); try { metadataFrame.setPage(page); if (!metadataFrame.isValid()) { return TreeIndexState.INVALID; } else if (metadataFrame.getVersion() != ITreeIndexFrame.Constants.VERSION) { return TreeIndexState.VERSION_MISMATCH; } else { return TreeIndexState.VALID; } } finally { page.releaseReadLatch(); bufferCache.unpin(page); } } finally { treeIndex.deactivate(); } }