mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-05-21 01:11:43 +02:00
add utilities for deleting on-disk leveldb data
Used in later commits to remove leveldb directories for - invalid snapshot chainstates, and - background-vaildation chainstates that have finished serving their purpose.
This commit is contained in:
parent
252abd1e8b
commit
34d1590331
@ -4767,6 +4767,46 @@ const AssumeutxoData* ExpectedAssumeutxo(
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool DeleteCoinsDBFromDisk(const fs::path db_path, bool is_snapshot)
|
||||||
|
EXCLUSIVE_LOCKS_REQUIRED(::cs_main)
|
||||||
|
{
|
||||||
|
AssertLockHeld(::cs_main);
|
||||||
|
|
||||||
|
if (is_snapshot) {
|
||||||
|
fs::path base_blockhash_path = db_path / node::SNAPSHOT_BLOCKHASH_FILENAME;
|
||||||
|
|
||||||
|
if (fs::exists(base_blockhash_path)) {
|
||||||
|
bool removed = fs::remove(base_blockhash_path);
|
||||||
|
if (!removed) {
|
||||||
|
LogPrintf("[snapshot] failed to remove file %s\n",
|
||||||
|
fs::PathToString(base_blockhash_path));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
LogPrintf("[snapshot] snapshot chainstate dir being removed lacks %s file\n",
|
||||||
|
fs::PathToString(node::SNAPSHOT_BLOCKHASH_FILENAME));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string path_str = fs::PathToString(db_path);
|
||||||
|
LogPrintf("Removing leveldb dir at %s\n", path_str);
|
||||||
|
|
||||||
|
// We have to destruct before this call leveldb::DB in order to release the db
|
||||||
|
// lock, otherwise `DestroyDB` will fail. See `leveldb::~DBImpl()`.
|
||||||
|
const bool destroyed = dbwrapper::DestroyDB(path_str, {}).ok();
|
||||||
|
|
||||||
|
if (!destroyed) {
|
||||||
|
LogPrintf("error: leveldb DestroyDB call failed on %s\n", path_str);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Datadir should be removed from filesystem; otherwise initialization may detect
|
||||||
|
// it on subsequent statups and get confused.
|
||||||
|
//
|
||||||
|
// If the base_blockhash_path removal above fails in the case of snapshot
|
||||||
|
// chainstates, this will return false since leveldb won't remove a non-empty
|
||||||
|
// directory.
|
||||||
|
return destroyed && !fs::exists(db_path);
|
||||||
|
}
|
||||||
|
|
||||||
bool ChainstateManager::ActivateSnapshot(
|
bool ChainstateManager::ActivateSnapshot(
|
||||||
AutoFile& coins_file,
|
AutoFile& coins_file,
|
||||||
const SnapshotMetadata& metadata,
|
const SnapshotMetadata& metadata,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user