非易失性WAL buffer实现解析(二)

本文接着介绍WAL写和读的改造。

1、XLogInsert函数改造:将日志写入NVM,此时不确定CPU CACHE何时刷以及顺序

 当日志量距离上次checkpoint产生的WAL文件个数(wal_segment_size)超过CheckPointSegments时,需要发起checkpoint请求。需要保证WAL buffer空间够用。

2、XLogPageRead读取指定WAL所在页到readBuf

 1)readSource的WAL源不是NVM,默认是XLOG_FROM_ANY && Wal记录所在位置的文件未open或者读取WAL源为流复制且需要的日志还未接收到时需要调用函数WaitForWALToBecomeAvailable打开所需WAL文件。第一次进来时readSource是XLOG_FROM_ANY,所以当使用NVM时也会进入该函数,只是该函数会返回false。

  2)之后,若使用NVM WAL BUFFER并且非备机模式,readSource也不能是流复制,那么需要将日志源改为NVM WAL BUFFER

  3)此时readSource为NVM WAL BUFFER,读取大小设置为一页大小

  4)XLogCtl->pages+targetPagePtr%NvWalSize为读取页的页头地址,调用memcpy将NVM的一页内存拷贝到readBuf中,并将时间线从该日志页第一个记录中解析出来

  5)如果校验该WAL页有效,将当前时间线curFileTLI记为日志页第一个记录中记录的时间线;否则若为主机则直接返回-1,备机的话切换到下一个日志源进行读取

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付 9.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值