@Override public int toStream(byte[] content, int offset) { offset = super.toStream(content, offset); OLongSerializer.INSTANCE.serializeNative(pageIndex, content, offset); offset += OLongSerializer.LONG_SIZE; OLongSerializer.INSTANCE.serializeNative(fileId, content, offset); offset += OLongSerializer.LONG_SIZE; return offset; }
@Override public int toStream(final byte[] content, int offset) { OIntegerSerializer.INSTANCE.serializeNative(dirtyPages.size(), content, offset); offset += OIntegerSerializer.INT_SIZE; for (ODirtyPage dirtyPage : dirtyPages) { OLongSerializer.INSTANCE.serializeNative(dirtyPage.getPageIndex(), content, offset); offset += OLongSerializer.LONG_SIZE; stringSerializer.serializeNativeObject(dirtyPage.getFileName(), content, offset); offset += stringSerializer.getObjectSize(dirtyPage.getFileName()); OLongSerializer.INSTANCE.serializeNative(dirtyPage.getLsn().getSegment(), content, offset); offset += OLongSerializer.LONG_SIZE; OLongSerializer.INSTANCE.serializeNative(dirtyPage.getLsn().getPosition(), content, offset); offset += OLongSerializer.LONG_SIZE; } return offset; }
@Override public int toStream(byte[] content, int offset) { offset = super.toStream(content, offset); OStringSerializer.INSTANCE.serializeNativeObject(fileName, content, offset); offset += OStringSerializer.INSTANCE.getObjectSize(fileName); OLongSerializer.INSTANCE.serializeNative(fileId, content, offset); offset += OLongSerializer.LONG_SIZE; return offset; }
private void flushPage(long fileId, long pageIndex, ODirectMemoryPointer dataPointer) throws IOException { if (writeAheadLog != null) { OLogSequenceNumber lsn = ODurablePage.getLogSequenceNumberFromPage(dataPointer); OLogSequenceNumber flushedLSN = writeAheadLog.getFlushedLSN(); if (flushedLSN == null || flushedLSN.compareTo(lsn) < 0) writeAheadLog.flush(); } final byte[] content = dataPointer.get(0, pageSize); OLongSerializer.INSTANCE.serializeNative(MAGIC_NUMBER, content, 0); final int crc32 = calculatePageCrc(content); OIntegerSerializer.INSTANCE.serializeNative(crc32, content, OLongSerializer.LONG_SIZE); final OFileClassic fileClassic = files.get(fileId); fileClassic.write(pageIndex * pageSize, content); if (syncOnPageFlush) fileClassic.synch(); }