leader选举的源码分析-startLeaderElection

该段代码展示了Zookeeper中启动领导者选举的过程,包括创建投票、获取服务器配置信息、匹配选举算法等步骤。核心是根据`electionType`选择不同的选举算法,并通过`DatagramSocket`进行通信。此部分涉及到分布式系统中的领导者选举和一致性维护。
摘要由CSDN通过智能技术生成

看到这个方法,有没有两眼放光的感觉?没错,前面铺垫了这么长,终于进入leader选举的方法了

synchronized public void startLeaderElection() { 
	try { 
		//构建一个票据,用于投票 
		currentVote = new Vote(myid, 
		getLastLoggedZxid(), getCurrentEpoch()); 
	} catch(IOException e) { 
		RuntimeException re = new 
		RuntimeException(e.getMessage()); 
		re.setStackTrace(e.getStackTrace()); 
		throw re; 
	} 
	//这个getView返回的就是在配置文件中配置的server.myid=ip:port:port。view在哪里解析的呢? 
	for (QuorumServer p : getView().values()) { 
		if (p.id == myid) {//获得当前zkserver myid对应的ip地址 
			myQuorumAddr = p.addr; 
			break; 
		} 
	} 
	if (myQuorumAddr == null) { 
		throw new RuntimeException("My id " + myid + " not in the peer list"); 
	} 
	//根据electionType匹配对应的选举算法,electionType默认值为3.可以在配置文件中动态配置 
	if (electionType == 0) { 
		try { 
			udpSocket = new 
			DatagramSocket(myQuorumAddr.getPort()); 
			responder = new ResponderThread(); 
			responder.start(); 
		} catch (SocketException e) { 
			throw new RuntimeException(e); 
		} 
	} 
	this.electionAlg = createElectionAlgorithm(electionType); 
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值