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 54 std::map<fs::path, std::reference_wrapper<BerkeleyDatabase>>
m_databases;
55 std::unordered_map<std::string, WalletDatabaseFileId>
m_fileids;
70 void Flush(
bool fShutdown);
78 DbTxn* ptxn =
nullptr;
80 if (!ptxn ||
ret != 0)
87 std::shared_ptr<BerkeleyEnvironment>
GetBerkeleyEnv(
const fs::path& env_directory,
bool use_shared_memory);
103 auto inserted = this->env->m_databases.emplace(
m_filename, std::ref(*
this));
110 void Open()
override;
114 bool Rewrite(
const char* pszSkip=
nullptr)
override;
123 bool Backup(
const std::string& strDest)
const override;
127 void Flush()
override;
131 void Close()
override;
146 std::string
Format()
override {
return "bdb"; }
156 std::shared_ptr<BerkeleyEnvironment>
env;
165 std::unique_ptr<DatabaseBatch>
MakeBatch(
bool flush_on_close =
true)
override;
180 SafeDbt(
void* data,
size_t size);
214 void Flush()
override;
215 void Close()
override;
235 #endif // BITCOIN_WALLET_BDB_H bool EraseKey(CDataStream &&key) 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 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)
bool ReadKey(CDataStream &&key, CDataStream &value) override
std::map< fs::path, std::reference_wrapper< BerkeleyDatabase > > m_databases
uint8_t value[DB_FILE_ID_LEN]
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)
BerkeleyDatabase(std::shared_ptr< BerkeleyEnvironment > env, fs::path filename, const DatabaseOptions &options)
Create DB handle to real database.
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
Double ended buffer combining vector and stream-like interfaces.
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.
DbTxn * TxnBegin(int flags=DB_TXN_WRITE_NOSYNC)
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.
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.
std::string Format() override
~BerkeleyBatch() override
const void * get_data() const
std::string BerkeleyDatabaseVersion()
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.
RAII class that automatically cleanses its data on destruction.
void ReloadDbEnv() override
void CloseCursor() 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.
bool ReadAtCursor(CDataStream &ssKey, CDataStream &ssValue, bool &complete) override
BerkeleyEnvironment * env
bool HasKey(CDataStream &&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:...
bool error(const char *fmt, const Args &... args)
uint32_t get_size() const
~BerkeleyDatabase() override
bool StartCursor() override
An instance of this class represents one database.
bool WriteKey(CDataStream &&key, CDataStream &&value, bool overwrite=true) override
BerkeleyEnvironment()
Construct an in-memory mock Berkeley environment for testing.