从名字可以看出来,是基于配置文件来进行启动。

所以整个方法都是对参数进行解析和设置 , 因为这些参数暂时还没用到,所以没必要去看。直接看核心的代码

quorumPeer.start(), 启动一个线程,那么从这句代码可以看出来QuorumPeer实际是继承了线程。那么它里面一定有一个run方法

public void runFromConfig(QuorumPeerConfig config) throws IOException { try { ManagedUtil.registerLog4jMBeans(); } catch (JMException e) { LOG.warn("Unable to register log4j JMX control", e); } LOG.info("Starting quorum peer"); try { ServerCnxnFactory cnxnFactory = ServerCnxnFactory.createFactory(); cnxnFactory.configure(config.getClientPortAddress(), config.getMaxClientCnxns()); quorumPeer = getQuorumPeer(); quorumPeer.setQuorumPeers(config.getServers()); quorumPeer.setTxnFactory(new FileTxnSnapLog(new File(config.getDataLogDir()), new File(config.getDataDir()))); quorumPeer.setElectionType(config.getElectionAlg()); quorumPeer.setMyid(config.getServerId()); quorumPeer.setTickTime(config.getTickTime()); quorumPeer.setInitLimit(config.getInitLimit()); quorumPeer.setSyncLimit(config.getSyncLimit()); // 投票决定方式,默认超过半数就通过 quorumPeer.setQuorumListenOnAllIPs(config.getQuorumListenOnAllIPs()); quorumPeer.setCnxnFactory(cnxnFactory); quorumPeer.setQuorumVerifier(config.getQuorumVerifier()); quorumPeer.setClientPortAddress(config.getClientPortAddress()); quorumPeer.setMinSessionTimeout(config.getMinSessionTimeout()); quorumPeer.setMaxSessionTimeout(config.getMaxSessionTimeout()); quorumPeer.setZKDatabase(new ZKDatabase(quorumPeer.getTxnFactory())); quorumPeer.setLearnerType(config.getPeerType()); quorumPeer.setSyncEnabled(config.getSyncEnabled()); // sets quorum sasl authentication configurations quorumPeer.setQuorumSaslEnabled(config.quorumEnableSasl); if(quorumPeer.isQuorumSaslAuthEnabled()){ quorumPeer.setQuorumServerSaslRequired(config.quorumServerRequireSasl); quorumPeer.setQuorumLearnerSaslRequired(config.quorumLearnerRequireSasl); quorumPeer.setQuorumServicePrincipal(config.quorumServicePrincipal); quorumPeer.setQuorumServerLoginContext(config.quorumServerLoginContext); quorumPeer.setQuorumLearnerLoginContext(config.quorumLearnerLoginContext); } quorumPeer.setQuorumCnxnThreadsSize(config.quorumCnxnThreadsSize); quorumPeer.initialize(); //启动主线程 quorumPeer.start(); quorumPeer.join(); } catch (InterruptedException e) { // warn, but generally this is ok LOG.warn("Quorum Peer interrupted", e); }
} 

leader选举的源码分析-runFromConfig相关推荐

  1. leader选举的源码分析

    源码分析,最关键的是要找到一个入口,对于zk的leader选举,并不是由客户端来触发,而是在启动的时候会触发一次选举.因此我们可以直接去看启动脚本zkServer.sh中的运行命令 ZOOMAIN就是 ...

  2. leader选举的源码分析-startLeaderElection

    看到这个方法,有没有两眼放光的感觉?没错,前面铺垫了这么长,终于进入leader选举的方法了 synchronized public void startLeaderElection() { try ...

  3. leader选举的源码分析-QuorumPeer.start

    QuorumPeer.start方法,重写了Thread的start.也就是在线程启动之前,会做以下操作 1. 通过loadDataBase恢复快照数据 2. cnxnFactory.start()  ...

  4. leader选举的源码分析-Messenger

    在Messenger里面构建了两个线程,一个是WorkerSender,一个是WorkerReceiver. 这两个线程是分别用来发送和接收消息的线程.具体做什么,暂时先不分析. Messenger( ...

  5. leader选举的源码分析-FastLeaderElection

    初始化FastLeaderElection,QuorumCnxManager是一个很核心的对象,用来实现领导选举中的网络连接管理功能,这个后面会用到 public FastLeaderElection ...

  6. leader选举的源码分析-quorumPeer.createElectionAlgorithm

    根据对应的标识创建选举算法 protected Election createElectionAlgorithm(int electionAlgorithm){ Election le=null; / ...

  7. leader选举的源码分析-FastLeaderElection.starter

    starter方法里面,设置了一些成员属性,并且构建了两个阻塞队列,分别是sendQueue和recvqueue.并且实例化了一个Messager private void starter(Quoru ...

  8. 【Zookeeper】源码分析之Leader选举(一)

    一.前言 分析完了Zookeeper中的网络机制后,接着来分析Zookeeper中一个更为核心的模块,Leader选举. 二.总结框架图 对于Leader选举,其总体框架图如下图所示 说明: 选举的父 ...

  9. Zookeeper之Leader选举源码分析

    Zookeeper源码下载地址:https://github.com/apache/zookeeper 1.选举流程 Zookeeeper的Leader选举会分两个过程. 服务启动时的leader选举 ...

最新文章

  1. group by的查询
  2. 修改开发环境、工程、文件的字符集
  3. Linux卸载蓝牙模块,Linux 下调试低功耗蓝牙的笔记
  4. 完成一个休闲网络游戏需要学习的知识
  5. c# 字符串中多个连续空格转为一个空格
  6. AtCoder Regular Contest 120 C - Swaps 2 线段树模拟
  7. 新闻发布项目——实体类(User)
  8. 微型计算机技术怎么学,浅谈微型计算机技术课程的启发式教学
  9. 4、Node.js REPL(交互式解释器)
  10. asp 使用TreeView控件
  11. Layui导航树美化
  12. phpstorm如何同时打开两个文件夹_iPhone如何同时添加两个不同的面容ID?
  13. 计算机网络—计算机网络核心
  14. 【渗透测试】IIS6.0的安装、使用与相关漏洞
  15. Matlab线型、标记符号、颜色
  16. 服务器ghost备份后无法进入系统还原,一键Ghost备份还原解决方法
  17. cesium中测距测面
  18. Hbase hive kudu的区别和使用场景
  19. 支付宝等第三方支付原理与概述
  20. 无盘服务器chkdsk *: /f)修复命令,使用CHKDSK命令修复U盘文件或目录损坏无法读取问题...

热门文章

  1. JDK6笔记(3)----正则表达式
  2. VB.net和c#的区别!
  3. 安卓MediaPlayer框架之Binder机制
  4. 实验十:程序结构与数组 8、数组实训
  5. python基础-元组
  6. 总结了一些指针易出错的常见问题(二)
  7. VxWorks6.6 pcPentium BSP 使用说明(二):创建启动盘
  8. 如何停止一个正在运行的java线程
  9. Oracle PL/SQL 程序设计读书笔记 - 第14章 DML和事务管理
  10. [书目20080220]UML 2工具箱