vaughn
(Hacker S Jzz0m Dm)
1
【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】
最近在看tikv raft的代码,有个地方很疑惑,CompactLog 的时候没有看到 snapshot, 正常来说 apply 写的时候看着是disable 了 wal 的,如果 CompactLog 只是删除日志,不snapshot, 不会导致数据丢失吗?我看其他的raft框架都是定期snapshot 后,再删除不需要的raft日志
compactlog后,snapshot就是记录一个applyindex
这个index前面的数据都已经应用到了rocksdb-kv里面了,需要的话从那里面拿就行了。
也就是说任何新peer上线后,从0追数据只需要从rocksdb-kv里拿全量,然后根据applyindex+后续的raftlog就能组成一个peer的全量数据。
vaughn
(Hacker S Jzz0m Dm)
4
hi,大佬,感谢回复,请教下CompactLog 是定时检查的,我看的是 tikv2 的部分的代码,并没有看到 Snapshot 的逻辑,CompactLog删除的貌似是根据 Progress 里面拿到最小的 matched 位置,我理解这里应该是日志复制到所有副本后的,并且在本peer apply 后的这些日志,认为是可以删除的,但是咱们 apply 不是 disable 了 wal 吗?apply 后,数据可能只是在 rocksdb memtable 里面吧(disable wal 后重启就丢失了)
这个新版本关了吗?如果关了的话,在compactlog的时候执行个flush应该就行了吧。没看这一块逻辑
vaughn
(Hacker S Jzz0m Dm)
6
在 apply 线程 flush 的时候,是disable 了 wal 的
每次apply的时候执行flush这样性能很差啊,应该是在compact raft log的时候执行flush吧。
vaughn
(Hacker S Jzz0m Dm)
11
我在 compact raft log 的时候,没有看到对应逻辑=。=,只看到了 gc raftlog
那wal关闭还能保证数据不丢这个事儿你再研究研究,怎么保证的不丢失。
你搞清楚后通知我下。