Análisis del código fuente de la elección del líder ejecutada

Como puede ver en el nombre, el inicio se basa en el archivo de configuración.

Entonces, el método completo es analizar y establecer los parámetros, porque estos parámetros aún no se utilizan, por lo que no es necesario mirarlos. Mira directamente el código central 

quorumPeer.start (), inicia un hilo, luego se puede ver en este código que QuorumPeer realmente hereda el hilo. Entonces debe haber un método de ejecución en él

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

 

Supongo que te gusta

Origin blog.csdn.net/Leon_Jinhai_Sun/article/details/112971660
Recomendado
Clasificación