Log
Task
实现leader和follower添加新日志条目的代码,测试使用
go test -run 2B -race
Hint
-
1.你的首要目标应该是通过TestBasicAgree2B()。通过实现Start()开始,然后写代码通过AppendEntries RPCs发送和接受新的日志条目。
-
2.你将需要实现election restriction(section 5.4.1 in the paper)。
-
3.在Lab2B测试中无法达成一致的一种原因是即使leader仍存活也进行重复选举。在election timer的管理中寻找bug,或者在赢得一次选举后不要立马发送heartbeats。
-
4.你的代码也许会在循环中重复检查某种事件。不要使这些循环连续执行,因为那将使你的实现在测试中失败。在每一次循环迭代中使用Go的条件变量或者插入time.Sleep(10 * time.Millisecond)。
-
5.你可以按照自己的喜好重构自己的代码。你可以重新查看Guidance page,以得知如何开发与调试你的代码。
-
6.如果你没有通过测试,查看config.go和test_test.go以更好的理解测试内容。config.go也阐述了tester如何使用Raft API。
接下来的实验中,如果代码运行过慢,将无法通过测试。你可以通过使用time命令查看你的解决方案的实际运行时间和CPU时间:
time go test -run 2B