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” 博客,转载请与作者联系!

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。