Add --Xhistory-expiry-prune
for enabling optimal RocksDB GC settings
#8675
+79
−5
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
PR description
besu --Xhistory-expiry-prune
will automatically set the following rocksdb GC options based on the testing conducted in #8599:
The config overview displays:
and the full settings are shown in an INFO log:
2025-05-23 09:39:40.179+10:00 | main | INFO | RocksDBKeyValueStorageFactory | History expiry prune is enabled so setting --Xplugin-rocksdb-blockchain-blob-garbage-collection-enabled; --Xplugin-rocksdb-blob-garbage-collection-age-cutoff=0.5; --Xplugin-rocksdb-blob-garbage-collection-force-threshold=0.1
It is still possible to set these options separately.
It is also possible to set these options along with
--Xhistory-expiry-prune
as a way to override the configured settings (though this isn't recommended).For example, if I do
--Xhistory-expiry-prune --Xplugin-rocksdb-blob-garbage-collection-age-cutoff=0.9
to make the age cutoff consider all files for GC, then the user will see this displayed:2025-05-23 09:44:45.810+10:00 | main | INFO | RocksDBKeyValueStorageFactory | History expiry prune is enabled so setting --Xplugin-rocksdb-blockchain-blob-garbage-collection-enabled; --Xplugin-rocksdb-blob-garbage-collection-age-cutoff=0.9; --Xplugin-rocksdb-blob-garbage-collection-force-threshold=0.1
Note,
--Xplugin-rocksdb-blockchain-blob-garbage-collection-enabled
is always forced to true when--Xhistory-expiry-prune
is set because the BLOCKCHAIN column family must have GC enabled in order to reclaim space.As per the GC flags PR #8599:
--Xhistory-expiry-prune
flag sets them. The INFO logs will always show the full settings.Fixed Issue(s)
Fixes #8654
Thanks for sending a pull request! Have you done the following?
doc-change-required
label to this PR if updates are required.Locally, you can run these tests to catch failures early:
./gradlew spotlessApply
./gradlew build
./gradlew acceptanceTest
./gradlew integrationTest
./gradlew ethereum:referenceTests:referenceTests