在实现了snapshot 和 leaderTransferee 之后,运行 TestLeaderTransferAfterSnapshot3A 报错,错误的直接原因是指定为leader transfer 的目标节点2 由于存在pendingSnapshot 而没有成功执行hup() 发起竞选,参考etcd 中这个测试发现测试案例有执行 advance,这样follower 的pengdingSnaphshot 就可以被清空,而TestLeaderTransferAfterSnapshot3A 中没有调用 advance,导致follower 已经应用的snapshot 没有被清空,请问大家有遇到这个问题吗?advance 这个逻辑是可以省略的吗?
根据您提供的信息,这个问题是在 TiKV 的测试用例 TestLeaderTransferAfterSnapshot3A
中出现的。根据 TiKV 的官方文档,advance
是一个方法,用于将 Raft 状态机中已经应用的日志条目从 Raft Log 中删除,以便释放存储空间。在 TiKV 中,advance
方法通常在应用快照之后调用,以清除已经应用的日志条目。
在您的情况下,由于没有调用 advance
方法,follower 已经应用的 snapshot 没有被清空,从而导致了测试用例的失败。因此,建议您在 TestLeaderTransferAfterSnapshot3A
中调用 advance
方法,以清除已经应用的日志条目。如果您不想调用 advance
方法,也可以考虑在测试用例中手动清除已经应用的 snapshot,以便测试用例能够正常运行。
此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。