TestLeaderSyncFollowerLog2AB 这个 testcase ,
要求 leader 的 commitIdx 和 follower 的 commitIdx 一致,
testcase:
n.send(pb.Message{From: 1, To: 1, MsgType: pb.MessageType_MsgPropose, Entries: []*pb.Entry{{}}})
if g := diffu(ltoa(lead.RaftLog), ltoa(follower.RaftLog)); g != "" {
t.Errorf("#%d: log diff:\
%s", i, g)
}
error:
TestLeaderSyncFollowerLog2AB: raft_paper_test.go:780: #0: log diff:
--- /var/folders/85/ghr_9mqn5tg54rscftwyf8j40000gn/T/base395497269 2021-05-11 14:52:07.000000000 +0800
+++ /var/folders/85/ghr_9mqn5tg54rscftwyf8j40000gn/T/other532825360 2021-05-11 14:52:07.000000000 +0800
@@ -1,4 +1,4 @@
-committed: 11
+committed: 10
applied: 0
最后一个请求是 leader propose 一个 log,
我的实现中是 leader append 到所有的 follower,然后收到 响应后,commit 这个 log。结束。
按照论文中,同步给 follower 这个 commit 信息,是在 下一次 hearbeat 或 appendEntries 的请求中。
leader 在 testcase 的情况下,commit 是应该领先 follower 的。
在 readme 中没有找到关于这一点的 实现的差异。