目录
- QuorumCnxManager
- 数据结构
- 构造函数
- toSend()
- connectOne(sid)
- connectOne(sid, electionAddr)
- QuorumConnectionReqThread
- 数据结构
- run()
- startConnection()
- receiveConnection()
QuorumCnxManager
前面我们介绍过ServerCnxnFactory,它负责管理与客户端的通信,而在选举过程中服务器与服务器之间的最底层的通信则由QuorumCnxManager管理,创建过程如下:
下面先看下数据结构
数据结构
构造函数
toSend()
在选举时服务器会向集群中所有服务器发送自己的投票信息,调用toSend()
向QuorumCnxManager传递待发送的消息
connectOne(sid)
在上一个方法中,如果与待发送信息的服务还未建立连接,则会调用connectOne(sid)方法进行连接
首次启动的话会走第3步。
connectOne(sid, electionAddr)
建立连接的过程通过QuorumConnectionReqThread线程异步进行。
QuorumConnectionReqThread
上一步中会提交QuorumConnectionReqThread线程进行异步建立连接。
数据结构
该线程只有两个参数,一个是待连接服务器的sid,即配置文件server.
后面的数字,另一个是待连接服务器的地址。
run()
获得资源后执行run()
方法
startConnection()
上一步建立连接后会进行一系列的初始化工作,包括创建SendWorker和RecvWorker,并更新senderWorkerMap和queueSendMap
startConnection()
的结果最终建立一对SendWorker和RecvWorker。
receiveConnection()
startConnection()
第7步中如果自己的sid低于接收到的服务器的sid,则这条连接会被关闭,自己只能等待对方主动发起连接申请时再创建收发线程,当对方发起连接申请,ListenerHandler监听到这个请求后会交给receiveConnection()
处理。
每一个对方服务器对应一个SendWorker和RecvWorker。
至此,QuorumCnxManager的工作原理介绍到此。