in ratis-server/src/main/java/org/apache/ratis/server/raftlog/segmented/SegmentedRaftLogInputStream.java [202:236]
static LogValidation scanEditLog(SegmentedRaftLogInputStream in, long maxIndexToScan) {
long lastPos = 0;
long end = INVALID_LOG_INDEX;
long numValid = 0;
boolean hitError = false;
while (end < maxIndexToScan) {
long index;
lastPos = in.getPosition();
try {
if (hitError) {
LogEntryProto entry = in.nextEntry();
index = entry != null ? entry.getIndex() : INVALID_LOG_INDEX;
LOG.warn("After resync, position is " + in.getPosition());
} else {
index = in.scanNextEntry();
}
if (index == INVALID_LOG_INDEX) {
break;
} else {
hitError = false;
}
} catch (Exception e) {
LOG.warn("Caught exception after scanning through {} ops from {}"
+ " while determining its valid length. Position was "
+ lastPos, numValid, in, e);
hitError = true;
continue;
}
if (end == INVALID_LOG_INDEX || index > end) {
end = index;
}
numValid++;
}
return new LogValidation(lastPos, end, false);
}