private void setPageInfo(CachedPage cPage) { buf.putInt(FRAME_MULTIPLIER_OFF, cPage.getFrameSizeMultiplier()); buf.putInt(EXTRA_BLOCK_PAGE_ID_OFF, cPage.getExtraBlockPageId()); }
/** * Write the CachedPage into disk * * @param cPage * CachedPage in {@link BufferCache} * @throws HyracksDataException */ public void write(CachedPage cPage) throws HyracksDataException { final int totalPages = cPage.getFrameSizeMultiplier(); final int extraBlockPageId = cPage.getExtraBlockPageId(); final BufferCacheHeaderHelper header = checkoutHeaderHelper(); write(cPage, header, totalPages, extraBlockPageId); }
private void readExtraPages(CachedPage cPage) throws HyracksDataException { final int totalPages = cPage.getFrameSizeMultiplier(); if (totalPages > 1) { pageReplacementStrategy.fixupCapacityOnLargeRead(cPage); cPage.getBuffer().position(bufferCache.getPageSize()); cPage.getBuffer().limit(totalPages * bufferCache.getPageSize()); readToBuffer(cPage.getBuffer(), getExtraPageOffset(cPage)); } }
private void readExtraPages(CachedPage cPage, ByteBuffer cBuffer) throws HyracksDataException { final ByteBuffer uBuffer = cPage.getBuffer(); final int totalPages = cPage.getFrameSizeMultiplier(); for (int i = 1; i < totalPages; i++) { fixBufferPointers(uBuffer, i); compressedFileManager.setExtraCompressedPageInfo(cPage, i - 1); if (cPage.getCompressedPageSize() < bufferCache.getPageSize()) { cBuffer.position(0); cBuffer.limit(cPage.getCompressedPageSize()); readToBuffer(cBuffer, getExtraPageOffset(cPage)); cBuffer.flip(); uncompressToPageBuffer(cBuffer, cPage.getBuffer()); } else { readToBuffer(uBuffer, getExtraPageOffset(cPage)); } } }
@Override public void read(CachedPage cPage) throws HyracksDataException { final BufferCacheHeaderHelper header = checkoutHeaderHelper(); try { compressedFileManager.setCompressedPageInfo(cPage); long bytesRead = readToBuffer(header.prepareRead(cPage.getCompressedPageSize()), getFirstPageOffset(cPage)); if (!verifyBytesRead(cPage.getCompressedPageSize(), bytesRead)) { return; } final ByteBuffer cBuffer = header.processHeader(cPage); final ByteBuffer uBuffer = cPage.getBuffer(); fixBufferPointers(uBuffer, 0); if (cPage.getCompressedPageSize() < bufferCache.getPageSizeWithHeader()) { uncompressToPageBuffer(cBuffer, uBuffer); } else { cPage.getBuffer().put(cBuffer); } final int totalPages = cPage.getFrameSizeMultiplier(); if (totalPages > 1) { pageReplacementStrategy.fixupCapacityOnLargeRead(cPage); readExtraPages(cPage, cBuffer); } } finally { returnHeaderHelper(header); } }