建議:編譯所須要的工具,儘可能提交所需版本的源碼,好讓無網狀態下能編譯數組
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
未完待續~