在上一篇文章中,我们粗略地介绍bdb示例程序的框架,这里会对其中的某些部分进行补充,以达到“知其所以然”的效果,充分了解bdb实现replication的方法。
通信
通过跟踪bdb源码,会发现rep_elect,rep_start,rep_process_message等都会调用__rep_send_message,而__rep_send_message调用的是用户自己实现的通信函数,所以send函数必须在调用rep_elect,rep_start,rep_process_message之前注册,即用rep_set_transport注册。
在示例程序中,通信函数是quote_send。
选举
在一个replication group里面,master可能出现故障,这个时候就需要重新选举出一个master。在bdb中,若某一个节点被超过n/2个节点选举,则该节点将成为新的master。选举函数是rep_elect。
在示例程序中,是创建线程来做选举,选举出master之后就要rep_start。
hm_loop处理逻辑
hm_loop主要监测与当前进程有关节点的连接状态。其处理逻辑: