sequioadb源码分析
编译:
建议:编译所需要的工具,尽量提交所需版本的源码,好让无网状态下能编译
源码:
pmdOptionsCB
参数解析器
_pmdController
一个程序有多种角色
_pmdStartup
为什么启动的时候要对文件进行锁定?
_pmdSystemInit
包含两个部分:
1、_pmdStartup
对文件ossOpen() ossLockFile() ossSeekAndRead() ossSeekAndWrite() ossFsync()
2、_optQgmStrategyTable
optQgmStrategyBase[][]
_nameToStrategyMap
krcb->init()
1、初始化线程静态变量pmdEDUCB
2、初始化role的所有control block数组_arrayCBs,并激活
3、记录时间
_pmdPostInit()
1、只在standlone模式下起作用
接着等待一分钟,让各个模块启动成功
pmdEDUMgr:启动EDU_TYPE_PIPESLISTENER类型的engine dispatchable unit
1、eduMgr->startEDU
2、eduMgr->regSystemEDU
最后进入循环等待
EDU<enginedispatchable unit>
由pmdEDUMgr统一管理
所有的EDU类型:EDU_TYPES
每一个类型都对应着一个入口,获取函数:
startEDU() --却由CB去调用执行
createNewEDU()
boost::thread agentThread (pmdEDUEntryPointWrapper, type, cb, arg ) ; --关联cb和入口函数,一个cb绑定一个入口函数
pmdEDUEntryPointWrapper()
pmdEDUEntryPoint()
getEntryFuncByType() –获取入口函数entryFunc<不断等待cb->waitEvent(event,OSS_ONE_SEC),不断处理entryFunc(cb, event._Data)>
各个节点包含的控制模块:control block 每个控制模块应该是一个线程或进程
所有的cb类型:SDB_CB_TYPE
根据类型可以获取各个cb:
基类IcontrolBlock*版
getCBByType()
void*版
getOrgPointByType()封装在各个类型的函数里
Coord(协调节点)
dpsTransCB 标示作用 类似 ID
CoordCB ?
spdFMPMgr 复制组件
Catalog(编目节点)
SDB_DPSCB
dpsTransCB
clsCB
sdbCatalogueCB
SDB_BPSCB
SDB_AUTHCB
Data(数据节点)
SDB_DPSCB
dpsTransCB
clsCB
SDB_BPSCB
共同模块:
SDB_DMSCB
SDB_RTNCB
SQL_CB
aggrBuilder
pmdController 用于初始化 process manager daemon
OM模式:
SDB_DPSCB
dpsTransCB
SDB_BPSCB
SDB_AUTHCB
omManager
单机模式:
略。
重要的类:很多基类都放在sdbInterface.hpp
_IcontrolBlock 控制模块基类 纯虚函数接口子类必须实现
_IEventHander
数据包:Mag.h
MSG_TYPE 32位,RES = REQ | 0x80000000
MsgRouteID 64位
基本的数据结构:
BSONObj
BSONElement
BSONObjBuilder
_qgmBsonPair
重要CB的分析:
aggrBuilder
std::map< std::string,aggrParser* >
pmdController
按角色注册各自Control Block到KRCB
会话信息
Init()
_pTcpListener _pHttpListener处于listen状态<待命状态>
Active()
_restAdptor.init
startEDU()
EDU_TYPE_SYNCCLOCK.
EDU_TYPE_TCPLISTENER
EDU_TYPE_RESTLISTENER
bug:
未完待续~
本文出自 “lzhkai” 博客,转载请与作者联系!
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。