关于TestLeaderBcastBeat2AA的tick疑问

不清楚怎么实现?

leader --rpc --follower
然后 follower ->rcp ->leader 这个流程吗?

具体问题:

  1. MessageType_MsgPropose 广播自己的消息吗?
  2. tick() 这个函数 间隔n秒 发送 心跳报吗MsgBeat,这个通过什么函数发送的的

Leaders send periodic
heartbeats (AppendEntries RPCs that carry no log entries)
to all followers in order to maintain their authority

所有的消息的消息的发送是通过添加r.msg中进行驱动的,上层会读取有r.msg中有没有内容,有的话会进行发送。 tick 也是有上层驱动的,每次调用tick会使heatrElapsed自增,超过了心跳选举超时器就会发送心跳包,添加都r.msg中,由上层进行发送。这里的时间我认为是逻辑时间而不是物理时间。

1 个赞
  1. 关于第一点问题,MessageType_MsgPropose指的是客户端发送了某一个请求,比如Get、Put,但是Raft是一个一致性协议,Leader需要先把这个请求包装成一个log entry追加到日志中,然后就是你说的广播,即将这条日志(请求)追加到其它follower的日志中,只要这条日志(请求)被复制到多数派raft节点中,这样这条请求就算提交了,上层会进行应用。
  2. 关于第二点问题,tick()函数,是一个逻辑计数器,每次调用tick函数,Raft结构体中的heartbeatElapsed会加1(只有leader才维护心跳计时器),electionElapsed会加一(非leader才维护超时选举计时器),一旦触发了心跳超时,即heartbeatElapsed和heartbeatTimeout相等,这时候leader得发送心跳RPC到其它Raft节点来维护自己的身份,只需要生成对应的msg,然后加入到r.msg中即可,上层会进行通过rpc机制发送,electionElapsed同理,一旦超时,非leader身份的Raft节点就需要开启选举。
1 个赞

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。