Raft日志
2023-03-27 17:09:04 5 举报
raft 日志想关流程图
作者其他创作
大纲/内容
false
true
接受者判断leader 是否过期
判断 nextIndex <= 日志(真实存在的,不是快照,以及索引0)的起点
接受者
xLen 设置为追加的下一条索引位置lastLogIndex + 1
prevLogIndex intprevLogTerm int LogsTerm
说明接受者已经将中间差的日志打了快照
leader 过期
发送者
存在
找到该日志条目的最后一条日志的索引
args.Term < currentTerm
相同
判断xTerm != -1 并且 当前拥有日志任期 = xTerm的日志
这里还会涉及自己是否过期的操作,在快照那边写了。这步操作之后,接受者就认定这个 发送者是合法的 leader,就需要刷新选举计时器。
不同
说明接受者日志太短,发送快照
将日志从当前点截断
将日志替换为快照(出现冲突)
rpc
term 是否相等呢
这样的情况自己掉线leader 快照(这个日志已经被大多数人所应用)重新选举(这个leader也打了快照)新 leader 发送日志
没过期
设置 xterm 为当前冲突的日志xindex 设置任期为xterm的第一条日志索引
判断这条日志是否在本地有真实日志
发现 xIndex != -1
发送快照
判断当前最后一条日志是否小于 pervLogIndex
失败
state -> FollowervoteFor->-1currentTerm -> args.Term
接受方
判断当前日志的prevLogIndex是否 小于当前日志的起点(最开始是0)
记录进 该接受者的 nextIndex
追加不存在的,截断任期不同的
判断 xIndex != -1
如果这条日志的任期是否相同
刷计时器
设置 xindex 为接受者的该追加的下一条索引位置lastLogIndex + 1
是
args.Term > currentTerm
说明这条日志冲突,需要回退
现在存在 prevLogIndex索引处的这条日志
相等
0 条评论
下一页