@Override
protected void write(CachedPage cPage, BufferCacheHeaderHelper header, int totalPages, int extraBlockPageId)
throws HyracksDataException {
final ByteBuffer buf = cPage.getBuffer();
final boolean contiguousLargePages = getPageId(cPage.getDiskPageId()) + 1 == extraBlockPageId;
long bytesWritten;
try {
buf.limit(contiguousLargePages ? bufferCache.getPageSize() * totalPages : bufferCache.getPageSize());
buf.position(0);
bytesWritten = writeToFile(header.prepareWrite(cPage), getFirstPageOffset(cPage));
} finally {
returnHeaderHelper(header);
}
if (totalPages > 1 && !contiguousLargePages) {
buf.limit(totalPages * bufferCache.getPageSize());
bytesWritten += writeToFile(buf, getExtraPageOffset(cPage));
}
final int expectedWritten = bufferCache.getPageSizeWithHeader() + bufferCache.getPageSize() * (totalPages - 1);
verifyBytesWritten(expectedWritten, bytesWritten);
}