Mit6.824-lab3b-2022

Mit6.824-lab3b-2022

写在前面

个人感觉3b需要做的工作比3a还要简单,只是添加了个server的snapshot,但是由于加入了snapshot所以3a的测试对raft的代码要求又高了一个档次,我基本上所有的精力也都花到对raft部分的debug上了,由于进行apply的chan不能上锁,这里会出现各种乱序的bug,只能说这个地方的设计确实是有点难受了。而且每次十几万行的log信息,找出来错误信息再一点点分析真的头痛,以及client还会反复发送命令,覆写之前的命令等,让log更加困难。不过也怪自己raft写的实在是差强人意,感觉一开始设计的逻辑就不太好,最后只能到处缝缝补补。做到后面真的想干脆重构代码算了。

实验目标

实验要求很简单,给server增加一个snapshot功能,每当raft的log长度到达一个值,就打包一个snapshot并发送snapshot命令给raft,同时当raft发送snapshot时,接收并把自己本地维持的数据替换为snapshot的数据。
这里还是借用一下这位的图,代码在这里
在这里插入图片描述

实验内容

读写snapshot

这部分和raft一样,没什么好说的,只需要保持本地数据和每个client发送的最新命令的index即可。

func (kv *KVServer)kvServerSnapShot()[]byte{
   
   
	w := new(bytes.Buffer)
	e :=labgob.NewEncoder(w)

	if e.Encode(kv.DB) != nil||
		e.Encode(kv.ClientSequence) != nil{
   
   
			return nil
		}
	return w.Bytes()
}

func (kv *KVServer)readSnapShot(data []byte
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值