mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-01-20 07:09:15 +01:00
validation: add CChainState::m_disabled and ChainMan::isUsable
and remove m_snapshot_validated. This state can now be inferred by the number of isUsable chainstates. m_disabled is used to signal that a chainstate should no longer be used by validation logic; it is used as a sentinel when background validation completes or if the snapshot chainstate is found to be invalid. isUsable is a convenience method that incorporates m_disabled.
This commit is contained in:
@@ -4859,12 +4859,8 @@ std::vector<Chainstate*> ChainstateManager::GetAll()
|
||||
LOCK(::cs_main);
|
||||
std::vector<Chainstate*> out;
|
||||
|
||||
if (!IsSnapshotValidated() && m_ibd_chainstate) {
|
||||
out.push_back(m_ibd_chainstate.get());
|
||||
}
|
||||
|
||||
if (m_snapshot_chainstate) {
|
||||
out.push_back(m_snapshot_chainstate.get());
|
||||
for (Chainstate* cs : {m_ibd_chainstate.get(), m_snapshot_chainstate.get()}) {
|
||||
if (this->IsUsable(cs)) out.push_back(cs);
|
||||
}
|
||||
|
||||
return out;
|
||||
@@ -5263,17 +5259,22 @@ bool ChainstateManager::IsSnapshotActive() const
|
||||
void ChainstateManager::MaybeRebalanceCaches()
|
||||
{
|
||||
AssertLockHeld(::cs_main);
|
||||
if (m_ibd_chainstate && !m_snapshot_chainstate) {
|
||||
bool ibd_usable = this->IsUsable(m_ibd_chainstate.get());
|
||||
bool snapshot_usable = this->IsUsable(m_snapshot_chainstate.get());
|
||||
assert(ibd_usable || snapshot_usable);
|
||||
|
||||
if (ibd_usable && !snapshot_usable) {
|
||||
LogPrintf("[snapshot] allocating all cache to the IBD chainstate\n");
|
||||
// Allocate everything to the IBD chainstate.
|
||||
m_ibd_chainstate->ResizeCoinsCaches(m_total_coinstip_cache, m_total_coinsdb_cache);
|
||||
}
|
||||
else if (m_snapshot_chainstate && !m_ibd_chainstate) {
|
||||
else if (snapshot_usable && !ibd_usable) {
|
||||
// If background validation has completed and snapshot is our active chain...
|
||||
LogPrintf("[snapshot] allocating all cache to the snapshot chainstate\n");
|
||||
// Allocate everything to the snapshot chainstate.
|
||||
m_snapshot_chainstate->ResizeCoinsCaches(m_total_coinstip_cache, m_total_coinsdb_cache);
|
||||
}
|
||||
else if (m_ibd_chainstate && m_snapshot_chainstate) {
|
||||
else if (ibd_usable && snapshot_usable) {
|
||||
// If both chainstates exist, determine who needs more cache based on IBD status.
|
||||
//
|
||||
// Note: shrink caches first so that we don't inadvertently overwhelm available memory.
|
||||
|
||||
Reference in New Issue
Block a user