baidu / braft

An industrial-grade C++ implementation of RAFT consensus algorithm based on brpc, widely used inside Baidu to build highly-available distributed systems.
Apache License 2.0
3.95k stars 881 forks source link

response.rejected_by_lease() if else两个分支的逻辑相同. rejected_by_lease()为true时不起作用? #411

Closed Jackie0423 closed 1 year ago

Jackie0423 commented 1 year ago

https://github.com/baidu/braft/blob/e32b78a1f4973534aaa047dc2ead9167ec091b56/src/braft/node.cpp#L1527 rejected_by_lease: true _pre_vote_ctx.reserve(peer_id); // reserve将该peer_id保存至set _pre_vote_ctx.pop_grantable_peers(&peers); // 将内部peers全部取出, 内部置空 rejected_by_lease: false _pre_vote_ctx.pop_grantable_peers(&peers); // 将内部peers全部取出, 内部置空 peers.insert(peer_id); // 插入当前peer_id

前后2个逻辑相同?

ehds commented 1 year ago

pop_grantable_peers 里面有判断如果 _disrupted_leader.term != 1 (说明 leader 已经被打断了),才会返回之前在由于是因为在 lease 内才没投票的节点。

所以如果当_disrupted_leader.term 还未被设置时,两个分支的作用是不同的。

如果当_disrupted_leader.term 已经被设置,两个分支的作用是相同的。

Jackie0423 commented 1 year ago

谢谢解释