mirror of
https://github.com/ElementsProject/elements.git
synced 2026-08-19 13:27:35 +02:00
Merge 767c012665 into merged_master (Bitcoin PR bitcoin/bitcoin#23738)
This commit is contained in:
commit
d1b42f9929
1 changed files with 15 additions and 11 deletions
|
|
@ -5286,6 +5286,17 @@ bool ChainstateManager::ActivateSnapshot(
|
|||
return true;
|
||||
}
|
||||
|
||||
static void FlushSnapshotToDisk(CCoinsViewCache& coins_cache, bool snapshot_loaded)
|
||||
{
|
||||
LOG_TIME_MILLIS_WITH_CATEGORY_MSG_ONCE(
|
||||
strprintf("%s (%.2f MB)",
|
||||
snapshot_loaded ? "saving snapshot chainstate" : "flushing coins cache",
|
||||
coins_cache.DynamicMemoryUsage() / (1000 * 1000)),
|
||||
BCLog::LogFlags::ALL);
|
||||
|
||||
coins_cache.Flush();
|
||||
}
|
||||
|
||||
bool ChainstateManager::PopulateAndValidateSnapshot(
|
||||
CChainState& snapshot_chainstate,
|
||||
CAutoFile& coins_file,
|
||||
|
|
@ -5323,7 +5334,6 @@ bool ChainstateManager::PopulateAndValidateSnapshot(
|
|||
uint64_t coins_left = metadata.m_coins_count;
|
||||
|
||||
LogPrintf("[snapshot] loading coins from snapshot %s\n", base_blockhash.ToString());
|
||||
int64_t flush_now{0};
|
||||
int64_t coins_processed{0};
|
||||
|
||||
while (coins_left > 0) {
|
||||
|
|
@ -5367,19 +5377,14 @@ bool ChainstateManager::PopulateAndValidateSnapshot(
|
|||
const auto snapshot_cache_state = WITH_LOCK(::cs_main,
|
||||
return snapshot_chainstate.GetCoinsCacheSizeState());
|
||||
|
||||
if (snapshot_cache_state >=
|
||||
CoinsCacheSizeState::CRITICAL) {
|
||||
LogPrintf("[snapshot] flushing coins cache (%.2f MB)... ", /* Continued */
|
||||
coins_cache.DynamicMemoryUsage() / (1000 * 1000));
|
||||
flush_now = GetTimeMillis();
|
||||
|
||||
if (snapshot_cache_state >= CoinsCacheSizeState::CRITICAL) {
|
||||
// This is a hack - we don't know what the actual best block is, but that
|
||||
// doesn't matter for the purposes of flushing the cache here. We'll set this
|
||||
// to its correct value (`base_blockhash`) below after the coins are loaded.
|
||||
coins_cache.SetBestBlock(GetRandHash());
|
||||
|
||||
coins_cache.Flush();
|
||||
LogPrintf("done (%.2fms)\n", GetTimeMillis() - flush_now);
|
||||
// No need to acquire cs_main since this chainstate isn't being used yet.
|
||||
FlushSnapshotToDisk(coins_cache, /*snapshot_loaded=*/false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -5409,9 +5414,8 @@ bool ChainstateManager::PopulateAndValidateSnapshot(
|
|||
coins_cache.DynamicMemoryUsage() / (1000 * 1000),
|
||||
base_blockhash.ToString());
|
||||
|
||||
LogPrintf("[snapshot] flushing snapshot chainstate to disk\n");
|
||||
// No need to acquire cs_main since this chainstate isn't being used yet.
|
||||
coins_cache.Flush(); // TODO: if #17487 is merged, add erase=false here for better performance.
|
||||
FlushSnapshotToDisk(coins_cache, /*snapshot_loaded=*/true);
|
||||
|
||||
assert(coins_cache.GetBestBlock() == base_blockhash);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue