mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-25 02:33:24 -03:00
validation: report if pruning prevents completion of verification
Now the verifychain RPC returns false if the checks didn't finish because the blocks requested to be queried have been pruned.
This commit is contained in:
parent
0c7785bb25
commit
57ef2a4812
4 changed files with 10 additions and 3 deletions
|
@ -194,6 +194,7 @@ ChainstateLoadResult VerifyLoadedChainstate(ChainstateManager& chainman, const C
|
|||
switch (result) {
|
||||
case VerifyDBResult::SUCCESS:
|
||||
case VerifyDBResult::INTERRUPTED:
|
||||
case VerifyDBResult::SKIPPED_MISSING_BLOCKS:
|
||||
break;
|
||||
case VerifyDBResult::CORRUPTED_BLOCK_DB:
|
||||
return {ChainstateLoadStatus::FAILURE, _("Corrupted block database detected")};
|
||||
|
|
|
@ -4081,6 +4081,7 @@ VerifyDBResult CVerifyDB::VerifyDB(
|
|||
int nGoodTransactions = 0;
|
||||
BlockValidationState state;
|
||||
int reportDone = 0;
|
||||
bool skipped_no_block_data{false};
|
||||
bool skipped_l3_checks{false};
|
||||
LogPrintf("Verification progress: 0%%\n");
|
||||
|
||||
|
@ -4100,7 +4101,8 @@ VerifyDBResult CVerifyDB::VerifyDB(
|
|||
if ((chainstate.m_blockman.IsPruneMode() || is_snapshot_cs) && !(pindex->nStatus & BLOCK_HAVE_DATA)) {
|
||||
// If pruning or running under an assumeutxo snapshot, only go
|
||||
// back as far as we have data.
|
||||
LogPrintf("VerifyDB(): block verification stopping at height %d (pruning, no data)\n", pindex->nHeight);
|
||||
LogPrintf("VerifyDB(): block verification stopping at height %d (no data). This could be due to pruning or use of an assumeutxo snapshot.\n", pindex->nHeight);
|
||||
skipped_no_block_data = true;
|
||||
break;
|
||||
}
|
||||
CBlock block;
|
||||
|
@ -4188,6 +4190,9 @@ VerifyDBResult CVerifyDB::VerifyDB(
|
|||
if (skipped_l3_checks) {
|
||||
return VerifyDBResult::SKIPPED_L3_CHECKS;
|
||||
}
|
||||
if (skipped_no_block_data) {
|
||||
return VerifyDBResult::SKIPPED_MISSING_BLOCKS;
|
||||
}
|
||||
return VerifyDBResult::SUCCESS;
|
||||
}
|
||||
|
||||
|
|
|
@ -354,6 +354,7 @@ enum class VerifyDBResult {
|
|||
CORRUPTED_BLOCK_DB,
|
||||
INTERRUPTED,
|
||||
SKIPPED_L3_CHECKS,
|
||||
SKIPPED_MISSING_BLOCKS,
|
||||
};
|
||||
|
||||
/** RAII wrapper for VerifyDB: Verify consistency of the block and coin databases */
|
||||
|
|
|
@ -223,8 +223,8 @@ class PruneTest(BitcoinTestFramework):
|
|||
def reorg_back(self):
|
||||
# Verify that a block on the old main chain fork has been pruned away
|
||||
assert_raises_rpc_error(-1, "Block not available (pruned data)", self.nodes[2].getblock, self.forkhash)
|
||||
with self.nodes[2].assert_debug_log(expected_msgs=['block verification stopping at height', '(pruning, no data)']):
|
||||
self.nodes[2].verifychain(checklevel=4, nblocks=0)
|
||||
with self.nodes[2].assert_debug_log(expected_msgs=['block verification stopping at height', '(no data)']):
|
||||
assert not self.nodes[2].verifychain(checklevel=4, nblocks=0)
|
||||
self.log.info(f"Will need to redownload block {self.forkheight}")
|
||||
|
||||
# Verify that we have enough history to reorg back to the fork point
|
||||
|
|
Loading…
Add table
Reference in a new issue