@Test public void preallocate() { WriteAheadLog wal = new WriteAheadLog(null); wal.open(WriteAheadLog.NOREPLAY); wal.startNextFile(); wal.walPutPreallocate(111111L); wal.seal(); final AtomicInteger c = new AtomicInteger(); wal.replayWAL( new WriteAheadLog.WALReplay() { @Override public void beforeReplayStart() {} @Override public void afterReplayFinished() {} @Override public void writeLong(long offset, long value) { fail(); } @Override public void writeRecord(long recid, long walId, Volume vol, long volOffset, int length) { fail(); } @Override public void writeByteArray( long offset, long walId, Volume vol, long volOffset, int length) { fail(); } @Override public void commit() { fail(); } @Override public void rollback() { fail(); } @Override public void writeTombstone(long recid) { fail(); } @Override public void writePreallocate(long recid) { c.incrementAndGet(); assertEquals(111111L, recid); } }); assertEquals(1, c.get()); }
@Test public void commit() { WriteAheadLog wal = new WriteAheadLog(null); wal.open(WriteAheadLog.NOREPLAY); wal.walPutLong(111L, 1111L); wal.commit(); wal.seal(); wal.replayWAL( new WALSequence( new Object[] {WALSequence.beforeReplayStart}, new Object[] {WALSequence.writeLong, 111L, 1111L}, new Object[] {WALSequence.commit})); }
@Test public void rollback() { WriteAheadLog wal = new WriteAheadLog(null); wal.open(WriteAheadLog.NOREPLAY); wal.startNextFile(); wal.walPutLong(111L, 1000); wal.rollback(); wal.seal(); wal.replayWAL( new WALSequence( new Object[] {WALSequence.beforeReplayStart}, new Object[] {WALSequence.writeLong, 111L, 1000L}, new Object[] {WALSequence.rollback})); }
void testRecord(final long recid, final byte[] data) { WriteAheadLog wal = new WriteAheadLog(null); wal.open(WriteAheadLog.NOREPLAY); wal.startNextFile(); final AtomicBoolean called = new AtomicBoolean(); final long pointer = wal.walPutRecord(recid, data, 0, data == null ? 0 : data.length); for (int i = 0; i < 1; i++) { byte[] val = wal.walGetRecord(pointer, recid); if (data == null) assertNull(val); else assertTrue(Arrays.equals(data, val)); wal.seal(); } WriteAheadLog.WALReplay r = new WriteAheadLog.WALReplay() { @Override public void beforeReplayStart() {} @Override public void afterReplayFinished() {} @Override public void writeLong(long offset, long value) { fail(); } @Override public void writeRecord(long recid2, long walId, Volume vol, long volOffset, int length) { assertFalse(called.getAndSet(true)); assertEquals(recid, recid2); if (data == null) { assertNull(vol); assertEquals(walId, 0); assertEquals(volOffset, 0); assertEquals(length, 0); } else { byte[] data = new byte[length]; vol.getData(volOffset, data, 0, data.length); assertTrue(Arrays.equals(data, data)); assertEquals(pointer, walId); } } @Override public void writeByteArray( long offset2, long walId, Volume vol, long volOffset, int length) { fail(); } @Override public void commit() { fail(); } @Override public void rollback() { fail(); } @Override public void writeTombstone(long recid) { fail(); } @Override public void writePreallocate(long recid) { fail(); } }; wal.replayWAL(r); assertTrue(called.get()); }