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
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::shared_ptr< BerkeleyEnvironment > GetWalletEnv(const fs::path &wallet_path, std::string &database_filename)
Get BerkeleyEnvironment and database filename given a wallet path.
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.
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::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 IsBDBFile(const fs::path &path)
Check format of database file.
bool WriteKey(CDataStream &&key, CDataStream &&value, bool overwrite=true) override
const void * get_data() const
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 ExistsBerkeleyDatabase(const fs::path &path)
Check if Berkeley database exists at specified path.
bool HasKey(CDataStream &&key) override
std::string BerkeleyDatabaseVersion()
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
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 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
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