sofastack / sofa-jraft

A production-grade java implementation of RAFT consensus algorithm.
https://www.sofastack.tech/projects/sofa-jraft/
Apache License 2.0
3.57k stars 1.14k forks source link

快照机制snapshot启动策略 #972

Closed tdxafpdq closed 1 year ago

tdxafpdq commented 1 year ago

Your question

sofa-jraft快照机制snapshot,支持配置启动间隔NodeOptions.snapshotIntervalSecs 问题:是否支持配置为cron方式,比如每天凌晨2点启动snapshot?

Your scenes

快照机制snapshot启动时,比较耗时和耗性能,希望闲时启动。

Your advice

既支持配置启动间隔NodeOptions.snapshotIntervalSecs; 又支持配置cron表达式; 以上2种模式,用户通过配置自行选择。

Environment

killme2008 commented 1 year ago

你可以关闭定时机制,自行控制,通过 Node#snapshot 方法

https://github.com/sofastack/sofa-jraft/blob/9787367ef1b15de2ea0d10aac2b5d9f4d4302f39/jraft-core/src/main/java/com/alipay/sofa/jraft/Node.java#L271

tdxafpdq commented 1 year ago

你可以关闭定时机制,自行控制,通过 Node#snapshot 方法

https://github.com/sofastack/sofa-jraft/blob/9787367ef1b15de2ea0d10aac2b5d9f4d4302f39/jraft-core/src/main/java/com/alipay/sofa/jraft/Node.java#L271

Node#snapshot执行之后,raft log文件【000390.log】并没有释放空间; 通过debug调试发现,重启服务调用到RocksDBLogStorage#openDB()时,【000390.log】被物理删除了。

请问,不重启服务,怎么物理删除【000390.log】,释放磁盘空间?

tdxafpdq commented 1 year ago

也就是说: jraft执行快照后,调用RocksDBLogStorage#truncatePrefix()方法,raft log从rocksDB删除了 但是查看/log目录 发现并没有真正释放磁盘空间

当重启服务,调用到RocksDBLogStorage#openDB()时,才真正释放了磁盘空间

怎么实现快照时,实时释放磁盘空间?