Search in sources :

Example 1 with RangeLogVersionVisitor

use of org.neo4j.kernel.impl.transaction.log.files.RangeLogVersionVisitor 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;
}
Also used : LogEntryDetachedCheckpoint(org.neo4j.kernel.impl.transaction.log.entry.LogEntryDetachedCheckpoint) RangeLogVersionVisitor(org.neo4j.kernel.impl.transaction.log.files.RangeLogVersionVisitor) ArrayList(java.util.ArrayList) VersionAwareLogEntryReader(org.neo4j.kernel.impl.transaction.log.entry.VersionAwareLogEntryReader) ReadAheadLogChannel(org.neo4j.kernel.impl.transaction.log.ReadAheadLogChannel) LogEntryCursor(org.neo4j.kernel.impl.transaction.log.LogEntryCursor) LogEntry(org.neo4j.kernel.impl.transaction.log.entry.LogEntry)

Example 2 with RangeLogVersionVisitor

use of org.neo4j.kernel.impl.transaction.log.files.RangeLogVersionVisitor 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();
}
Also used : LogEntryDetachedCheckpoint(org.neo4j.kernel.impl.transaction.log.entry.LogEntryDetachedCheckpoint) RangeLogVersionVisitor(org.neo4j.kernel.impl.transaction.log.files.RangeLogVersionVisitor) VersionAwareLogEntryReader(org.neo4j.kernel.impl.transaction.log.entry.VersionAwareLogEntryReader) ReadAheadLogChannel(org.neo4j.kernel.impl.transaction.log.ReadAheadLogChannel) LogEntryCursor(org.neo4j.kernel.impl.transaction.log.LogEntryCursor) LogEntry(org.neo4j.kernel.impl.transaction.log.entry.LogEntry)

Aggregations

LogEntryCursor (org.neo4j.kernel.impl.transaction.log.LogEntryCursor)2 ReadAheadLogChannel (org.neo4j.kernel.impl.transaction.log.ReadAheadLogChannel)2 LogEntry (org.neo4j.kernel.impl.transaction.log.entry.LogEntry)2 LogEntryDetachedCheckpoint (org.neo4j.kernel.impl.transaction.log.entry.LogEntryDetachedCheckpoint)2 VersionAwareLogEntryReader (org.neo4j.kernel.impl.transaction.log.entry.VersionAwareLogEntryReader)2 RangeLogVersionVisitor (org.neo4j.kernel.impl.transaction.log.files.RangeLogVersionVisitor)2 ArrayList (java.util.ArrayList)1