关于raft协议voteFor元数据的用途 #950
-
对于voteFor这一元数据的用途我有些疑问。原本来说voteFor这一参数是用于防止重复投票的情况发生,但是在我编码过程中,却发现该参数好像没有使用的必要。具体分析如下:
综上所述,我使用不到voteFor这一参数。所以感到十分疑惑,感谢解答! |
Beta Was this translation helpful? Give feedback.
Replies: 2 comments 6 replies
-
可能少考虑了一种情况呢,就是成员宕机立马重启。比如: 代码如下:这里判断的是大于等于,2的term是可以通过多次的(以b为例,a的term=2,c的term=2,都能通过这个逻辑)。 那能不能把大于等于改成大于? |
Beta Was this translation helpful? Give feedback.
-
@shihuili1218 回答的很好了。本质上就是为了加速选举,尽快收敛。
已经投了一个 Candidate, votedId 就是记录投了谁,用来拒绝。 |
Beta Was this translation helpful? Give feedback.
考虑了很多场景,大于等于改成大于,应该是不影响正确性。
但是加上等于号,有一种情况可以加快选举进程
A term=2, index=201
B term=2, index=203
C term=2, index=203
A发起选举,term3,线程暂停,还未投票给A
B发起选举,term3,
A收到B的选举消息: