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 条评论
 下一页
  
   
  
  
  
  
  
  
  
  
 