暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

海山数据库(He3DB)源码详解:He3DB-CLOG日志管理器函数(1)

Xiaye_DB 2024-09-23
37

海山数据库(He3DB)源码详解:He3DB-CLOG日志管理器函数(1)

背景

本文主要针对海山数据库中CLOG日志管理器部分关键函数源码进行研读。主要涉及BootStrapCLOG、StartupCLOG

BootStrapCLOG

作用:系统初始化时需要调用该函数,以创建第一个CLOG日志段

函数源码:

void BootStrapCLOG(void) { int slotno; LWLockAcquire(XactSLRULock, LW_EXCLUSIVE); /* Create and zero the first page of the commit log */ slotno = ZeroCLOGPage(0, false); /* Make sure it's written out */ SimpleLruWritePage(XactCtl, slotno); Assert(!XactCtl->shared->page_dirty[slotno]); LWLockRelease(XactSLRULock); }
  • 定义 slotno,用于存储CLOG页面的槽位号
LWLockAcquire(XactSLRULock, LW_EXCLUSIVE);
  • 获取 XactSLRULock锁,该锁mode是 LW_EXCLUSIVE
slotno = ZeroCLOGPage(0, false);
  • 调用 ZeroCLOGPage(0, false)函数,初始化页面编号为0的CLOG页面为0,即第一个CLOG页面,且此时false表示没有需要写入的Xlog信息(详情见 ZeroCLOGPage文档)
SimpleLruWritePage(XactCtl, slotno);
  • 调用 SimpleLruWritePage将上一步初始化的页面(由 slotno槽位号指定)写入磁盘
Assert(!XactCtl->shared->page_dirty[slotno]);
  • 判断该槽对用的page是否为脏,若不会脏,则报错
  • 当数据块(如页面、记录等)被修改后,还没有被同步到磁盘上,那么这些数据就被认为是“脏”的
  • 由于上一步已经执行了 SimpleLruWritePage将页面写入磁盘,所以按照逻辑来讲,这里的槽对应的页面应该是干净的
LWLockRelease(XactSLRULock);
  • 释放XactSLRULock锁

StartupCLOG

作用:启动CLOG日志管理器

函数源码:

void StartupCLOG(void) { TransactionId xid = XidFromFullTransactionId(ShmemVariableCache->nextXid); int pageno = TransactionIdToPage(xid); LWLockAcquire(XactSLRULock, LW_EXCLUSIVE); /* * Initialize our idea of the latest page number. */ XactCtl->shared->latest_page_number = pageno; LWLockRelease(XactSLRULock); }
TransactionId xid = XidFromFullTransactionId(ShmemVariableCache->nextXid);
  • 获取下一个可分配的事务ID。参数 ShmemVariableCache->nextXid存储着下一个即将被分配的事务ID
    • 该参数是由 StartupXLOG进行初始化的
int pageno = TransactionIdToPage(xid);
  • 将获取的事务ID转化为对应的页号,赋值给 pageno
LWLockAcquire(XactSLRULock, LW_EXCLUSIVE);
  • 获取 XactSLRULock锁,mode为 LW_EXCLUSIVE
XactCtl->shared->latest_page_number = pageno;
  • 将上一步获得的页号赋值给 latest_page_number,该变量记录当前CLOG日志中最新的页号
LWLockRelease(XactSLRULock);
  • 释放锁
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论