6 #ifndef BITCOIN_WALLET_BDB_H 7 #define BITCOIN_WALLET_BDB_H 17 #include <condition_variable> 21 #include <unordered_map> 33 #define BDB_DB_FILE_ID_LEN 20 55 std::map<fs::path, std::reference_wrapper<BerkeleyDatabase>>
m_databases;
56 std::unordered_map<std::string, WalletDatabaseFileId>
m_fileids;
71 void Flush(
bool fShutdown);
81 std::shared_ptr<BerkeleyEnvironment>
GetBerkeleyEnv(
const fs::path& env_directory,
bool use_shared_memory);
103 bool Rewrite(
const char* pszSkip=
nullptr)
override;
112 bool Backup(
const std::string& strDest)
const override;
116 void Flush()
override;
120 void Close()
override;
135 std::string
Format()
override {
return "bdb"; }
145 std::shared_ptr<BerkeleyEnvironment>
env;
157 std::unique_ptr<DatabaseBatch>
MakeBatch(
bool flush_on_close =
true)
override;
203 void Flush()
override;
204 void Close()
override;
206 std::unique_ptr<DatabaseCursor>
GetNewCursor()
override;
224 #endif // BITCOIN_WALLET_BDB_H bool WriteKey(DataStream &&key, DataStream &&value, bool overwrite=true) override
static path PathFromString(const std::string &string)
Convert byte string to path object.
BerkeleyBatch(BerkeleyDatabase &database, const bool fReadOnly, bool fFlushOnCloseIn=true)
fs::path Directory() const
void RemoveRef() override
Indicate that database user has stopped using the database and that it could be flushed or closed...
bool ErasePrefix(Span< const std::byte > prefix) override
bool BerkeleyDatabaseSanityCheck()
Perform sanity check of runtime BDB version versus linked BDB version.
std::unique_ptr< DbEnv > dbenv
bool IsInitialized() const
bool TxnCommit() override
void CloseDb(const fs::path &filename)
std::map< fs::path, std::reference_wrapper< BerkeleyDatabase > > m_databases
void AddRef() override
Indicate that a new database user has begun using the database.
std::unique_ptr< Db > m_db
Database pointer.
void Close() override
Flush to the database file and close the database.
void CheckpointLSN(const std::string &strFile)
bool ReadKey(DataStream &&key, DataStream &value) override
#define BDB_DB_FILE_ID_LEN
void Flush(bool fShutdown)
bool Open(bilingual_str &error)
void IncrementUpdateCounter() override
BerkeleyBatch & operator=(const BerkeleyBatch &)=delete
std::unordered_map< std::string, WalletDatabaseFileId > m_fileids
std::condition_variable_any m_db_in_use
BerkeleyDatabase()=delete
std::shared_ptr< BerkeleyEnvironment > GetBerkeleyEnv(const fs::path &env_directory, bool use_shared_memory)
Get BerkeleyEnvironment given a directory path.
RAII class that provides access to a WalletDatabase.
bool operator==(const WalletDatabaseFileId &rhs) const
BerkeleyDatabase & m_database
bool Backup(const std::string &strDest) const override
Back up the entire database to a file.
bool PeriodicFlush() override
bool Verify(bilingual_str &error)
Verifies the environment and database file.
std::unique_ptr< BerkeleyDatabase > MakeBerkeleyDatabase(const fs::path &path, const DatabaseOptions &options, DatabaseStatus &status, bilingual_str &error)
Return object giving access to Berkeley database at specified path.
Status Next(DataStream &key, DataStream &value) override
~BerkeleyCursor() override
static std::string PathToString(const path &path)
Convert path object to a byte string.
void Flush() override
Make sure all changes are flushed to database file.
Double ended buffer combining vector and stream-like interfaces.
BerkeleyCursor(BerkeleyDatabase &database, const BerkeleyBatch &batch, Span< const std::byte > prefix={})
std::string Format() override
~BerkeleyBatch() override
std::string BerkeleyDatabaseVersion()
std::unique_ptr< DatabaseCursor > GetNewPrefixCursor(Span< const std::byte > prefix) override
DbTxn * TxnBegin(int flags)
std::unique_ptr< DatabaseBatch > MakeBatch(bool flush_on_close=true) override
Make a BerkeleyBatch connected to this database.
An instance of this class represents one database.
std::unique_ptr< DatabaseCursor > GetNewCursor() override
void ReloadDbEnv() override
void Open() override
Open the database if it is not already opened.
bool Rewrite(const char *pszSkip=nullptr) override
Rewrite the entire database on disk, with the exception of key pszSkip if non-zero.
RAII class that provides access to a Berkeley database.
uint8_t value[BDB_DB_FILE_ID_LEN]
BerkeleyEnvironment * env
std::vector< std::byte > m_key_prefix
bool EraseKey(DataStream &&key) override
bool HasKey(DataStream &&key) override
std::shared_ptr< BerkeleyEnvironment > env
Pointer to shared database environment.
std::string Filename() override
Return path to main database filename.
Path class wrapper to block calls to the fs::path(std::string) implicit constructor and the fs::path:...
~BerkeleyDatabase() override
An instance of this class represents one database.
BerkeleyEnvironment()
Construct an in-memory mock Berkeley environment for testing.