Skip to content

Commit 7901647

Browse files
committed
refactor: rename active_chainstate in VerifyDB
To prepare VerifyDB semantics for multiple chainstate use.
1 parent 66fd3b2 commit 7901647

File tree

4 files changed

+30
-19
lines changed

4 files changed

+30
-19
lines changed

src/init.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1554,7 +1554,7 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info)
15541554
// work when we allow VerifyDB to be parameterized by chainstate.
15551555
if (&::ChainstateActive() == chainstate &&
15561556
!CVerifyDB().VerifyDB(
1557-
chainparams, *chainstate, &chainstate->CoinsDB(),
1557+
*chainstate, chainparams, &chainstate->CoinsDB(),
15581558
args.GetArg("-checklevel", DEFAULT_CHECKLEVEL),
15591559
args.GetArg("-checkblocks", DEFAULT_CHECKBLOCKS))) {
15601560
strLoadError = _("Corrupted block database detected");

src/rpc/blockchain.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1239,7 +1239,7 @@ static RPCHelpMan verifychain()
12391239
LOCK(cs_main);
12401240

12411241
CChainState& active_chainstate = chainman.ActiveChainstate();
1242-
return CVerifyDB().VerifyDB(Params(), active_chainstate, &active_chainstate.CoinsTip(), check_level, check_depth);
1242+
return CVerifyDB().VerifyDB(active_chainstate, Params(), &active_chainstate.CoinsTip(), check_level, check_depth);
12431243
},
12441244
};
12451245
}

src/validation.cpp

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4101,17 +4101,21 @@ CVerifyDB::~CVerifyDB()
41014101
uiInterface.ShowProgress("", 100, false);
41024102
}
41034103

4104-
bool CVerifyDB::VerifyDB(const CChainParams& chainparams, CChainState& active_chainstate, CCoinsView *coinsview, int nCheckLevel, int nCheckDepth)
4104+
bool CVerifyDB::VerifyDB(
4105+
CChainState& chainstate,
4106+
const CChainParams& chainparams,
4107+
CCoinsView* coinsview,
4108+
int nCheckLevel, int nCheckDepth)
41054109
{
41064110
AssertLockHeld(cs_main);
41074111

4108-
assert(std::addressof(::ChainstateActive()) == std::addressof(active_chainstate));
4109-
if (active_chainstate.m_chain.Tip() == nullptr || active_chainstate.m_chain.Tip()->pprev == nullptr)
4112+
assert(std::addressof(::ChainstateActive()) == std::addressof(chainstate));
4113+
if (chainstate.m_chain.Tip() == nullptr || chainstate.m_chain.Tip()->pprev == nullptr)
41104114
return true;
41114115

41124116
// Verify blocks in the best chain
4113-
if (nCheckDepth <= 0 || nCheckDepth > active_chainstate.m_chain.Height())
4114-
nCheckDepth = active_chainstate.m_chain.Height();
4117+
if (nCheckDepth <= 0 || nCheckDepth > chainstate.m_chain.Height())
4118+
nCheckDepth = chainstate.m_chain.Height();
41154119
nCheckLevel = std::max(0, std::min(4, nCheckLevel));
41164120
LogPrintf("Verifying last %i blocks at level %i\n", nCheckDepth, nCheckLevel);
41174121
CCoinsViewCache coins(coinsview);
@@ -4121,15 +4125,15 @@ bool CVerifyDB::VerifyDB(const CChainParams& chainparams, CChainState& active_ch
41214125
BlockValidationState state;
41224126
int reportDone = 0;
41234127
LogPrintf("[0%%]..."); /* Continued */
4124-
for (pindex = active_chainstate.m_chain.Tip(); pindex && pindex->pprev; pindex = pindex->pprev) {
4125-
const int percentageDone = std::max(1, std::min(99, (int)(((double)(active_chainstate.m_chain.Height() - pindex->nHeight)) / (double)nCheckDepth * (nCheckLevel >= 4 ? 50 : 100))));
4128+
for (pindex = chainstate.m_chain.Tip(); pindex && pindex->pprev; pindex = pindex->pprev) {
4129+
const int percentageDone = std::max(1, std::min(99, (int)(((double)(chainstate.m_chain.Height() - pindex->nHeight)) / (double)nCheckDepth * (nCheckLevel >= 4 ? 50 : 100))));
41264130
if (reportDone < percentageDone/10) {
41274131
// report every 10% step
41284132
LogPrintf("[%d%%]...", percentageDone); /* Continued */
41294133
reportDone = percentageDone/10;
41304134
}
41314135
uiInterface.ShowProgress(_("Verifying blocks...").translated, percentageDone, false);
4132-
if (pindex->nHeight <= active_chainstate.m_chain.Height()-nCheckDepth)
4136+
if (pindex->nHeight <= chainstate.m_chain.Height()-nCheckDepth)
41334137
break;
41344138
if (fPruneMode && !(pindex->nStatus & BLOCK_HAVE_DATA)) {
41354139
// If pruning, only go back as far as we have data.
@@ -4154,9 +4158,11 @@ bool CVerifyDB::VerifyDB(const CChainParams& chainparams, CChainState& active_ch
41544158
}
41554159
}
41564160
// check level 3: check for inconsistencies during memory-only disconnect of tip blocks
4157-
if (nCheckLevel >= 3 && (coins.DynamicMemoryUsage() + active_chainstate.CoinsTip().DynamicMemoryUsage()) <= active_chainstate.m_coinstip_cache_size_bytes) {
4161+
int64_t curr_coins_usage = coins.DynamicMemoryUsage() + chainstate.CoinsTip().DynamicMemoryUsage();
4162+
4163+
if (nCheckLevel >= 3 && static_cast<unsigned long>(curr_coins_usage) <= chainstate.m_coinstip_cache_size_bytes) {
41584164
assert(coins.GetBestBlock() == pindex->GetBlockHash());
4159-
DisconnectResult res = active_chainstate.DisconnectBlock(block, pindex, coins);
4165+
DisconnectResult res = chainstate.DisconnectBlock(block, pindex, coins);
41604166
if (res == DISCONNECT_FAILED) {
41614167
return error("VerifyDB(): *** irrecoverable inconsistency in block data at %d, hash=%s", pindex->nHeight, pindex->GetBlockHash().ToString());
41624168
}
@@ -4170,26 +4176,26 @@ bool CVerifyDB::VerifyDB(const CChainParams& chainparams, CChainState& active_ch
41704176
if (ShutdownRequested()) return true;
41714177
}
41724178
if (pindexFailure)
4173-
return error("VerifyDB(): *** coin database inconsistencies found (last %i blocks, %i good transactions before that)\n", active_chainstate.m_chain.Height() - pindexFailure->nHeight + 1, nGoodTransactions);
4179+
return error("VerifyDB(): *** coin database inconsistencies found (last %i blocks, %i good transactions before that)\n", chainstate.m_chain.Height() - pindexFailure->nHeight + 1, nGoodTransactions);
41744180

41754181
// store block count as we move pindex at check level >= 4
4176-
int block_count = active_chainstate.m_chain.Height() - pindex->nHeight;
4182+
int block_count = chainstate.m_chain.Height() - pindex->nHeight;
41774183

41784184
// check level 4: try reconnecting blocks
41794185
if (nCheckLevel >= 4) {
4180-
while (pindex != active_chainstate.m_chain.Tip()) {
4181-
const int percentageDone = std::max(1, std::min(99, 100 - (int)(((double)(active_chainstate.m_chain.Height() - pindex->nHeight)) / (double)nCheckDepth * 50)));
4186+
while (pindex != chainstate.m_chain.Tip()) {
4187+
const int percentageDone = std::max(1, std::min(99, 100 - (int)(((double)(chainstate.m_chain.Height() - pindex->nHeight)) / (double)nCheckDepth * 50)));
41824188
if (reportDone < percentageDone/10) {
41834189
// report every 10% step
41844190
LogPrintf("[%d%%]...", percentageDone); /* Continued */
41854191
reportDone = percentageDone/10;
41864192
}
41874193
uiInterface.ShowProgress(_("Verifying blocks...").translated, percentageDone, false);
4188-
pindex = active_chainstate.m_chain.Next(pindex);
4194+
pindex = chainstate.m_chain.Next(pindex);
41894195
CBlock block;
41904196
if (!ReadBlockFromDisk(block, pindex, chainparams.GetConsensus()))
41914197
return error("VerifyDB(): *** ReadBlockFromDisk failed at %d, hash=%s", pindex->nHeight, pindex->GetBlockHash().ToString());
4192-
if (!active_chainstate.ConnectBlock(block, state, pindex, coins, chainparams))
4198+
if (!chainstate.ConnectBlock(block, state, pindex, coins, chainparams))
41934199
return error("VerifyDB(): *** found unconnectable block at %d, hash=%s (%s)", pindex->nHeight, pindex->GetBlockHash().ToString(), state.ToString());
41944200
if (ShutdownRequested()) return true;
41954201
}

src/validation.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -329,7 +329,12 @@ class CVerifyDB {
329329
public:
330330
CVerifyDB();
331331
~CVerifyDB();
332-
bool VerifyDB(const CChainParams& chainparams, CChainState& active_chainstate, CCoinsView *coinsview, int nCheckLevel, int nCheckDepth) EXCLUSIVE_LOCKS_REQUIRED(cs_main);
332+
bool VerifyDB(
333+
CChainState& chainstate,
334+
const CChainParams& chainparams,
335+
CCoinsView* coinsview,
336+
int nCheckLevel,
337+
int nCheckDepth) EXCLUSIVE_LOCKS_REQUIRED(cs_main);
333338
};
334339

335340
enum DisconnectResult

0 commit comments

Comments
 (0)