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:

未完待续~

时间: 2024-10-10 22:41:54

sequioadb源码分析的相关文章

sequioadb源码分析2

具体的分布式模块.数据文件的组织格式.元数据部分还没看,待续...

TeamTalk源码分析之login_server

login_server是TeamTalk的登录服务器,负责分配一个负载较小的MsgServer给客户端使用,按照新版TeamTalk完整部署教程来配置的话,login_server的服务端口就是8080,客户端登录服务器地址配置如下(这里是win版本客户端): 1.login_server启动流程 login_server的启动是从login_server.cpp中的main函数开始的,login_server.cpp所在工程路径为server\src\login_server.下表是logi

Android触摸屏事件派发机制详解与源码分析二(ViewGroup篇)

1 背景 还记得前一篇<Android触摸屏事件派发机制详解与源码分析一(View篇)>中关于透过源码继续进阶实例验证模块中存在的点击Button却触发了LinearLayout的事件疑惑吗?当时说了,在那一篇咱们只讨论View的触摸事件派发机制,这个疑惑留在了这一篇解释,也就是ViewGroup的事件派发机制. PS:阅读本篇前建议先查看前一篇<Android触摸屏事件派发机制详解与源码分析一(View篇)>,这一篇承接上一篇. 关于View与ViewGroup的区别在前一篇的A

HashMap与TreeMap源码分析

1. 引言     在红黑树--算法导论(15)中学习了红黑树的原理.本来打算自己来试着实现一下,然而在看了JDK(1.8.0)TreeMap的源码后恍然发现原来它就是利用红黑树实现的(很惭愧学了Java这么久,也写过一些小项目,也使用过TreeMap无数次,但到现在才明白它的实现原理).因此本着"不要重复造轮子"的思想,就用这篇博客来记录分析TreeMap源码的过程,也顺便瞅一瞅HashMap. 2. 继承结构 (1) 继承结构 下面是HashMap与TreeMap的继承结构: pu

Linux内核源码分析--内核启动之(5)Image内核启动(rest_init函数)(Linux-3.0 ARMv7)【转】

原文地址:Linux内核源码分析--内核启动之(5)Image内核启动(rest_init函数)(Linux-3.0 ARMv7) 作者:tekkamanninja 转自:http://blog.chinaunix.net/uid-25909619-id-4938395.html 前面粗略分析start_kernel函数,此函数中基本上是对内存管理和各子系统的数据结构初始化.在内核初始化函数start_kernel执行到最后,就是调用rest_init函数,这个函数的主要使命就是创建并启动内核线

Spark的Master和Worker集群启动的源码分析

基于spark1.3.1的源码进行分析 spark master启动源码分析 1.在start-master.sh调用master的main方法,main方法调用 def main(argStrings: Array[String]) { SignalLogger.register(log) val conf = new SparkConf val args = new MasterArguments(argStrings, conf) val (actorSystem, _, _, _) =

Solr4.8.0源码分析(22)之 SolrCloud的Recovery策略(三)

Solr4.8.0源码分析(22)之 SolrCloud的Recovery策略(三) 本文是SolrCloud的Recovery策略系列的第三篇文章,前面两篇主要介绍了Recovery的总体流程,以及PeerSync策略.本文以及后续的文章将重点介绍Replication策略.Replication策略不但可以在SolrCloud中起到leader到replica的数据同步,也可以在用多个单独的Solr来实现主从同步.本文先介绍在SolrCloud的leader到replica的数据同步,下一篇

zg手册 之 python2.7.7源码分析(4)-- pyc字节码文件

什么是字节码 python解释器在执行python脚本文件时,对文件中的python源代码进行编译,编译的结果就是byte code(字节码) python虚拟机执行编译好的字节码,完成程序的运行 python会为导入的模块创建字节码文件 字节码文件的创建过程 当a.py依赖b.py时,如在a.py中import b python先检查是否有b.pyc文件(字节码文件),如果有,并且修改时间比b.py晚,就直接调用b.pyc 否则编译b.py生成b.pyc,然后加载新生成的字节码文件 字节码对象

LevelDB源码分析--Iterator

我们先来参考来至使用Iterator简化代码2-TwoLevelIterator的例子,略微修改希望能帮助更加容易立即,如果有不理解请各位看客阅读原文. 下面我们再来看一个例子,我们为一个书店写程序,书店里有许多书Book,每个书架(BookShelf)上有多本书. 类结构如下所示 class Book { private: string book_name_; }; class Shelf { private: vector<Book> books_; }; 如何遍历书架上所有的书呢?一种实