6 #ifndef BITCOIN_WALLET_BDB_H
7 #define BITCOIN_WALLET_BDB_H
20 #include <unordered_map>
23 #if defined(__GNUC__) && !defined(__clang__)
24 #pragma GCC diagnostic push
25 #pragma GCC diagnostic ignored "-Wsuggest-override"
28 #if defined(__GNUC__) && !defined(__clang__)
29 #pragma GCC diagnostic pop
55 std::map<std::string, std::reference_wrapper<BerkeleyDatabase>>
m_databases;
56 std::unordered_map<std::string, WalletDatabaseFileId>
m_fileids;
70 void Flush(
bool fShutdown);
73 void CloseDb(
const std::string& strFile);
78 DbTxn* ptxn =
nullptr;
79 int ret = dbenv->txn_begin(
nullptr, &ptxn,
flags);
80 if (!ptxn || ret != 0)
87 std::shared_ptr<BerkeleyEnvironment>
GetWalletEnv(
const fs::path& wallet_path, std::string& database_filename);
106 auto inserted = this->env->m_databases.emplace(
strFile, std::ref(*
this));
107 assert(inserted.second);
113 void Open()
override;
117 bool Rewrite(
const char* pszSkip=
nullptr)
override;
126 bool Backup(
const std::string& strDest)
const override;
130 void Flush()
override;
134 void Close()
override;
149 std::string
Format()
override {
return "bdb"; }
159 std::shared_ptr<BerkeleyEnvironment>
env;
167 std::unique_ptr<DatabaseBatch>
MakeBatch(
bool flush_on_close =
true)
override;
182 SafeDbt(
void* data,
size_t size);
216 void Flush()
override;
217 void Close()
override;
235 #endif // BITCOIN_WALLET_BDB_H
bool ExistsBerkeleyDatabase(const fs::path &path)
Check if Berkeley database exists at specified path.
std::unique_ptr< DatabaseBatch > MakeBatch(bool flush_on_close=true) override
Make a BerkeleyBatch connected to this database.
void ReloadDbEnv() override
void Open() override
Open the database if it is not already opened.
BerkeleyEnvironment()
Construct an in-memory mock Berkeley environment for testing.
bool StartCursor() override
std::unordered_map< std::string, WalletDatabaseFileId > m_fileids
BerkeleyDatabase & m_database
BerkeleyBatch(BerkeleyDatabase &database, const bool fReadOnly, bool fFlushOnCloseIn=true)
~BerkeleyBatch() override
bool IsInitialized() const
An instance of this class represents one database.
void Flush() override
Make sure all changes are flushed to database file.
bool IsBDBFile(const fs::path &path)
Check format of database file.
static const unsigned int DEFAULT_WALLET_DBLOGSIZE
Double ended buffer combining vector and stream-like interfaces.
static const bool DEFAULT_WALLET_PRIVDB
BerkeleyDatabase()=delete
std::string Format() override
DbTxn * TxnBegin(int flags=DB_TXN_WRITE_NOSYNC)
std::shared_ptr< BerkeleyEnvironment > env
Pointer to shared database environment.
bool Rewrite(const char *pszSkip=nullptr) override
Rewrite the entire database on disk, with the exception of key pszSkip if non-zero.
std::shared_ptr< BerkeleyEnvironment > GetWalletEnv(const fs::path &wallet_path, std::string &database_filename)
Get BerkeleyEnvironment and database filename given a wallet path.
std::map< std::string, std::reference_wrapper< BerkeleyDatabase > > m_databases
std::unique_ptr< DbEnv > dbenv
bool Backup(const std::string &strDest) const override
Back up the entire database to a file.
void CheckpointLSN(const std::string &strFile)
BerkeleyDatabase(std::shared_ptr< BerkeleyEnvironment > env, std::string filename)
Create DB handle to real database.
bool error(const char *fmt, const Args &...args)
bool WriteKey(CDataStream &&key, CDataStream &&value, bool overwrite=true) override
const void * get_data() const
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.
void RemoveRef() override
Indicate that database user has stopped using the database and that it could be flushed or closed...
RAII class that provides access to a WalletDatabase.
bool HasKey(CDataStream &&key) override
RAII class that provides access to a Berkeley database.
bool PeriodicFlush() override
~BerkeleyDatabase() override
bool EraseKey(CDataStream &&key) override
bool ReadAtCursor(CDataStream &ssKey, CDataStream &ssValue, bool &complete) override
void AddRef() override
Indicate the a new database user has began using the database.
bool operator==(const WalletDatabaseFileId &rhs) const
void IncrementUpdateCounter() override
std::string Filename() override
Return path to main database filename.
void Close() override
Flush to the database file and close the database.
BerkeleyEnvironment * env
u_int8_t value[DB_FILE_ID_LEN]
void Flush(bool fShutdown)
bool Open(bilingual_str &error)
void CloseCursor() override
std::string BerkeleyDatabaseVersion()
u_int32_t get_size() const
void CloseDb(const std::string &strFile)
std::unique_ptr< Db > m_db
Database pointer.
bool Verify(bilingual_str &error)
Verifies the environment and database file.
bool ReadKey(CDataStream &&key, CDataStream &value) override
BerkeleyBatch & operator=(const BerkeleyBatch &)=delete
bool TxnCommit() override
fs::path Directory() const
RAII class that automatically cleanses its data on destruction.
An instance of this class represents one database.
std::condition_variable_any m_db_in_use