mit 6.824 lab2 C,raft持久化(lab2D中有关于此处大量代码修改找出了很多错误)

lab2 C 实现的就是持久化非常简单,在mit提供的框架中,持久化是存储在内存中。

首先看论文

mit 6.824 lab2 C,raft持久化(lab2D中有关于此处大量代码修改找出了很多错误)

需要持久化的元素。

根据lab2C的描述中我们可以知道需要实现的函数:

persist 持久化

readPersist 读取持久化数据

实现方式也给了例子非常简单:

func (rf *Raft) persist() {   // Your code here (2C).   // Example:   // w := new(bytes.Buffer)   // e := labgob.NewEncoder(w)   // e.Encode(rf.xxx)   // e.Encode(rf.yyy)   // data := w.Bytes()   // rf.persister.SaveRaftState(data)

}

就是用mit提供的序列化包。

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 xxx   // var yyy   // if d.Decode(&xxx) != nil ||   //    d.Decode(&yyy) != nil {   //   error...   // } else {   //   rf.xxx = xxx   //   rf.yyy = yyy   // }简单易懂。最关键的点是在哪些位置需要序列化。所有导致使所需序列化元素发生改变的位置都要进行序列化。持久化位置:  start 位置  投票  开启新的term

mit 6.824 lab2 C,raft持久化(lab2D中有关于此处大量代码修改找出了很多错误)

Original: https://www.cnblogs.com/thotf/p/16693680.html
Author: thotf
Title: mit 6.824 lab2 C,raft持久化(lab2D中有关于此处大量代码修改找出了很多错误)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/582246/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球