建议:编译所须要的工具,尽可能提交所需版本的源码,好让无网状态下能编译数组
pmdOptionsCB 数据结构
参数解析器app
_pmdControlleride
一个程序有多种角色函数
_pmdStartup工具
为何启动的时候要对文件进行锁定?ui
_pmdSystemInitspa
包含两个部分:线程
1、_pmdStartuprest
对文件ossOpen() ossLockFile() ossSeekAndRead() ossSeekAndWrite() ossFsync()
2、_optQgmStrategyTable
optQgmStrategyBase[][]
_nameToStrategyMap
krcb->init()
一、初始化线程静态变量pmdEDUCB
二、初始化role的全部control block数组_arrayCBs,并激活
三、记录时间
_pmdPostInit()
1、只在standlone模式下起做用
接着等待一分钟,让各个模块启动成功
pmdEDUMgr:启动EDU_TYPE_PIPESLISTENER类型的engine dispatchable unit
一、eduMgr->startEDU
二、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
未完待续~