diff options
author | James O'Beirne <james.obeirne@pm.me> | 2022-04-20 14:59:02 -0400 |
---|---|---|
committer | James O'Beirne <james.obeirne@pm.me> | 2022-09-13 13:30:12 -0400 |
commit | f9f1735f139b6a1f1c7fea50717ff90dc4ba2bce (patch) | |
tree | e6ac4570d221ba23b3778ffd42a84e04eea24a80 /src/validation.cpp | |
parent | d14bebf100aaaa25c7558eeed8b5c536da99885f (diff) | |
download | bitcoin-f9f1735f139b6a1f1c7fea50717ff90dc4ba2bce.tar.xz |
validation: rename snapshot chainstate dir
This changes the snapshot's leveldb chainstate dir name from
`chainstate_[blockhash]` to `chainstate_snapshot`. This simplifies
later logic that loads snapshot data, and enforces the limitation
of a single snapshot at any given time.
Since we still need to persis the blockhash of the base block, we
write that out to a file (`chainstate_snapshot/base_blockhash`) for
later use during initialization, so that we can reinitialize the
snapshot chainstate.
Co-authored-by: Russell Yanofsky <russ@yanofsky.org>
Diffstat (limited to 'src/validation.cpp')
-rw-r--r-- | src/validation.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/validation.cpp b/src/validation.cpp index 402a962a04..0bfa17bb2b 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -1515,7 +1515,7 @@ void Chainstate::InitCoinsDB( fs::path leveldb_name) { if (m_from_snapshot_blockhash) { - leveldb_name += "_" + m_from_snapshot_blockhash->ToString(); + leveldb_name += node::SNAPSHOT_CHAINSTATE_SUFFIX; } m_coins_views = std::make_unique<CoinsViews>( @@ -4837,9 +4837,17 @@ bool ChainstateManager::ActivateSnapshot( static_cast<size_t>(current_coinstip_cache_size * SNAPSHOT_CACHE_PERC)); } - const bool snapshot_ok = this->PopulateAndValidateSnapshot( + bool snapshot_ok = this->PopulateAndValidateSnapshot( *snapshot_chainstate, coins_file, metadata); + // If not in-memory, persist the base blockhash for use during subsequent + // initialization. + if (!in_memory) { + LOCK(::cs_main); + if (!node::WriteSnapshotBaseBlockhash(*snapshot_chainstate)) { + snapshot_ok = false; + } + } if (!snapshot_ok) { WITH_LOCK(::cs_main, this->MaybeRebalanceCaches()); return false; |