Skip to content

Commit 4a0ab35

Browse files
author
MarcoFalke
committed
Merge bitcoin/bitcoin#24626: init: disallow reindex-chainstate when pruning
b281398 init: disallow reindex-chainstate when pruning (Martin Zumsande) Pull request description: The combination of `-reindex-chainstate` and `-prune` currently makes the node stuck in an endless loop: - `LoadChainstate()` will wipe the existing chainstate (so we have no genesis block anymore). It won't clean up unusable block files by calling `CleanupBlockRevFiles()` as for full `-reindex`. - `ThreadImport()` has [logic](https://github.com/bitcoin/bitcoin/blob/91d12344b1e51809c1ef6b630b631a6da00267c3/src/node/blockstorage.cpp#L855) of reloading Genesis after reindexing. This is what makes full `-reindex` work with `-prune` but it's not executed for `-reindex-chainstate`. - Since we still don't have a genesis block, init will wait for it forever in an endless loop ([code](https://github.com/bitcoin/bitcoin/blob/91d12344b1e51809c1ef6b630b631a6da00267c3/src/init.cpp#L1630-L1640)). Fix this by disallowing `-reindex-chainstate` together with `-prune`. This is discouraged in the help for `-reindex-chainstate` anyway ("When in pruning mode or if blocks on disk might be corrupted, use full -reindex instead.") but wasn't enforced. Fixes #24242 ACKs for top commit: MarcoFalke: cr ACK b281398 Tree-SHA512: 7220842daaf9a4f972d82b13b81fdeac2833bf5e665c5b0f8eaf6a4bcd0725c8e97d19ec956ca4b730065a983475bb3a2732713d338f4caf8666ccbf63d4d988
2 parents 7d0e42a + b281398 commit 4a0ab35

File tree

2 files changed

+7
-1
lines changed

2 files changed

+7
-1
lines changed

src/init.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -853,12 +853,14 @@ bool AppInitParameterInteraction(const ArgsManager& args)
853853
nLocalServices = ServiceFlags(nLocalServices | NODE_COMPACT_FILTERS);
854854
}
855855

856-
// if using block pruning, then disallow txindex and coinstatsindex
857856
if (args.GetIntArg("-prune", 0)) {
858857
if (args.GetBoolArg("-txindex", DEFAULT_TXINDEX))
859858
return InitError(_("Prune mode is incompatible with -txindex."));
860859
if (args.GetBoolArg("-coinstatsindex", DEFAULT_COINSTATSINDEX))
861860
return InitError(_("Prune mode is incompatible with -coinstatsindex."));
861+
if (args.GetBoolArg("-reindex-chainstate", false)) {
862+
return InitError(_("Prune mode is incompatible with -reindex-chainstate. Use full -reindex instead."));
863+
}
862864
}
863865

864866
// If -forcednsseed is set to true, ensure -dnsseed has not been set to false

test/functional/feature_pruning.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,10 @@ def test_invalid_command_line_options(self):
141141
expected_msg='Error: Prune mode is incompatible with -coinstatsindex.',
142142
extra_args=['-prune=550', '-coinstatsindex'],
143143
)
144+
self.nodes[0].assert_start_raises_init_error(
145+
expected_msg='Error: Prune mode is incompatible with -reindex-chainstate. Use full -reindex instead.',
146+
extra_args=['-prune=550', '-reindex-chainstate'],
147+
)
144148

145149
def test_height_min(self):
146150
assert os.path.isfile(os.path.join(self.prunedir, "blk00000.dat")), "blk00000.dat is missing, pruning too early"

0 commit comments

Comments
 (0)