我在看木筏纸。
到 requestvote rpc,
接收者实现: 1. 如果 term < currentTerm (§5.1) 则回复 false 2. 如果 votedFor 为 null 或 CandidateId,并且候选人的日志至少与接收者的日志一样最新,则授予投票权 (§5.2, §5.4)
在某些情况下,候选人的任期等于领导者的currentTerm,那么领导者如何响应候选人的RequestVote rpc?
让我们用更人性化的术语来区分:
term < currentTerm
),请忽略它。votedFor is null
),或者如果这是对我们在本学期上次投票的同一候选人的投票 ( votedFor == candidateId
),那么只要候选人日志是最新的,就授予投票权。请记住,领导者在给定的任期内为自己投票。
这意味着对于term == currentTerm
,领导者将拥有votedFor
等于自己。这不是空的,因此它授予此投票的唯一方法是 if candidateId
is 本身 - 即,它在当前任期内为自己投票。在所有其他情况下,它不会授予投票权。
要记住的高级事情(事实上,所有这一切的关键不变量)是服务器在同一个任期内不会投票超过一次。一旦它对一个任期进行投票,它就是最终的。而且由于领导者为自己投票,因此当它收到同一任期的其他请求时,它不会批准它。