6#ifndef BITCOIN_WALLET_BDB_H
7#define BITCOIN_WALLET_BDB_H
19#include <condition_variable>
23#include <unordered_map>
49 std::map<std::string, std::reference_wrapper<BerkeleyDatabase>>
m_databases;
50 std::unordered_map<std::string, WalletDatabaseFileId>
m_fileids;
65 void Flush(
bool fShutdown);
68 void CloseDb(
const std::string &strFile);
72 DbTxn *ptxn =
nullptr;
73 int ret =
dbenv->txn_begin(
nullptr, &ptxn,
flags);
74 if (!ptxn || ret != 0) {
82std::shared_ptr<BerkeleyEnvironment>
100 std::string filename)
104 this->
env->m_databases.emplace(
strFile, std::ref(*
this));
111 void Open()
override;
117 bool Rewrite(
const char *pszSkip =
nullptr)
override;
131 bool Backup(
const std::string &strDest)
const override;
136 void Flush()
override;
142 void Close()
override;
171 std::shared_ptr<BerkeleyEnvironment>
env;
182 std::unique_ptr<DatabaseBatch>
183 MakeBatch(
bool flush_on_close =
true)
override;
196 SafeDbt(
void *data,
size_t size);
210 bool overwrite =
true)
override;
226 bool fFlushOnCloseIn =
true);
232 void Flush()
override;
233 void Close()
override;
237 bool &complete)
override;
250std::unique_ptr<BerkeleyDatabase>
bool ExistsBerkeleyDatabase(const fs::path &path)
Check if Berkeley database exists at specified path.
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.
static const unsigned int DEFAULT_WALLET_DBLOGSIZE
std::string BerkeleyDatabaseVersion()
std::shared_ptr< BerkeleyEnvironment > GetWalletEnv(const fs::path &wallet_path, std::string &database_filename)
Get BerkeleyEnvironment and database filename given a wallet path.
static const bool DEFAULT_WALLET_PRIVDB
bool IsBerkeleyBtree(const fs::path &path)
Check format of database file.
RAII class that automatically cleanses its data on destruction.
uint32_t get_size() const
const void * get_data() const
RAII class that provides access to a Berkeley database.
BerkeleyBatch(const BerkeleyBatch &)=delete
bool TxnCommit() override
BerkeleyBatch & operator=(const BerkeleyBatch &)=delete
bool WriteKey(CDataStream &&key, CDataStream &&value, bool overwrite=true) override
bool ReadKey(CDataStream &&key, CDataStream &value) override
bool StartCursor() override
void CloseCursor() override
BerkeleyBatch(BerkeleyDatabase &database, const bool fReadOnly, bool fFlushOnCloseIn=true)
BerkeleyEnvironment * env
bool EraseKey(CDataStream &&key) override
~BerkeleyBatch() override
BerkeleyDatabase & m_database
bool HasKey(CDataStream &&key) override
bool ReadAtCursor(CDataStream &ssKey, CDataStream &ssValue, bool &complete) override
An instance of this class represents one database.
std::shared_ptr< BerkeleyEnvironment > env
Pointer to shared database environment.
void IncrementUpdateCounter() override
void ReloadDbEnv() override
std::unique_ptr< DatabaseBatch > MakeBatch(bool flush_on_close=true) override
Make a BerkeleyBatch connected to this database.
~BerkeleyDatabase() override
std::string Filename() override
Return path to main database filename.
bool Rewrite(const char *pszSkip=nullptr) override
Rewrite the entire database on disk, with the exception of key pszSkip if non-zero.
BerkeleyDatabase(std::shared_ptr< BerkeleyEnvironment > envIn, std::string filename)
Create DB handle to real database.
void AddRef() override
Indicate the a new database user has began using the database.
void Flush() override
Make sure all changes are flushed to database file.
void Open() override
Open the database if it is not already opened.
bool PeriodicFlush() override
flush the wallet passively (TRY_LOCK) ideal to be called periodically
void RemoveRef() override
Indicate that database user has stopped using the database and that it could be flushed or closed.
void Close() override
Flush to the database file and close the database.
std::unique_ptr< Db > m_db
Database pointer.
BerkeleyDatabase()=delete
bool Verify(bilingual_str &error)
Verifies the environment and database file.
bool Backup(const std::string &strDest) const override
Back up the entire database to a file.
std::unordered_map< std::string, WalletDatabaseFileId > m_fileids
bool IsInitialized() const
DbTxn * TxnBegin(int flags=DB_TXN_WRITE_NOSYNC)
fs::path Directory() const
std::map< std::string, std::reference_wrapper< BerkeleyDatabase > > m_databases
bool Open(bilingual_str &error)
std::unique_ptr< DbEnv > dbenv
std::condition_variable_any m_db_in_use
void CheckpointLSN(const std::string &strFile)
void Flush(bool fShutdown)
BerkeleyEnvironment()
Construct an in-memory mock Berkeley environment for testing.
void CloseDb(const std::string &strFile)
Double ended buffer combining vector and stream-like interfaces.
RAII class that provides access to a WalletDatabase.
An instance of this class represents one database.
Path class wrapper to block calls to the fs::path(std::string) implicit constructor and the fs::path:...
bool error(const char *fmt, const Args &...args)
static std::string PathToString(const path &path)
Convert path object to byte string.
static path PathFromString(const std::string &string)
Convert byte string to path object.
Implement std::hash so RCUPtr can be used as a key for maps or sets.
bool operator==(const WalletDatabaseFileId &rhs) const
uint8_t value[DB_FILE_ID_LEN]