mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-01-20 07:09:15 +01:00
refactor: Delete ChainstateManager::GetAll() method
Just use m_chainstates array instead.
This commit is contained in:
@@ -318,9 +318,16 @@ void BlockManager::FindFilesToPrune(
|
||||
ChainstateManager& chainman)
|
||||
{
|
||||
LOCK2(cs_main, cs_LastBlockFile);
|
||||
// Distribute our -prune budget over all chainstates.
|
||||
// Compute `target` value with maximum size (in bytes) of blocks below the
|
||||
// `last_prune` height which should be preserved and not pruned. The
|
||||
// `target` value will be derived from the -prune preference provided by the
|
||||
// user. If there is a historical chainstate being used to populate indexes
|
||||
// and validate the snapshot, the target is divided by two so half of the
|
||||
// block storage will be reserved for the historical chainstate, and the
|
||||
// other half will be reserved for the most-work chainstate.
|
||||
const int num_chainstates{chainman.HistoricalChainstate() ? 2 : 1};
|
||||
const auto target = std::max(
|
||||
MIN_DISK_SPACE_FOR_BLOCK_FILES, GetPruneTarget() / chainman.GetAll().size());
|
||||
MIN_DISK_SPACE_FOR_BLOCK_FILES, GetPruneTarget() / num_chainstates);
|
||||
const uint64_t target_sync_height = chainman.m_best_header->nHeight;
|
||||
|
||||
if (chain.m_chain.Height() < 0 || target == 0) {
|
||||
|
||||
@@ -66,8 +66,8 @@ static ChainstateLoadResult CompleteChainstateInitialization(
|
||||
return {ChainstateLoadStatus::FAILURE, _("Error initializing block database")};
|
||||
}
|
||||
|
||||
auto is_coinsview_empty = [&](Chainstate* chainstate) EXCLUSIVE_LOCKS_REQUIRED(::cs_main) {
|
||||
return options.wipe_chainstate_db || chainstate->CoinsTip().GetBestBlock().IsNull();
|
||||
auto is_coinsview_empty = [&](Chainstate& chainstate) EXCLUSIVE_LOCKS_REQUIRED(::cs_main) {
|
||||
return options.wipe_chainstate_db || chainstate.CoinsTip().GetBestBlock().IsNull();
|
||||
};
|
||||
|
||||
assert(chainman.m_total_coinstip_cache > 0);
|
||||
@@ -78,12 +78,12 @@ static ChainstateLoadResult CompleteChainstateInitialization(
|
||||
// recalculated by `chainman.MaybeRebalanceCaches()`. The discount factor
|
||||
// is conservatively chosen such that the sum of the caches does not exceed
|
||||
// the allowable amount during this temporary initialization state.
|
||||
double init_cache_fraction = chainman.GetAll().size() > 1 ? 0.2 : 1.0;
|
||||
double init_cache_fraction = chainman.HistoricalChainstate() ? 0.2 : 1.0;
|
||||
|
||||
// At this point we're either in reindex or we've loaded a useful
|
||||
// block tree into BlockIndex()!
|
||||
|
||||
for (Chainstate* chainstate : chainman.GetAll()) {
|
||||
for (const auto& chainstate : chainman.m_chainstates) {
|
||||
LogInfo("Initializing chainstate %s", chainstate->ToString());
|
||||
|
||||
try {
|
||||
@@ -117,7 +117,7 @@ static ChainstateLoadResult CompleteChainstateInitialization(
|
||||
chainstate->InitCoinsCache(chainman.m_total_coinstip_cache * init_cache_fraction);
|
||||
assert(chainstate->CanFlushToDisk());
|
||||
|
||||
if (!is_coinsview_empty(chainstate)) {
|
||||
if (!is_coinsview_empty(*chainstate)) {
|
||||
// LoadChainTip initializes the chain based on CoinsTip()'s best block
|
||||
if (!chainstate->LoadChainTip()) {
|
||||
return {ChainstateLoadStatus::FAILURE, _("Error initializing block database")};
|
||||
@@ -126,9 +126,9 @@ static ChainstateLoadResult CompleteChainstateInitialization(
|
||||
}
|
||||
}
|
||||
|
||||
auto chainstates{chainman.GetAll()};
|
||||
const auto& chainstates{chainman.m_chainstates};
|
||||
if (std::any_of(chainstates.begin(), chainstates.end(),
|
||||
[](const Chainstate* cs) EXCLUSIVE_LOCKS_REQUIRED(cs_main) { return cs->NeedsRedownload(); })) {
|
||||
[](const auto& cs) EXCLUSIVE_LOCKS_REQUIRED(cs_main) { return cs->NeedsRedownload(); })) {
|
||||
return {ChainstateLoadStatus::FAILURE, strprintf(_("Witness data for blocks after height %d requires validation. Please restart with -reindex."),
|
||||
chainman.GetConsensus().SegwitHeight)};
|
||||
};
|
||||
@@ -209,7 +209,7 @@ ChainstateLoadResult LoadChainstate(ChainstateManager& chainman, const CacheSize
|
||||
// Because ValidatedSnapshotCleanup() has torn down chainstates with
|
||||
// ChainstateManager::ResetChainstates(), reinitialize them here without
|
||||
// duplicating the blockindex work above.
|
||||
assert(chainman.GetAll().empty());
|
||||
assert(chainman.m_chainstates.empty());
|
||||
|
||||
chainman.InitializeChainstate(options.mempool);
|
||||
|
||||
@@ -232,14 +232,14 @@ ChainstateLoadResult LoadChainstate(ChainstateManager& chainman, const CacheSize
|
||||
|
||||
ChainstateLoadResult VerifyLoadedChainstate(ChainstateManager& chainman, const ChainstateLoadOptions& options)
|
||||
{
|
||||
auto is_coinsview_empty = [&](Chainstate* chainstate) EXCLUSIVE_LOCKS_REQUIRED(::cs_main) {
|
||||
return options.wipe_chainstate_db || chainstate->CoinsTip().GetBestBlock().IsNull();
|
||||
auto is_coinsview_empty = [&](Chainstate& chainstate) EXCLUSIVE_LOCKS_REQUIRED(::cs_main) {
|
||||
return options.wipe_chainstate_db || chainstate.CoinsTip().GetBestBlock().IsNull();
|
||||
};
|
||||
|
||||
LOCK(cs_main);
|
||||
|
||||
for (Chainstate* chainstate : chainman.GetAll()) {
|
||||
if (!is_coinsview_empty(chainstate)) {
|
||||
for (auto& chainstate : chainman.m_chainstates) {
|
||||
if (!is_coinsview_empty(*chainstate)) {
|
||||
const CBlockIndex* tip = chainstate->m_chain.Tip();
|
||||
if (tip && tip->nTime > GetTime() + MAX_FUTURE_BLOCK_TIME) {
|
||||
return {ChainstateLoadStatus::FAILURE, _("The block database contains a block which appears to be from the future. "
|
||||
|
||||
Reference in New Issue
Block a user