摘要: tail queue是bdb中用的最多的数据结构. 定义在 src/dbinc/queue.h: 注: TRACEBUF,QMD_TRACE_HEAD等是为了 queue代码的debug, 这里移除出去. 数据结构 ======== ``` // type 即为 用户定义的 类型. 比如 db.h, // struct __db_txn { // * TAILQ_HEAD(__... 阅读全文
posted @ 2016-08-25 09:45 brayden 阅读(736) 评论(0) 推荐(0) 编辑
摘要: 对bdb log来说, 在共享内存中 有一块 buffer, 同时每一个 log cursor 都自带一个 malloc的buf. why? 我认为: region buffer存的是log最末尾, 主要用来写. 毕竟 log 是 顺序写的, 最末尾的 log rec当然最热. 同时 多个 log 阅读全文
posted @ 2016-08-19 15:51 brayden 阅读(234) 评论(0) 推荐(0) 编辑
摘要: # txn.h struct __db_txnregion SH_TAILQ_HEAD(__active) active_txn; SH_TAILQ_HEAD(__mvcc) mvcc_txn; # txn.c, __txn_begin_int(), txn 加入的 buffer version 不可以被看见. MAX_LSN(td->visibl... 阅读全文
posted @ 2016-08-19 15:49 brayden 阅读(230) 评论(0) 推荐(0) 编辑
摘要: 为什么要lockfree 按我的理解, lockfree就是不去 调用操作系统给定的锁机制. 1. 会有system call, and system call is expensive; 比如pthread在linux里调用了futex. 2. 会失去控制, 接下来发生什么看操作系统心情了. 怎么 阅读全文
posted @ 2016-08-17 16:27 brayden 阅读(462) 评论(0) 推荐(0) 编辑
摘要: http://www.cnblogs.com/promise6522/archive/2012/05/09/2493542.html 阅读全文
posted @ 2016-08-17 16:20 brayden 阅读(149) 评论(0) 推荐(0) 编辑
摘要: dirty reader怎样 不被writor block住? 如数据库支持dirty read, 则 所有打开的dbhandle都配置 DB_READ_UNCOMMITTED; 在线程拿到 write锁并做完处理后(比如splite one page), 降为 was_write锁. WWRITE 阅读全文
posted @ 2016-08-17 13:16 brayden 阅读(551) 评论(0) 推荐(0) 编辑
摘要: __memp_alloc() 注: MPOOL_ALLOC_SEARCH_DYN 没有 出现在 bdb document上, 也没出现在 除了mp_alloc外的代码里. 先删了 以便代码清楚. 按 mpool初始化代码来看, 一个hash bucket上 假定为 2.5个buffer. 查找有 三 阅读全文
posted @ 2016-08-17 13:15 brayden 阅读(741) 评论(0) 推荐(0) 编辑
摘要: priority based lru in src/mp/mp_fget.c, __memp_fget(), 初始化 一个page buffer时, 设置其 priority: in src/mp/mp_fget.c, __memp_fput(), 对一个page buffer做put, 使其ref 阅读全文
posted @ 2016-08-17 13:15 brayden 阅读(429) 评论(0) 推荐(0) 编辑
摘要: repmgr_method.c, __repmgr_start_int()repmgr_method.c, __repmgr_start_msg_threads()repmgr_msg.c, __repmgr_msg_thread()message_loop() while ((ret = __re 阅读全文
posted @ 2016-08-17 13:14 brayden 阅读(186) 评论(0) 推荐(0) 编辑
摘要: repmgr/repmgr_net.c, __repmgr_send(): 做send_broadcast, 然后根据policy 对DB_REP_PERMANENT的处理 __repmgr_send_broadcast(): 对每个site, send_connection(). MASTER 发 阅读全文
posted @ 2016-08-17 13:13 brayden 阅读(526) 评论(0) 推荐(0) 编辑