Lab 2C
lab2c主要是实现persist,也就是持久化。
根据lab assignment,只需要完成几个函数即可:
func (rf *Raft) persist() {
// Your code here (2C).
// Example:
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) {
if data == nil || len(data) < 1 { // bootstrap without any state?
return
}
// Your code here (2C).
// Example:
r := bytes.NewBuffer(data)
d := labgob.NewDecoder(r)
var currentTerm int
var votedFor int
var log []Entry
if d.Decode(¤tTerm) != nil ||
d.Decode(&votedFor) != nil ||
d.Decode(&log) != nil {
DPrintf("readPersist 发生错误:%v %v %v\n", currentTerm, votedFor, log)
} else {
rf.currentTerm = currentTerm
rf.votedFor = votedFor
rf.log = log
}
}然后根据图二:需要持久化的有:
votedFor
currentTerm
log
在上述三个字段改变的地方加上 rf.persist() 即可。
easy lab
Last updated