jraft

jraft源码阅读1一实现半数以上同意的Ballot类

2019-04-10  本文已影响0人  黄云斌huangyunbin
1 raft要达成一致,是需要半数以上的节点同意的,但是这个逻辑在jraft中非常的隐蔽。

这个逻辑是在Ballot类,在init方法中我们看到

 this.quorum = this.peers.size() / 2 + 1;

这个就是核心点了。

Ballot类的grant的核心逻辑就是,如果命中了初始化的节点之一,就

this.quorum--;

Ballot类的最后判断也就很简单了,就是判断quorum是不是小于0

public boolean isGranted() {
        return this.quorum <= 0 && oldQuorum <= 0;
    }
2 Ballot的isGranted方法在使用上也有点容易困惑
image.png

这个代码咋一看,以为waiter.onCommitted肯定是会被执行到的,但其实中途有个return。
条件是lastCommittedIndex == 0,只有没超过半数lastCommittedIndex == 0才成立,只要超过半数lastCommittedIndex = logIndex。
所以这样才是把逻辑串起来,只是初次看不容易理解

上一篇下一篇

猜你喜欢

热点阅读