use of org.neo4j.kernel.impl.transaction.log.LogPositionMarker in project neo4j by neo4j.
the class TransactionLogsRecoveryTest method shouldTruncateLogAfterSinglePartialTransaction.
@Test
void shouldTruncateLogAfterSinglePartialTransaction() throws Exception {
// GIVEN
Path file = logFiles.getLogFile().getLogFileForVersion(logVersion);
final LogPositionMarker marker = new LogPositionMarker();
writeSomeData(file, pair -> {
LogEntryWriter writer = pair.first();
Consumer<LogPositionMarker> consumer = pair.other();
// incomplete tx
// <-- marker has the last good position
consumer.accept(marker);
writer.writeStartEntry(5L, 4L, 0, new byte[0]);
return true;
});
// WHEN
boolean recoveryRequired = recover(storeDir, logFiles);
// THEN
assertTrue(recoveryRequired);
assertEquals(marker.getByteOffset(), Files.size(file));
}
use of org.neo4j.kernel.impl.transaction.log.LogPositionMarker in project neo4j by neo4j.
the class TransactionLogsRecoveryTest method shouldTellTransactionIdStoreAfterSuccessfulRecovery.
@Test
void shouldTellTransactionIdStoreAfterSuccessfulRecovery() throws Exception {
// GIVEN
Path file = logFiles.getLogFile().getLogFileForVersion(logVersion);
final LogPositionMarker marker = new LogPositionMarker();
final byte[] additionalHeaderData = new byte[0];
final long transactionId = 4;
final long commitTimestamp = 5;
writeSomeData(file, pair -> {
LogEntryWriter writer = pair.first();
Consumer<LogPositionMarker> consumer = pair.other();
// last committed tx
writer.writeStartEntry(2L, 3L, BASE_TX_CHECKSUM, additionalHeaderData);
writer.writeCommitEntry(transactionId, commitTimestamp);
consumer.accept(marker);
return true;
});
// WHEN
boolean recoveryRequired = recover(storeDir, logFiles);
// THEN
assertTrue(recoveryRequired);
long[] lastClosedTransaction = transactionIdStore.getLastClosedTransaction();
assertEquals(transactionId, lastClosedTransaction[0]);
assertEquals(commitTimestamp, transactionIdStore.getLastCommittedTransaction().commitTimestamp());
assertEquals(logVersion, lastClosedTransaction[1]);
assertEquals(marker.getByteOffset(), lastClosedTransaction[2]);
}
Aggregations