Frdmu's Space


Welcome to frdmu's space!


Lab 2B

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