doc: Add and edit some comments around assumeutxo

Co-authored-by: Ryan Ofsky <ryan@ofsky.org>
This commit is contained in:
Fabian Jahr 2023-10-03 00:22:37 +02:00
parent 0a39b8cbd8
commit a47fbe7d49
No known key found for this signature in database
GPG Key ID: F13D1E9D890798CD
4 changed files with 15 additions and 14 deletions

View File

@ -1937,6 +1937,8 @@ void PeerManagerImpl::BlockConnected(
} }
} }
// The following task can be skipped since we don't maintain a mempool for
// the ibd/background chainstate.
if (role == ChainstateRole::BACKGROUND) { if (role == ChainstateRole::BACKGROUND) {
return; return;
} }

View File

@ -761,9 +761,10 @@ bool BlockManager::FlushChainstateBlockFile(int tip_height)
{ {
LOCK(cs_LastBlockFile); LOCK(cs_LastBlockFile);
auto& cursor = m_blockfile_cursors[BlockfileTypeForHeight(tip_height)]; auto& cursor = m_blockfile_cursors[BlockfileTypeForHeight(tip_height)];
// If the cursor does not exist, it means an assumeutxo snapshot is loaded,
// but no blocks past the snapshot height have been written yet, so there
// is no data associated with the chainstate, and it is safe not to flush.
if (cursor) { if (cursor) {
// The cursor may not exist after a snapshot has been loaded but before any
// blocks have been downloaded.
return FlushBlockFile(cursor->file_num, /*fFinalize=*/false, /*finalize_undo=*/false); return FlushBlockFile(cursor->file_num, /*fFinalize=*/false, /*finalize_undo=*/false);
} }
return false; return false;

View File

@ -68,8 +68,8 @@
#include <numeric> #include <numeric>
#include <optional> #include <optional>
#include <string> #include <string>
#include <utility>
#include <tuple> #include <tuple>
#include <utility>
using kernel::CCoinsStats; using kernel::CCoinsStats;
using kernel::CoinStatsHashType; using kernel::CoinStatsHashType;
@ -5367,7 +5367,7 @@ bool ChainstateManager::PopulateAndValidateSnapshot(
// ActivateSnapshot(), but is done so that we avoid doing the long work of staging // ActivateSnapshot(), but is done so that we avoid doing the long work of staging
// a snapshot that isn't actually usable. // a snapshot that isn't actually usable.
if (WITH_LOCK(::cs_main, return !CBlockIndexWorkComparator()(ActiveTip(), snapshot_start_block))) { if (WITH_LOCK(::cs_main, return !CBlockIndexWorkComparator()(ActiveTip(), snapshot_start_block))) {
LogPrintf("[snapshot] activation failed - height does not exceed active chainstate\n"); LogPrintf("[snapshot] activation failed - work does not exceed active chainstate\n");
return false; return false;
} }

View File

@ -836,9 +836,10 @@ private:
//! Once this pointer is set to a corresponding chainstate, it will not //! Once this pointer is set to a corresponding chainstate, it will not
//! be reset until init.cpp:Shutdown(). //! be reset until init.cpp:Shutdown().
//! //!
//! This is especially important when, e.g., calling ActivateBestChain() //! It is important for the pointer to not be deleted until shutdown,
//! on all chainstates because we are not able to hold ::cs_main going into //! because cs_main is not always held when the pointer is accessed, for
//! that call. //! example when calling ActivateBestChain, so there's no way you could
//! prevent code from using the pointer while deleting it.
std::unique_ptr<Chainstate> m_ibd_chainstate GUARDED_BY(::cs_main); std::unique_ptr<Chainstate> m_ibd_chainstate GUARDED_BY(::cs_main);
//! A chainstate initialized on the basis of a UTXO snapshot. If this is //! A chainstate initialized on the basis of a UTXO snapshot. If this is
@ -847,17 +848,14 @@ private:
//! Once this pointer is set to a corresponding chainstate, it will not //! Once this pointer is set to a corresponding chainstate, it will not
//! be reset until init.cpp:Shutdown(). //! be reset until init.cpp:Shutdown().
//! //!
//! This is especially important when, e.g., calling ActivateBestChain() //! It is important for the pointer to not be deleted until shutdown,
//! on all chainstates because we are not able to hold ::cs_main going into //! because cs_main is not always held when the pointer is accessed, for
//! that call. //! example when calling ActivateBestChain, so there's no way you could
//! prevent code from using the pointer while deleting it.
std::unique_ptr<Chainstate> m_snapshot_chainstate GUARDED_BY(::cs_main); std::unique_ptr<Chainstate> m_snapshot_chainstate GUARDED_BY(::cs_main);
//! Points to either the ibd or snapshot chainstate; indicates our //! Points to either the ibd or snapshot chainstate; indicates our
//! most-work chain. //! most-work chain.
//!
//! This is especially important when, e.g., calling ActivateBestChain()
//! on all chainstates because we are not able to hold ::cs_main going into
//! that call.
Chainstate* m_active_chainstate GUARDED_BY(::cs_main) {nullptr}; Chainstate* m_active_chainstate GUARDED_BY(::cs_main) {nullptr};
CBlockIndex* m_best_invalid GUARDED_BY(::cs_main){nullptr}; CBlockIndex* m_best_invalid GUARDED_BY(::cs_main){nullptr};