当前位置: 首页 > news >正文

龙岗建网站汕头生态建设典型案例

龙岗建网站,汕头生态建设典型案例,seo网络推广企业,湛江网站建设的详细过程系列文章目录 【zookeeper核心源码解析】第一课:zk启动类核心流程序列图 【zookeeper核心源码解析】第二课:俯瞰QuorumPeer启动核心流程,实现选举关键流程 【zookeeper核心源码解析】第三课:leader与follower何时开始同步&#…

系列文章目录

【zookeeper核心源码解析】第一课:zk启动类核心流程序列图
【zookeeper核心源码解析】第二课:俯瞰QuorumPeer启动核心流程,实现选举关键流程
【zookeeper核心源码解析】第三课:leader与follower何时开始同步,如何同步数据
【zookeeper核心源码解析】第四课:客户端与服务端读写的io核心流程

【zookeeper核心源码解析】第二课:俯瞰QuorumPeer启动核心流程,实现选举关键流程

  • 系列文章目录
  • 1. QuorumPeer.run() 核心流程执行流程进行选举(选举过程与结果)
  • 2. run方法解释


1. QuorumPeer.run() 核心流程执行流程进行选举(选举过程与结果)

 @Overridepublic void run() {setName("QuorumPeer" + "[myid=" + getId() + "]" +cnxnFactory.getLocalAddress());LOG.debug("Starting quorum peer");try {jmxQuorumBean = new QuorumBean(this);MBeanRegistry.getInstance().register(jmxQuorumBean, null);for(QuorumServer s: getView().values()){ZKMBeanInfo p;if (getId() == s.id) {p = jmxLocalPeerBean = new LocalPeerBean(this);try {MBeanRegistry.getInstance().register(p, jmxQuorumBean);} catch (Exception e) {LOG.warn("Failed to register with JMX", e);jmxLocalPeerBean = null;}} else {p = new RemotePeerBean(s);try {MBeanRegistry.getInstance().register(p, jmxQuorumBean);} catch (Exception e) {LOG.warn("Failed to register with JMX", e);}}}} catch (Exception e) {LOG.warn("Failed to register with JMX", e);jmxQuorumBean = null;}try {/** Main loop*/while (running) {switch (getPeerState()) {case LOOKING:LOG.info("LOOKING");if (Boolean.getBoolean("readonlymode.enabled")) {LOG.info("Attempting to start ReadOnlyZooKeeperServer");// Create read-only server but don't start it immediatelyfinal ReadOnlyZooKeeperServer roZk = new ReadOnlyZooKeeperServer(logFactory, this,new ZooKeeperServer.BasicDataTreeBuilder(),this.zkDb);// Instead of starting roZk immediately, wait some grace// period before we decide we're partitioned.//// Thread is used here because otherwise it would require// changes in each of election strategy classes which is// unnecessary code coupling.Thread roZkMgr = new Thread() {public void run() {try {// lower-bound grace period to 2 secssleep(Math.max(2000, tickTime));if (ServerState.LOOKING.equals(getPeerState())) {roZk.startup();}} catch (InterruptedException e) {LOG.info("Interrupted while attempting to start ReadOnlyZooKeeperServer, not started");} catch (Exception e) {LOG.error("FAILED to start ReadOnlyZooKeeperServer", e);}}};try {roZkMgr.start();setCurrentVote(makeLEStrategy().lookForLeader());} catch (Exception e) {LOG.warn("Unexpected exception",e);setPeerState(ServerState.LOOKING);} finally {// If the thread is in the the grace period, interrupt// to come out of waiting.roZkMgr.interrupt();roZk.shutdown();}} else {try {setCurrentVote(makeLEStrategy().lookForLeader());} catch (Exception e) {LOG.warn("Unexpected exception", e);setPeerState(ServerState.LOOKING);}}break;case OBSERVING:try {LOG.info("OBSERVING");setObserver(makeObserver(logFactory));observer.observeLeader();} catch (Exception e) {LOG.warn("Unexpected exception",e );                        } finally {observer.shutdown();setObserver(null);setPeerState(ServerState.LOOKING);}break;case FOLLOWING:try {LOG.info("FOLLOWING");setFollower(makeFollower(logFactory));follower.followLeader();} catch (Exception e) {LOG.warn("Unexpected exception",e);} finally {follower.shutdown();setFollower(null);setPeerState(ServerState.LOOKING);}break;case LEADING:LOG.info("LEADING");try {setLeader(makeLeader(logFactory));leader.lead();setLeader(null);} catch (Exception e) {LOG.warn("Unexpected exception",e);} finally {if (leader != null) {leader.shutdown("Forcing shutdown");setLeader(null);}setPeerState(ServerState.LOOKING);}break;}}} finally {LOG.warn("QuorumPeer main thread exited");try {MBeanRegistry.getInstance().unregisterAll();} catch (Exception e) {LOG.warn("Failed to unregister with JMX", e);}jmxQuorumBean = null;jmxLocalPeerBean = null;}}

2. run方法解释

1.选举状态有四种,一种是LOOKING,FOLLOWING,LEADING,OBSERVING
2. 一开始是Looking状态,进行选举,选举结束后,才决定leader和follower,分别创建leader和follower对象,并执行leader.lead(), follower.followLeader() 的方式,这时,完成leader和follower进程启动

http://www.yayakq.cn/news/578284/

相关文章:

  • 网站动态静态wordpress4.7.8
  • 网站内容策划方案立码软件做网站
  • 四川建设网官网电话深圳关键词排名优化系统
  • 自己网站建设基本流程国内优秀的企业网站
  • 微网站预约网站开发wordpress 优惠主机
  • 东莞网络营销型网站网站开发旅游前台模板
  • php做购物网站怎么注册公司企业微信
  • 精品课程网站设计黄江东莞网站建设
  • 石家庄有什么做网站的公司顺德品牌网站建设价格
  • 青海网站建设费用网站建设与推广推荐
  • 做期货都看那些网站网站开发需要学php吗
  • 黔南网站建设多少钱南城网站建设公司策划
  • 安卓手机网站开发工具网站关键词效果追踪怎么做
  • 房山青岛网站建设校园网站html模板
  • 苏州建网站哪家婴儿网站建设住栏目
  • 个人网站做导购要什么经营许可郑州核酸vip服务
  • 廊坊网络推广建站易企秀类似的软件
  • 网站合作建设合同网站seo教程
  • 做网站 用虚拟服务器iis网站外链是什么意思
  • 建设用地规划许可证查询网站写作网站免费
  • 网站模块名称拖拽式网站
  • 怎么建设一个自己微信网站php网站开发教程
  • 石岩做网站景观小品设计网站推荐
  • wordpress创建多站点网站建设的利弊
  • 团购网站管理系统网站开发服务 退款
  • 西安网站制作开发哪里有信誉好的外贸客户搜索软件
  • 建站优化网站建设公司与前端
  • 移动网站自助制作深圳响应式网站建设
  • 仿土豆网站源码哈尔滨新闻头条最新消息
  • 网站界面设计尺寸规范西安广告设计培训