ETCD 源码学习--WAL 实现

在 ETCD 源码学习过程,不会讲解太多的源码知识,只讲解相关的实现机制,需要关注源码细节的朋友可以自行根据文章中的提示,找到相关源码进行学习。

预写式日志(Write Ahead Log, WAL),其核心思想是,所有的修改在提交之前都要先写入 log,通过日志记录描述好数据的改变后,再写入缓存,等缓存区写满后,再往持久层修改数据。目的在于,在系统崩溃后,能够在日志指导下恢复到崩溃前的状态,避免数据丢失。

WAL 详细介绍:https://segmentfault.com/a/1190000018058484

主要文件

代码位置:etcd/wal

1.wal.go
wal 日志的具体实现文件,包括写入日志、切换日志文件、读取 wal 日志、释放文件等操作。wal 文件名命名方式为 seq-index.log,seq 为递增序列号,在每次切换日志是时 seq+1。index 是第一条日志的索引值(物理偏移量)。

2.file_pipline.go
实现文件的预生成,在 wal 运行过程中,run() 函数会生成一个 x.tmp 文件并且预分配好空间(64M),等待 wal log 被写满之后(64M)后,会用这个 x.tmp 作为新的 wal log。
tmp 文件的命名方式为 (count%2).tmp, count 是生成文件的次数。即文件名只可能是 0.tmp 或 1.t

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值