前言
做2020的MIT6.824,完成了实验Raft Lab2C,通过了测试,对于之前的两个实验请参考2020 6.824 的 Raft Lab 2A 以及2020 6.824 的 Raft Lab 2B
这个实验的重点在于实现persist()以及做优化。总的来说代码量比Lab2B要少,又沿用Lab2A已经搭好的框架,所以整体会比前两个实验简单一些
这个实验的坑是TestFigure8Unreliable2C,这里有相关的讨论可以根据自己的情况参考一下,总结有两点如下
- AppendEntries实现有误
- Time interval 的问题
下面有这个链接对我的实验测试很有帮助,主要是为了多测测试,保证没有因为概率通过而miss掉的一些测试用例
3. 并行运行测试的shellscript
##每20个test并行运行,运行100次2B的test
bash test_many.sh 100 20 2C
一、Raft2C
实验可以分为两个部分,首先是实现persist()以及做优化
二、Persist()
2.1 实现
Lab已经有部分参考的实验代码了,结合paper的Figure 2就可以写出来了
最终实现如下
func (rf *Raft) persist() {
// Your code here (2C).
w := new(bytes.Buffer)
e := labgob.NewEncoder(w)
e.Encode(rf.currentTerm)
e.Encode(rf.votedFor)
e.Encode(rf.log)
data := w.Bytes()
rf.persister.SaveRaftState(data)
}
func (rf *Raft) readPersist(data []byte