use of org.neo4j.kernel.impl.transaction.log.entry.LogEntryDetachedCheckpoint in project neo4j by neo4j.
the class TransactionRangeDiagnosticsTest method shouldLogCorrectTransactionLogDiagnosticsForTransactionsAndCheckpointLogs.
@Test
void shouldLogCorrectTransactionLogDiagnosticsForTransactionsAndCheckpointLogs() throws Exception {
// GIVEN
long txLogLowVersion = 2;
long txLogHighVersion = 10;
long checkpointLogLowVersion = 0;
long checkpointLogHighVersion = 3;
StoreId storeId = new StoreId(12345);
LogPosition checkpointLogPosition = new LogPosition(checkpointLogHighVersion, 34);
Database database = databaseWithLogFilesContainingLowestTxId(logs(transactionLogsWithTransaction(txLogLowVersion, txLogHighVersion, 42), checkpointLogsWithLastCheckpoint(checkpointLogLowVersion, checkpointLogHighVersion, new CheckpointInfo(new LogEntryDetachedCheckpoint(KernelVersion.LATEST, checkpointLogPosition, 1234, storeId, "testing"), checkpointLogPosition))));
AssertableLogProvider logProvider = new AssertableLogProvider();
Log logger = logProvider.getLog(getClass());
// WHEN
new TransactionRangeDiagnostics(database).dump(logger::info);
// THEN
assertThat(logProvider).containsMessages("existing transaction log versions " + txLogLowVersion + "-" + txLogHighVersion).containsMessages("existing checkpoint log versions " + checkpointLogLowVersion + "-" + checkpointLogHighVersion);
}
use of org.neo4j.kernel.impl.transaction.log.entry.LogEntryDetachedCheckpoint in project neo4j by neo4j.
the class CheckpointLogFile method reachableCheckpoints.
@Override
public List<CheckpointInfo> reachableCheckpoints() throws IOException {
var versionVisitor = new RangeLogVersionVisitor();
fileHelper.accept(versionVisitor);
long highestVersion = versionVisitor.getHighestVersion();
if (highestVersion < 0) {
return emptyList();
}
long currentVersion = versionVisitor.getLowestVersion();
var checkpointReader = new VersionAwareLogEntryReader(NO_COMMANDS, true);
var checkpoints = new ArrayList<CheckpointInfo>();
while (currentVersion <= highestVersion) {
try (var channel = channelAllocator.openLogChannel(currentVersion);
var reader = new ReadAheadLogChannel(channel, NO_MORE_CHANNELS, context.getMemoryTracker());
var logEntryCursor = new LogEntryCursor(checkpointReader, reader)) {
log.info("Scanning log file with version %d for checkpoint entries", currentVersion);
LogEntryDetachedCheckpoint checkpoint;
var lastCheckpointLocation = reader.getCurrentPosition();
var lastLocation = lastCheckpointLocation;
while (logEntryCursor.next()) {
lastCheckpointLocation = lastLocation;
LogEntry logEntry = logEntryCursor.get();
checkpoint = verify(logEntry);
checkpoints.add(new CheckpointInfo(checkpoint, lastCheckpointLocation));
lastLocation = reader.getCurrentPosition();
}
currentVersion++;
}
}
return checkpoints;
}
use of org.neo4j.kernel.impl.transaction.log.entry.LogEntryDetachedCheckpoint in project neo4j by neo4j.
the class CheckpointLogFile method findLatestCheckpoint.
@Override
public Optional<CheckpointInfo> findLatestCheckpoint() throws IOException {
var versionVisitor = new RangeLogVersionVisitor();
fileHelper.accept(versionVisitor);
long highestVersion = versionVisitor.getHighestVersion();
if (highestVersion < 0) {
return Optional.empty();
}
long lowestVersion = versionVisitor.getLowestVersion();
long currentVersion = highestVersion;
var checkpointReader = new VersionAwareLogEntryReader(NO_COMMANDS, true);
while (currentVersion >= lowestVersion) {
try (var channel = channelAllocator.openLogChannel(currentVersion);
var reader = new ReadAheadLogChannel(channel, NO_MORE_CHANNELS, context.getMemoryTracker());
var logEntryCursor = new LogEntryCursor(checkpointReader, reader)) {
log.info("Scanning log file with version %d for checkpoint entries", currentVersion);
LogEntryDetachedCheckpoint checkpoint = null;
var lastCheckpointLocation = reader.getCurrentPosition();
var lastLocation = lastCheckpointLocation;
while (logEntryCursor.next()) {
lastCheckpointLocation = lastLocation;
LogEntry logEntry = logEntryCursor.get();
checkpoint = verify(logEntry);
lastLocation = reader.getCurrentPosition();
}
if (checkpoint != null) {
return Optional.of(new CheckpointInfo(checkpoint, lastCheckpointLocation));
}
currentVersion--;
}
}
return Optional.empty();
}
use of org.neo4j.kernel.impl.transaction.log.entry.LogEntryDetachedCheckpoint in project neo4j by neo4j.
the class CheckpointInfoTest method checkpointInfoOfDetachedCheckpointEntry.
@Test
void checkpointInfoOfDetachedCheckpointEntry() {
var logPosition = new LogPosition(0, 1);
var storeId = new StoreId(3, 4, 5, 6, 7);
LogPosition position = new LogPosition(1, 2);
var checkpointInfo = new CheckpointInfo(new LogEntryDetachedCheckpoint(KernelVersion.V4_0, logPosition, 2, storeId, "checkpoint"), position);
assertSame(logPosition, checkpointInfo.getTransactionLogPosition());
assertSame(storeId, checkpointInfo.storeId());
assertSame(position, checkpointInfo.getCheckpointEntryPosition());
}
Aggregations