mirror of
https://github.com/dashpay/dash.git
synced 2024-12-25 03:52:49 +01:00
merge bitcoin#24789: disallow indexes when running reindex-chainstate
This commit is contained in:
parent
51bc29ee59
commit
f319163815
17
src/init.cpp
17
src/init.cpp
@ -554,8 +554,8 @@ void SetupServerArgs(ArgsManager& argsman)
|
||||
argsman.AddArg("-version", "Print version and exit", ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS);
|
||||
|
||||
argsman.AddArg("-addressindex", strprintf("Maintain a full address index, used to query for the balance, txids and unspent outputs for addresses (default: %u)", DEFAULT_ADDRESSINDEX), ArgsManager::ALLOW_ANY, OptionsCategory::INDEXING);
|
||||
argsman.AddArg("-reindex", "Rebuild chain state and block index from the blk*.dat files on disk", ArgsManager::ALLOW_ANY, OptionsCategory::INDEXING);
|
||||
argsman.AddArg("-reindex-chainstate", "Rebuild chain state from the currently indexed blocks. When in pruning mode or if blocks on disk might be corrupted, use full -reindex instead.", ArgsManager::ALLOW_ANY, OptionsCategory::INDEXING);
|
||||
argsman.AddArg("-reindex", "Rebuild chain state and block index from the blk*.dat files on disk. This will also rebuild active optional indexes.", ArgsManager::ALLOW_ANY, OptionsCategory::INDEXING);
|
||||
argsman.AddArg("-reindex-chainstate", "Rebuild chain state from the currently indexed blocks. When in pruning mode or if blocks on disk might be corrupted, use full -reindex instead. Deactivate all optional indexes before running this.", ArgsManager::ALLOW_ANY, OptionsCategory::INDEXING);
|
||||
argsman.AddArg("-spentindex", strprintf("Maintain a full spent index, used to query the spending txid and input index for an outpoint (default: %u)", DEFAULT_SPENTINDEX), ArgsManager::ALLOW_ANY, OptionsCategory::INDEXING);
|
||||
argsman.AddArg("-timestampindex", strprintf("Maintain a timestamp index for block hashes, used to query blocks hashes by a range of timestamps (default: %u)", DEFAULT_TIMESTAMPINDEX), ArgsManager::ALLOW_ANY, OptionsCategory::INDEXING);
|
||||
argsman.AddArg("-txindex", strprintf("Maintain a full transaction index, used by the getrawtransaction rpc call (default: %u)", DEFAULT_TXINDEX), ArgsManager::ALLOW_ANY, OptionsCategory::INDEXING);
|
||||
@ -1343,6 +1343,19 @@ bool AppInitParameterInteraction(const ArgsManager& args)
|
||||
return InitError(_("No proxy server specified. Use -proxy=<ip> or -proxy=<ip:port>."));
|
||||
}
|
||||
|
||||
if (args.GetBoolArg("-reindex-chainstate", false)) {
|
||||
// indexes that must be deactivated to prevent index corruption, see #24630
|
||||
if (args.GetBoolArg("-coinstatsindex", DEFAULT_COINSTATSINDEX)) {
|
||||
return InitError(_("-reindex-chainstate option is not compatible with -coinstatsindex. Please temporarily disable coinstatsindex while using -reindex-chainstate, or replace -reindex-chainstate with -reindex to fully rebuild all indexes."));
|
||||
}
|
||||
if (g_enabled_filter_types.count(BlockFilterType::BASIC_FILTER)) {
|
||||
return InitError(_("-reindex-chainstate option is not compatible with -blockfilterindex. Please temporarily disable blockfilterindex while using -reindex-chainstate, or replace -reindex-chainstate with -reindex to fully rebuild all indexes."));
|
||||
}
|
||||
if (args.GetBoolArg("-txindex", DEFAULT_TXINDEX)) {
|
||||
return InitError(_("-reindex-chainstate option is not compatible with -txindex. Please temporarily disable txindex while using -reindex-chainstate, or replace -reindex-chainstate with -reindex to fully rebuild all indexes."));
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
const bool fRecoveryEnabled{llmq::QuorumDataRecoveryEnabled()};
|
||||
const bool fQuorumVvecRequestsEnabled{llmq::GetEnabledQuorumVvecSyncEntries().size() > 0};
|
||||
|
@ -245,6 +245,20 @@ class CoinStatsIndexTest(BitcoinTestFramework):
|
||||
res10 = index_node.gettxoutsetinfo('muhash')
|
||||
assert(res8['txouts'] < res10['txouts'])
|
||||
|
||||
self.log.info("Test that the index works with -reindex")
|
||||
|
||||
self.restart_node(1, extra_args=["-coinstatsindex", "-reindex"])
|
||||
res11 = index_node.gettxoutsetinfo('muhash')
|
||||
assert_equal(res11, res10)
|
||||
|
||||
self.log.info("Test that -reindex-chainstate is disallowed with coinstatsindex")
|
||||
|
||||
self.nodes[1].assert_start_raises_init_error(
|
||||
expected_msg='Error: -reindex-chainstate option is not compatible with -coinstatsindex. '
|
||||
'Please temporarily disable coinstatsindex while using -reindex-chainstate, or replace -reindex-chainstate with -reindex to fully rebuild all indexes.',
|
||||
extra_args=['-coinstatsindex', '-reindex-chainstate'],
|
||||
)
|
||||
|
||||
def _test_use_index_option(self):
|
||||
self.log.info("Test use_index option for nodes running the index")
|
||||
|
||||
|
@ -22,7 +22,7 @@ class ReindexTest(BitcoinTestFramework):
|
||||
self.generatetoaddress(self.nodes[0], 3, self.nodes[0].get_deterministic_priv_key().address)
|
||||
blockcount = self.nodes[0].getblockcount()
|
||||
self.stop_nodes()
|
||||
extra_args = [["-reindex-chainstate" if justchainstate else "-reindex"]]
|
||||
extra_args = [["-reindex-chainstate" if justchainstate else "-reindex", "-txindex=0"]]
|
||||
self.start_nodes(extra_args)
|
||||
assert_equal(self.nodes[0].getblockcount(), blockcount) # start_node is blocking on reindex
|
||||
self.log.info("Success")
|
||||
|
@ -251,6 +251,12 @@ class CompactFiltersTest(BitcoinTestFramework):
|
||||
msg = "Error: Cannot set -peerblockfilters without -blockfilterindex."
|
||||
self.nodes[0].assert_start_raises_init_error(expected_msg=msg)
|
||||
|
||||
self.log.info("Test -blockfilterindex with -reindex-chainstate raises an error")
|
||||
self.nodes[0].assert_start_raises_init_error(
|
||||
expected_msg='Error: -reindex-chainstate option is not compatible with -blockfilterindex. '
|
||||
'Please temporarily disable blockfilterindex while using -reindex-chainstate, or replace -reindex-chainstate with -reindex to fully rebuild all indexes.',
|
||||
extra_args=['-blockfilterindex', '-reindex-chainstate'],
|
||||
)
|
||||
|
||||
def compute_last_header(prev_header, hashes):
|
||||
"""Compute the last filter header from a starting header and a sequence of filter hashes."""
|
||||
|
Loading…
Reference in New Issue
Block a user