QuromPeer线程
- Leader选举完成之后,Peer确认了自己是Leader的身份,在QuromPeer的主线程中执行Leader的逻辑
- 创建Leader对象,并创建Server绑定在QuorumAddress上,用于和其他Follower之间相互通信
- 调用Leader::lead函数,执行Leader的真正的逻辑
- 调用ZooKeeperServer::loadData,从磁盘中恢复数据和session列表
- 启用新的epoch,zookeeper中的zxid是64位,用于唯一标示一个操作,zxid的高32位是epoch,每次Leader切换加1,低32位为序列号,每次操作加1
- 启动绑定在QuorumAddress上的Server,为每个Follower的连接建立一个LearnerHandler,用于和Follower做交互,这里的逻辑另外单独论述
- 向所有的Follower发送一个NEWLEADER包,宣告自己额Leader身份,并在initLimit时间内等待大多数的Follower完成和Leader的同步,并发送ACK包,表示Follower已经和Leader完成同步并可以对外提供服务