mit_6.824_2021_lab3B_kvraft_with_snapshots
Part B: Key/value service with snapshots
紧接着 lab3A,将键值存储服务的快照功能加上,这里的代码量不多,主要是对lab3A,和 raft 一些细枝末节的改动,让整体代码更可读,但还是发现了一个 raft 初始化的 bug,导致自己卡了一会,不过也加深了自己对 persist 这一部分的理解
实验内容
首先要知道,重启的服务器会执行一次完整的Raft日志以恢复其状态,但是,raft 日志不可能永远增长(和 lab2D 一样);
使用Raft的Snapshot()
和来自lab 2D的CondInstallSnapshot
来节省空间
启动 server 时将maxraftstate
传递给StartKVServer()
。maxraftstate
表示允许的持久Raft状态的最大字节大小(包括raftState
,但不包括快照)。使用maxraftstate
和persister.Raftstatesize()
做比较。
每当kv服务器检测到Raft状态大小接近这个阈值时,使用Snapshot()
保存一个快照,而snapshot又使用persister.Saveraftstate()
。如果maxraftstat