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

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

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

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

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

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

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

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

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

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

发布了289 篇原创文章 · 获赞 85 · 访问量 26万+

猜你喜欢

转载自blog.csdn.net/yanzongshuai/article/details/104218345