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.99k stars 886 forks source link

重启节点需要执行两次add_peer才能成功 #322

Open spasserby opened 3 years ago

spasserby commented 3 years ago

现象: 步骤一:正常启动三个节点后 步骤二:通过remove_peer踢出去一个节点。重启节点,再通过add_peer添加这个节点会出现失败,再一次add_peer则会成功。

简单分析及推测: 在remove_peer后,leader会有一个socket处于Failed状态。 当第一次add_peer时,leader收到请求在给新节点发请求时会失败(在Socket::Address处),失败后SetFailed(),通过健康检查,这个socket会revive。 此时第二次add_peer,就正常了。