mirror of
https://github.com/ElementsProject/elements.git
synced 2026-08-14 12:43:40 +02: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:
parent
5ee22cdafd
commit
c29f26b47b
3 changed files with 39 additions and 17 deletions
|
|
@ -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.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue