db: add StoragePath to CDBWrapper/CCoinsViewDB

This is used in subsequent commits. It allows us to clean up UTXO
snapshot chainstate after background validation completes.
This commit is contained in:
James O'Beirne 2022-02-01 16:22:00 -05:00
parent 29d540b7ad
commit d14bebf100
3 changed files with 23 additions and 1 deletions

View file

@ -128,7 +128,7 @@ static leveldb::Options GetOptions(size_t nCacheSize)
} }
CDBWrapper::CDBWrapper(const fs::path& path, size_t nCacheSize, bool fMemory, bool fWipe, bool obfuscate) CDBWrapper::CDBWrapper(const fs::path& path, size_t nCacheSize, bool fMemory, bool fWipe, bool obfuscate)
: m_name{fs::PathToString(path.stem())} : m_name{fs::PathToString(path.stem())}, m_path{path}, m_is_memory{fMemory}
{ {
penv = nullptr; penv = nullptr;
readoptions.verify_checksums = true; readoptions.verify_checksums = true;

View file

@ -39,6 +39,10 @@ public:
class CDBWrapper; class CDBWrapper;
namespace dbwrapper {
using leveldb::DestroyDB;
}
/** These should be considered an implementation detail of the specific database. /** These should be considered an implementation detail of the specific database.
*/ */
namespace dbwrapper_private { namespace dbwrapper_private {
@ -219,6 +223,12 @@ private:
std::vector<unsigned char> CreateObfuscateKey() const; std::vector<unsigned char> CreateObfuscateKey() const;
//! path to filesystem storage
const fs::path m_path;
//! whether or not the database resides in memory
bool m_is_memory;
public: public:
/** /**
* @param[in] path Location in the filesystem where leveldb data will be stored. * @param[in] path Location in the filesystem where leveldb data will be stored.
@ -268,6 +278,14 @@ public:
return WriteBatch(batch, fSync); return WriteBatch(batch, fSync);
} }
//! @returns filesystem path to the on-disk data.
std::optional<fs::path> StoragePath() {
if (m_is_memory) {
return {};
}
return m_path;
}
template <typename K> template <typename K>
bool Exists(const K& key) const bool Exists(const K& key) const
{ {

View file

@ -9,6 +9,7 @@
#include <coins.h> #include <coins.h>
#include <dbwrapper.h> #include <dbwrapper.h>
#include <sync.h> #include <sync.h>
#include <fs.h>
#include <memory> #include <memory>
#include <optional> #include <optional>
@ -72,6 +73,9 @@ public:
//! Dynamically alter the underlying leveldb cache size. //! Dynamically alter the underlying leveldb cache size.
void ResizeCache(size_t new_cache_size) EXCLUSIVE_LOCKS_REQUIRED(cs_main); void ResizeCache(size_t new_cache_size) EXCLUSIVE_LOCKS_REQUIRED(cs_main);
//! @returns filesystem path to on-disk storage or std::nullopt if in memory.
std::optional<fs::path> StoragePath() { return m_db->StoragePath(); }
}; };
/** Access to the block database (blocks/index/) */ /** Access to the block database (blocks/index/) */