Analyse du code source de l'élection du chef

L'analyse du code source, le plus important est de trouver une entrée. Pour l'élection du leader zk, elle n'est pas déclenchée par le client, mais une élection est déclenchée lorsqu'elle est lancée. On peut donc aller directement à la commande run dans le script de démarrage zkServer.sh

ZOOMAIN est QuorumPeerMain. Ensuite, nous l'examinons sur la base de cette entrée

Méthode QuorumPeerMain.main

Dans la méthode principale, initializeAndRun est appelé pour initialiser et exécuter

protected void initializeAndRun(String[] args) throws ConfigException, IOException{ 
	//这段代码比较简单,设置配置参数,如果args不为空,可以基于外部的配置路径来进行解析 
	QuorumPeerConfig config = new QuorumPeerConfig(); 
	if (args.length == 1) { 
		config.parse(args[0]); 
	} 
	// 这里启动了一个线程,来定时对日志进行清理,从命名来看也很容易理解 
	DatadirCleanupManager purgeMgr = new DatadirCleanupManager(config.getDataDir(), config.getDataLogDir(), config.getSnapRetainCount(), config.getPurgeInterval()); 
	purgeMgr.start(); 
	// 如果是集群模式,会调用runFromConfig.servers实际就是我们在zoo.cfg里面配置的集群节点 
	if (args.length == 1 && config.servers.size() > 0) { 
		runFromConfig(config); 
	} else {//否则直接运行单机模式 
	LOG.warn("Either no config or no 
		quorum defined in config, running "+ " in standalone mode"); 
		// there is only server in the quorum -- run as standalone 
		ZooKeeperServerMain.main(args); 
	} 
}

 

Je suppose que tu aimes

Origine blog.csdn.net/Leon_Jinhai_Sun/article/details/112971584
conseillé
Classement