Source code analysis of leader election-runFromConfig

As you can see from the name, the startup is based on the configuration file.

So the whole method is to analyze and set the parameters, because these parameters are not used yet, so there is no need to look at them. Look directly at the core code 

quorumPeer.start(), start a thread, then it can be seen from this code that QuorumPeer actually inherits the thread. Then there must be a run method in it

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

 

Guess you like

Origin blog.csdn.net/Leon_Jinhai_Sun/article/details/112971660