Berkeley DB Replication示例程序(二)
来源:互联网 发布:定额计价软件 编辑:程序博客网 时间:2024/05/19 18:43
在上一篇文章中,我们粗略地介绍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主要监测与当前进程有关节点的连接状态。其处理逻辑:
获取与当前进程建立连接的socket句柄fd,eid,进入一个循环:
1 从fd读取数据,如读取操作不成功,关闭socket,并将相关信息从双向链表中删除,然后判断master eid与eid的关系
1.1 若master是当前节点,则不作处理,因为master没有故障,只是失去了一个client;
1.2 若master eid与eid不等,则表明当前节点不是master(因为只有一个master),是client,而eid代表的节点也是client,master依旧是存在的,故不作处理;
1.3 若当前节点不是master,而eid代表节点是master,此时说明master出现故障了。调用rep_elect选举出新的master,并rep_start。
2 调用rep_process_message,可获得一些消息,根据返回的值(列举一部分)做不同处理
2.1 返回DB_REP_NEWSITE,说明选举出了新的master,则调用connect_site与新的master建立连接并创建新的线程进行hm_loop操作
2.2 返回DB_REP_HOLDELECTION,说明要进行新的一轮选举,则关闭之前可能存在的选举线程,创建新的选举线程
2.3 返回0,判断app->elected,为1则置为0,调用rep_start
do_loop处理逻辑
主要是master写数据到数据库操作
下面的一张图可以大概说明进程中创建的线程:
其中connect_all是调用了函数connect_site,connect_site创建线程进行hm_loop操作。
总结
由示例程序可知,用bdb中的base api实现replication时,关键部分是通信,以及节点的管理和监测。
- Berkeley DB Replication示例程序(二)
- Berkeley DB Replication示例程序(一)
- Berkeley DB示例程序详解 (1)
- Berkeley DB 示例程序详解(2)
- Berkeley DB示例程序详解(3.1)
- Berkeley DB示例程序详解(3.2)
- Berkeley DB (BDB) C语言简单示例
- Berkeley DB(BDB)
- Berkeley DB 1.8.6源代码学习(二)
- Berkeley DB Java Edition 基本示例
- Berkeley DB Java Edition 基本示例
- Berkeley DB Java Edition 基本示例
- Berkeley DB Xml 入门系列之一: 简介与"query"示例程序详解
- Python中的Berkeley DB(1):Hello Berkeley DB
- Berkeley DB(BDB)介绍
- Berkeley DB
- Berkeley DB
- Berkeley DB
- (译)OpenGLES2.0 Iphone开发指引:第二部分,纹理贴图
- C++ 对象的Lua脚本化
- x264命令行参数解释
- 如何在集群中安装Ganglia
- eclipse代码自动提示设置方法
- Berkeley DB Replication示例程序(二)
- 如何实现INotifyPropertyChanged接口(C#)
- 为V3插上梦想翅膀,展翅高飞!
- SQL行列互转
- C++内存分配—new,malloc,GlobalAlloc详解
- 使用json-lib进行Java和JSON之间的转换
- Java Socket实战传输压缩对象
- Matlab鲁棒控制工具箱(Robust Control Toolbox)
- English-全国英语翻译证书