我正在读草稿纸。
到请求投票 rpc,
Receiver implementation: 1. Reply false if term < currentTerm (§5.1) 2. If votedFor is null or candidateId, and candidate’s log is at least as up-to-date as receiver’s log, grant vote (§5.2, §5.4)
在某些情况下,候选人的任期等于领导者的当前任期,那么领导者如何响应候选人的RequestVote rpc?
最佳答案
让我们用更人性化的术语来区分这一点:
- 如果投票来自较旧的术语 (
term < currentTerm
),请忽略它。 - 如果我们没有在本学期投票 (
votedFor is null
),或者投票给了我们上次在本学期投票的同一候选人 (votedFor == candidateId
),则只要该候选人投票日志是最新的。
请记住,领导者在特定任期内为自己投票。
这意味着 term == currentTerm
,领导者将有 votedFor
等于自身。这不为空,因此授予此投票的唯一方式是 if candidateId
是它自己 - 即,它在当前任期内为自己投票。在所有其他情况下,它不会授予投票权。
要记住的重要一点(事实上,这是所有这一切中的关键不变量)是服务器永远不会在同一任期内投票多次。一旦它对一个任期进行了投票,它就是最终的。而且由于领导者会为自己投票,因此当它收到其他对同一任期的请求时,它不会批准该请求。
关于raft - 在 raft 领导人选举中,现场领导人如何响应候选人的 RequestVote rpc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47827379/