想问问configchange的时候,这种情况该怎么处理

configchange的时候,新加入一个节点5。5创建成功但是由于网络分区的原因,一直不知道有其他节点的存在,所以就自己becomeLeader,然后写入no-op。另外一个分区中1234节点中123已经删除了,就只剩下4了。当分区合并的时候,4知道5的存在,但是4给5发送投票的时候无法成功,因为4的LogTerm更小。 然后整个集群就是4requestVote被拒绝,增加Term,发送给5。5下台,然后5又自己选举成功。然后4又requestVote被拒绝,一直循环。 如果new peer的时候,Leader下台或者Leader没有选出来,新来的节点就很容易超时导致自己发起选举然后当选。

目前的解决方案是config change新创建的peer,不允许发起选举

我们的解决方案是:对于 prs 为空的新节点不应该让其进入 candidate 或者 leader 的角色

对,这相关的bug挺多的,又发现一个bug是新创建的peer在applySnapshot的时候,如果要更新region是不能调用regionRange.Delete的。

同遇到这个问题,求教

config change时新创建的peer,没有其他节点的信息。peer没有拿到其他节点的信息之前,不应该让他发起选举。