看起来你是在实现 Raft 日志冲突回溯的优化,实际上是可以只用 conflictIndex 来实现优化,但加上 conflictTerm 优化效果更好。
举个例子: 假设 S1 是 leader ,S2 是 follower
idx 0 1 2 3 4 5 6 7
S1 x 4 4 4 4 4 5 5
S2 x 4 4 4 4 4 4 4
1. S1 发送心跳 prevLogIndx 为 7 ,prevLogTerm 为 5 ;
2. S2 发现日志冲突,idx 为 7 的日志,term 是 4 。那么会往前回溯到 term 4 的第一条日志,
最后返回的 conflictTerm 为 4 ,conflictIndex 为 1 ;
3. 如果没有 conflictTerm , 那么会下一次同步 prevLogIndex 为 0 ,会将 1~7 的日志全部同步。
如果有 conflictTerm ,根据 Raft 的日志匹配特性,下一次同步只需要传输 6~7 的日志,
prevLogIndex 为 term 4 最后一个 entry 的 idx ,也就是 5 。
可以参考一下 6.824 助教的指导文章:
https://thesquareplanet.com/blog/students-guide-to-raft/#an-aside-on-optimizations最近也在刷 6.824 ,有兴趣的话一起:
https://t.me/+G8GC-B6ThGZlN2Zl