[TinyKV] TestLeaderSyncFollowerLog2AB: leader 同步 commit 给 follower

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 中没有找到关于这一点的 实现的差异。

1 个赞

感谢反馈,测试里假设了当 commit index 推进后 leader 应该立刻广播消息同步 commit index 这一点,可以帮忙提个 pr 修正一下文档么

1 个赞

是的,我也遇到了相同的问题。
由于遇到测试样例假设leader会广播推进commi index, 所以我在新增广播逻辑后,可以通过此测试。
但是同时广播操作会导致raft.msgs中会有多大message,导致其他测试无法通过。
我感觉可能是因为前后测试样例对实现做了矛盾的假设造成的。
请问您现在解决这个问题了吗?是如何解决的呢?

1 个赞