美文网首页jraft
jraft源码阅读1一实现半数以上同意的Ballot类

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

作者: 黄云斌huangyunbin | 来源:发表于2019-04-10 09:27 被阅读0次
    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。
    所以这样才是把逻辑串起来,只是初次看不容易理解

    相关文章

      网友评论

        本文标题:jraft源码阅读1一实现半数以上同意的Ballot类

        本文链接:https://www.haomeiwen.com/subject/laygiqtx.html