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执行后,raft log并未实时物理删除,释放磁盘空间 #978

Closed tdxafpdq closed 1 year ago

tdxafpdq commented 1 year ago

Your question

image

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

sofa-jraft/jraft-core/src/main/java/com/alipay/sofa/jraft/Node.java

Line 271 in 9787367

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

也就是说: jraft执行快照后,调用RocksDBLogStorage#truncatePrefix()方法,raft log从rocksDB删除了 但是查看/log目录 发现并没有真正释放磁盘空间 当重启服务,调用到RocksDBLogStorage#openDB()时,才真正释放了磁盘空间 怎么实现快照时,实时释放磁盘空间?

Your scenes

快照机制snapshot启动策略 #972 ==》追问

Environment

killme2008 commented 1 year ago

请去学习下 rocksdb 的基本知识再来提问。 https://blog.csdn.net/Gloria_y/article/details/118600651

这是rocksdb 的 wal,可以通过 setMaxTotalWalSize 来调整,默认 1G,想设置可以通过 StorageOptionsFactory

https://github.com/sofastack/sofa-jraft/blob/9787367ef1b15de2ea0d10aac2b5d9f4d4302f39/jraft-core/src/main/java/com/alipay/sofa/jraft/util/StorageOptionsFactory.java#L154

tdxafpdq commented 1 year ago

收到,多谢指点!

killme2008 commented 1 year ago

确保使用的是 jraft 1.3.10 及以上版本,更早之前版本在删除 sst 方面还不够快。

tdxafpdq commented 1 year ago

1.3.10.bugfix_2 我使用的版本是这个

tdxafpdq commented 1 year ago

debug调试发现:日志先是写在000450.log文件,重启服务变成了sst文件,执行快照,再重启会删除sst (rocksdb确实不熟悉,我研究一下)