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

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。
所以这样才是把逻辑串起来,只是初次看不容易理解

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 2018年9月8日 星期六 晴(农历七月二十九) 今天白露,也是个好日子哈! 不知是不是乳胶枕头的缘故...
    誉仔妈妈阅读 465评论 0 5
  • Vue组件选项推荐的默认顺序 定义组件is 循环渲染v-for 条件渲染v-ifv-else-ifv-elsev-...
    lwj1426282929阅读 593评论 0 0