mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-03-05 14:06:27 -05:00
Merge #19142: validation: Make VerifyDB level 4 interruptible
fa3b4f9b8e
validation: Make VerifyDB level 4 interruptible (MarcoFalke)fa1d5800d9
validation: Remove unused boost interruption_point (MarcoFalke) Pull request description: level 0,1,2, and 3 are already interruptible, so make level 4 also interruptible ACKs for top commit: laanwj: Code review ACKfa3b4f9b8e
fanquake: ACKfa3b4f9b8e
Tree-SHA512: d302c84a17add1b5993dd78339c88670d27eee45ce208c4d046ae188b50be9843ee5a9584739d5d25453b54ae08fd1cb6eeee8cb1307d84c05cde8a54a7c445b
This commit is contained in:
commit
584170a388
1 changed files with 3 additions and 9 deletions
|
@ -50,7 +50,6 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#include <boost/algorithm/string/replace.hpp>
|
#include <boost/algorithm/string/replace.hpp>
|
||||||
#include <boost/thread.hpp>
|
|
||||||
|
|
||||||
#if defined(NDEBUG)
|
#if defined(NDEBUG)
|
||||||
# error "Bitcoin cannot be compiled without assertions."
|
# error "Bitcoin cannot be compiled without assertions."
|
||||||
|
@ -2859,8 +2858,6 @@ bool CChainState::ActivateBestChain(BlockValidationState &state, const CChainPar
|
||||||
CBlockIndex *pindexNewTip = nullptr;
|
CBlockIndex *pindexNewTip = nullptr;
|
||||||
int nStopAtHeight = gArgs.GetArg("-stopatheight", DEFAULT_STOPATHEIGHT);
|
int nStopAtHeight = gArgs.GetArg("-stopatheight", DEFAULT_STOPATHEIGHT);
|
||||||
do {
|
do {
|
||||||
boost::this_thread::interruption_point();
|
|
||||||
|
|
||||||
// Block until the validation queue drains. This should largely
|
// Block until the validation queue drains. This should largely
|
||||||
// never happen in normal operation, however may happen during
|
// never happen in normal operation, however may happen during
|
||||||
// reindex, causing memory blowup if we run too far ahead.
|
// reindex, causing memory blowup if we run too far ahead.
|
||||||
|
@ -2929,8 +2926,7 @@ bool CChainState::ActivateBestChain(BlockValidationState &state, const CChainPar
|
||||||
// never shutdown before connecting the genesis block during LoadChainTip(). Previously this
|
// never shutdown before connecting the genesis block during LoadChainTip(). Previously this
|
||||||
// caused an assert() failure during shutdown in such cases as the UTXO DB flushing checks
|
// caused an assert() failure during shutdown in such cases as the UTXO DB flushing checks
|
||||||
// that the best block hash is non-null.
|
// that the best block hash is non-null.
|
||||||
if (ShutdownRequested())
|
if (ShutdownRequested()) break;
|
||||||
break;
|
|
||||||
} while (pindexNewTip != pindexMostWork);
|
} while (pindexNewTip != pindexMostWork);
|
||||||
CheckBlockIndex(chainparams.GetConsensus());
|
CheckBlockIndex(chainparams.GetConsensus());
|
||||||
|
|
||||||
|
@ -4272,7 +4268,6 @@ bool CVerifyDB::VerifyDB(const CChainParams& chainparams, CCoinsView *coinsview,
|
||||||
int reportDone = 0;
|
int reportDone = 0;
|
||||||
LogPrintf("[0%%]..."); /* Continued */
|
LogPrintf("[0%%]..."); /* Continued */
|
||||||
for (pindex = ::ChainActive().Tip(); pindex && pindex->pprev; pindex = pindex->pprev) {
|
for (pindex = ::ChainActive().Tip(); pindex && pindex->pprev; pindex = pindex->pprev) {
|
||||||
boost::this_thread::interruption_point();
|
|
||||||
const int percentageDone = std::max(1, std::min(99, (int)(((double)(::ChainActive().Height() - pindex->nHeight)) / (double)nCheckDepth * (nCheckLevel >= 4 ? 50 : 100))));
|
const int percentageDone = std::max(1, std::min(99, (int)(((double)(::ChainActive().Height() - pindex->nHeight)) / (double)nCheckDepth * (nCheckLevel >= 4 ? 50 : 100))));
|
||||||
if (reportDone < percentageDone/10) {
|
if (reportDone < percentageDone/10) {
|
||||||
// report every 10% step
|
// report every 10% step
|
||||||
|
@ -4318,8 +4313,7 @@ bool CVerifyDB::VerifyDB(const CChainParams& chainparams, CCoinsView *coinsview,
|
||||||
nGoodTransactions += block.vtx.size();
|
nGoodTransactions += block.vtx.size();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ShutdownRequested())
|
if (ShutdownRequested()) return true;
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
if (pindexFailure)
|
if (pindexFailure)
|
||||||
return error("VerifyDB(): *** coin database inconsistencies found (last %i blocks, %i good transactions before that)\n", ::ChainActive().Height() - pindexFailure->nHeight + 1, nGoodTransactions);
|
return error("VerifyDB(): *** coin database inconsistencies found (last %i blocks, %i good transactions before that)\n", ::ChainActive().Height() - pindexFailure->nHeight + 1, nGoodTransactions);
|
||||||
|
@ -4330,7 +4324,6 @@ bool CVerifyDB::VerifyDB(const CChainParams& chainparams, CCoinsView *coinsview,
|
||||||
// check level 4: try reconnecting blocks
|
// check level 4: try reconnecting blocks
|
||||||
if (nCheckLevel >= 4) {
|
if (nCheckLevel >= 4) {
|
||||||
while (pindex != ::ChainActive().Tip()) {
|
while (pindex != ::ChainActive().Tip()) {
|
||||||
boost::this_thread::interruption_point();
|
|
||||||
const int percentageDone = std::max(1, std::min(99, 100 - (int)(((double)(::ChainActive().Height() - pindex->nHeight)) / (double)nCheckDepth * 50)));
|
const int percentageDone = std::max(1, std::min(99, 100 - (int)(((double)(::ChainActive().Height() - pindex->nHeight)) / (double)nCheckDepth * 50)));
|
||||||
if (reportDone < percentageDone/10) {
|
if (reportDone < percentageDone/10) {
|
||||||
// report every 10% step
|
// report every 10% step
|
||||||
|
@ -4344,6 +4337,7 @@ bool CVerifyDB::VerifyDB(const CChainParams& chainparams, CCoinsView *coinsview,
|
||||||
return error("VerifyDB(): *** ReadBlockFromDisk failed at %d, hash=%s", pindex->nHeight, pindex->GetBlockHash().ToString());
|
return error("VerifyDB(): *** ReadBlockFromDisk failed at %d, hash=%s", pindex->nHeight, pindex->GetBlockHash().ToString());
|
||||||
if (!::ChainstateActive().ConnectBlock(block, state, pindex, coins, chainparams))
|
if (!::ChainstateActive().ConnectBlock(block, state, pindex, coins, chainparams))
|
||||||
return error("VerifyDB(): *** found unconnectable block at %d, hash=%s (%s)", pindex->nHeight, pindex->GetBlockHash().ToString(), state.ToString());
|
return error("VerifyDB(): *** found unconnectable block at %d, hash=%s (%s)", pindex->nHeight, pindex->GetBlockHash().ToString(), state.ToString());
|
||||||
|
if (ShutdownRequested()) return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue