1

我在看木筏纸。

到 requestvote rpc,

接收者实现: 1. 如果 term < currentTerm (§5.1) 则回复 false 2. 如果 votedFor 为 null 或 CandidateId,并且候选人的日志至少与接收者的日志一样最新,则授予投票权 (§5.2, §5.4)

在某些情况下,候选人的任期等于领导者的currentTerm,那么领导者如何响应候选人的RequestVote rpc?

4

1 回答 1

3

让我们用更人性化的术语来区分:

  1. 如果投票来自较旧的任期 ( term < currentTerm),请忽略它。
  2. 如果我们在本学期没有投票 ( votedFor is null),或者如果这是对我们在本学期上次投票的同一候选人的投票 ( votedFor == candidateId),那么只要候选人日志是最新的,就授予投票权。

请记住,领导者在给定的任期内为自己投票。

这意味着对于term == currentTerm,领导者将拥有votedFor等于自己。这不是空的,因此它授予此投票的唯一方法是 if candidateIdis 本身 - 即,它在当前任期内为自己投票。在所有其他情况下,它不会授予投票权。

要记住的高级事情(事实上,所有这一切的关键不变量)是服务器在同一个任期内不会投票超过一次。一旦它对一个任期进行投票,它就是最终的。而且由于领导者为自己投票,因此当它收到同一任期的其他请求时,它不会批准它。

于 2017-12-16T19:47:17.680 回答