mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-04-19 11:18:09 +02:00
Merge bitcoin/bitcoin#21726: Improve Indices on pruned nodes via prune blockers
71c3f0356cmove-only: Rename index + pruning functional test (Fabian Jahr)de08932efatest: Update test for indices on pruned nodes (Fabian Jahr)825d19839bIndex: Allow coinstatsindex with pruning enabled (Fabian Jahr)f08c9fb0c6Index: Use prune locks for blockfilterindex (Fabian Jahr)2561823531blockstorage: Add prune locks to BlockManager (Fabian Jahr)231fc7b035refactor: Introduce GetFirstStoredBlock helper function (Fabian Jahr) Pull request description: # Motivation The main motivation of this change and only behavior change noticeable by user is to allow running `coinstatsindex` on pruned nodes as has been requested [here for example](https://twitter.com/benthecarman/status/1388170854140452870?s=20). # Background `coinstatsindex` on pruned nodes can be enabled in a much simpler than it is done here but it comes with downside. The ability to run `blockfilterindex`on pruned nodes was added in #15946 but it also added the `blockfilterindex` as a dependency to `validation` and it introduced two new circular dependencies. Enabling `coinstatsindex` on pruned nodes in a similar way would add it as a dependency as well and introduce another circular dependency. Instead, this PR introduces a `m_prune_blockers` map to `BlockManager` as a flexible approach to block pruning. Entities like `blockfilterindex`, for example, can add a key and a height to block pruning over that height. These entities need to update that value to allow more pruning when they are ready. # Alternative approach Upon completing the first draft of this PR I found #19463 as an alternative that follows the same but follows a very different approach. I am listing the main differences here as I see them: - Usage of globals - Blocks pruning with a start and a stop height - Can persist blockers across restarts - Blockers can be set/unset via RPCs Personally, I don't think any of these are necessary to be added here but if the general approach or specific features are more appealing to reviewers I am happy to change to a solution based on that PR or port over specific parts of it here. ACKs for top commit: mzumsande: Code review ACK71c3f0356cryanofsky: Code review ACK71c3f0356c. Changes since last review: just tweaking comments and asserts, and rebasing w0xlt: tACK71c3f0356con signet. Tree-SHA512: de7efda08b44aa31013fbebc47a02cd2de32db170b570f9643e1f013fee0e8e7ca3068952d1acc6e5e74a70910735c5f263437981ad73df841ad945b52d36b71
This commit is contained in:
@@ -82,6 +82,7 @@ EXTENDED_SCRIPTS = [
|
||||
# Longest test should go first, to favor running tests in parallel
|
||||
'feature_pruning.py',
|
||||
'feature_dbcrash.py',
|
||||
'feature_index_prune.py',
|
||||
]
|
||||
|
||||
BASE_SCRIPTS = [
|
||||
@@ -333,7 +334,6 @@ BASE_SCRIPTS = [
|
||||
'feature_help.py',
|
||||
'feature_shutdown.py',
|
||||
'p2p_ibd_txrelay.py',
|
||||
'feature_blockfilterindex_prune.py'
|
||||
# Don't append tests at the end to avoid merge conflicts
|
||||
# Put them in a random line within the section that fits their approximate run-time
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user