In probe mechanism there is chance for replication starting from an index less than match index in probe state, unlike that in replicate state. For example, a rejected probe response got delayed and is received when the leader falls into another probe state. This is a rare case of cause.
To my understanding, allowing such a smaller index implies we want to tolerate loss of already replicated log entries.
raft-rs/src/tracker/progress.rs
if request_snapshot == INVALID_INDEX {
self.next_idx = cmp::min(rejected, match_hint + 1);
if self.next_idx < 1 {
self.next_idx = 1;
}
In this code, there is chance to make Next < Match. But the invariant in raft is that Next > Match.
In probe mechanism there is chance for replication starting from an index less than match index in probe state, unlike that in replicate state. For example, a rejected probe response got delayed and is received when the leader falls into another probe state. This is a rare case of cause.
To my understanding, allowing such a smaller index implies we want to tolerate loss of already replicated log entries. raft-rs/src/tracker/progress.rs
In this code, there is chance to make Next < Match. But the invariant in raft is that
Next > Match
.