baidu / braft

An industrial-grade C++ implementation of RAFT consensus algorithm based on brpc, widely used inside Baidu to build highly-available distributed systems.
Apache License 2.0
3.95k stars 881 forks source link

recover log from data corrupt #436

Closed lhsoft closed 7 months ago

lhsoft commented 7 months ago

在物理机宕机的情况下,由于page cache丢失,导致in progress日志部分数据损坏,无法启动 需要提供能力,可以truncate掉损坏的数据启动

ehds commented 5 months ago

我们也遇到了同样的问题,在未开 fsync 的情况下,机器掉电重启后,会发生数据的损坏的情况。

具体表现为:文件末尾的数据全部为 0,导致 checksum 校验失败,也就是文件的长度和文件内容出现了不一致。

我们的文件系统为 ext4(默认为 ordered 模式 https://man7.org/linux/man-pages/man5/ext4.5.html ),程序运行在容器环境,通过文件挂载的方式挂载到容器内。

如果是 ordered 模式,按照文档的说法数据的内容和长度应该是一致的。也就是说即使 page cache 丢了,文件也只会丢失末尾的数据,不应该存在文件长度更新了,而数据没有的情况。

想请教下,你们遇到文件损坏具体是哪种场景。