leader选举的源码分析-runFromConfig

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

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

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); 
	} 
} 

猜你喜欢

转载自blog.csdn.net/Leon_Jinhai_Sun/article/details/112971660
今日推荐