3

我不确定我是否正确理解 Raft 中的 RequestVote 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 时,什么情况下会voteFor == candidateId成立?候选人不会在同一任期内发送另一个 RequestVote RPC。如果它开始另一次选举,则任期将增加,因此接收者应转换为追随者和voteFor is null

在我之前的 Raft 实现中,我的逻辑如下:

If votedFor is null or me, and candidate’s log is at least as up-to-date as receiver’s log, grant vote 

虽然明显是错误的,但似乎工作正常,即leader选举和发送requestVotes可以稳定工作。

任何建议将不胜感激,并提前致谢

4

1 回答 1

1

我相信这只是对网络数据包重复的健全性检查。在理想情况下,RequestVoteRPC一个任期内只有一条消息会到达对等点。

但是由于网络可能处于许多远非理想的状态,因此包含的网络数据包RequestVoteRpc可能会被复制,因此您还需要以与检查对等方是否已经授予您投票相同的方式来处理这一点,所以您不要数两次。

于 2019-07-26T07:59:02.287 回答