6 #ifndef BITCOIN_WALLET_DB_H 7 #define BITCOIN_WALLET_DB_H 21 #include <unordered_map> 48 std::map<std::string, std::reference_wrapper<BerkeleyDatabase>>
m_databases;
49 std::unordered_map<std::string, WalletDatabaseFileId>
m_fileids;
80 typedef std::pair<std::vector<unsigned char>, std::vector<unsigned char> >
KeyValPair;
81 bool Salvage(
const std::string& strFile,
bool fAggressive, std::vector<KeyValPair>& vResult);
83 bool Open(
bool retry);
85 void Flush(
bool fShutdown);
88 void CloseDb(
const std::string& strFile);
93 DbTxn* ptxn =
nullptr;
94 int ret =
dbenv->txn_begin(
nullptr, &ptxn,
flags);
95 if (!ptxn || ret != 0)
108 std::shared_ptr<BerkeleyEnvironment>
GetWalletEnv(
const fs::path& wallet_path, std::string& database_filename);
126 auto inserted = this->env->m_databases.emplace(
strFile, std::ref(*
this));
127 assert(inserted.second);
132 size_t erased =
env->m_databases.erase(
strFile);
138 static std::unique_ptr<BerkeleyDatabase>
Create(
const fs::path& path)
147 return MakeUnique<BerkeleyDatabase>();
153 return MakeUnique<BerkeleyDatabase>(std::make_shared<BerkeleyEnvironment>(),
"");
158 bool Rewrite(
const char* pszSkip=
nullptr);
162 bool Backup(
const std::string& strDest);
166 void Flush(
bool shutdown);
186 std::shared_ptr<BerkeleyEnvironment>
env;
241 static bool Recover(
const fs::path&
file_path,
void *callbackDataIn,
bool (*recoverKVcallback)(
void* callbackData,
CDataStream ssKey,
CDataStream ssValue), std::string& out_backup_filename);
251 template <
typename K,
typename T>
266 bool success =
false;
267 if (datValue.get_data() !=
nullptr) {
273 }
catch (
const std::exception&) {
277 return ret == 0 && success;
280 template <
typename K,
typename T>
281 bool Write(
const K&
key,
const T& value,
bool fOverwrite =
true)
286 assert(!
"Write called on database in read-only mode");
296 ssValue.reserve(10000);
298 SafeDbt datValue(ssValue.data(), ssValue.size());
301 int ret =
pdb->put(
activeTxn, datKey, datValue, (fOverwrite ? 0 : DB_NOOVERWRITE));
305 template <
typename K>
311 assert(!
"Erase called on database in read-only mode");
321 return (ret == 0 || ret == DB_NOTFOUND);
324 template <
typename K>
345 Dbc* pcursor =
nullptr;
346 int ret =
pdb->cursor(
nullptr, &pcursor, 0);
357 int ret = pcursor->get(datKey, datValue, DB_NEXT);
405 return Read(std::string(
"version"), nVersion);
410 return Write(std::string(
"version"), nVersion);
416 #endif // BITCOIN_WALLET_DB_H bool WriteVersion(int nVersion)
Definition: db.h:408
bool fReadOnly
Definition: db.h:228
static std::unique_ptr< BerkeleyDatabase > CreateMock()
Definition: db.h:151
u_int8_t value[DB_FILE_ID_LEN]
Definition: db.h:30
std::pair< std::vector< unsigned char >, std::vector< unsigned char > > KeyValPair
Definition: db.h:80
std::atomic< unsigned int > nUpdateCounter
Definition: db.h:172
static bool VerifyEnvironment(const fs::path &file_path, std::string &errorStr)
Definition: db.cpp:397
Definition: serialize.h:176
unsigned int nLastFlushed
Definition: db.h:174
filename
Definition: custom_dsstore.py:46
std::unique_ptr< Db > m_db
Definition: db.h:189
bool IsInitialized() const
Definition: db.h:58
DbTxn * activeTxn
Definition: db.h:227
std::string strFile
Definition: db.h:192
std::map< std::string, std::reference_wrapper< BerkeleyDatabase > > m_databases
Definition: db.h:48
bool ReadVersion(int &nVersion)
Definition: db.h:402
bool Salvage(const std::string &strFile, bool fAggressive, std::vector< KeyValPair > &vResult)
Definition: db.cpp:447
bool Erase(const K &key)
Definition: db.h:306
static const unsigned int DEFAULT_WALLET_DBLOGSIZE
Definition: db.h:26
VerifyResult Verify(const std::string &strFile, recoverFunc_type recoverFunc, std::string &out_backup_filename)
Definition: db.cpp:272
static bool PeriodicFlush(BerkeleyDatabase &database)
Definition: db.cpp:806
std::condition_variable_any m_db_in_use
Definition: db.h:50
bool Read(const K &key, T &value)
Definition: db.h:252
unsigned int nLastSeen
Definition: db.h:173
DbTxn * TxnBegin(int flags=DB_TXN_WRITE_NOSYNC)
Definition: db.h:91
BerkeleyDatabase(std::shared_ptr< BerkeleyEnvironment > env, std::string filename)
Definition: db.h:123
u_int32_t get_size() const
Definition: db.cpp:318
std::unordered_map< std::string, WalletDatabaseFileId > m_fileids
Definition: db.h:49
BerkeleyBatch(BerkeleyDatabase &database, const char *pszMode="r+", bool fFlushOnCloseIn=true)
Definition: db.cpp:517
std::unique_ptr< DbEnv > dbenv
Definition: db.h:46
void Close()
Definition: db.cpp:616
static std::unique_ptr< BerkeleyDatabase > CreateDummy()
Definition: db.h:145
bool operator==(const WalletDatabaseFileId &rhs) const
Definition: db.cpp:50
void Flush()
Definition: db.cpp:596
const void * get_data() const
Definition: db.cpp:313
bool IsDatabaseLoaded(const std::string &db_filename) const
Definition: db.h:59
bool IsMock() const
Definition: db.h:57
std::shared_ptr< BerkeleyEnvironment > GetWalletEnv(const fs::path &wallet_path, std::string &database_filename)
Definition: db.cpp:98
bool(* recoverFunc_type)(const fs::path &file_path, std::string &out_backup_filename)
Definition: db.h:71
bool Write(const K &key, const T &value, bool fOverwrite=true)
Definition: db.h:281
void reserve(size_type n)
Definition: streams.h:297
value_type * data()
Definition: streams.h:303
static const bool DEFAULT_WALLET_PRIVDB
Definition: db.h:27
std::string strFile
Definition: db.h:226
void Close()
Definition: db.cpp:116
bool IsWalletLoaded(const fs::path &wallet_path)
Definition: db.cpp:71
static bool VerifyDatabaseFile(const fs::path &file_path, std::string &warningStr, std::string &errorStr, BerkeleyEnvironment::recoverFunc_type recoverFunc)
Definition: db.cpp:414
void CheckpointLSN(const std::string &strFile)
Definition: db.cpp:508
void write(const char *pch, size_t nSize)
Definition: streams.h:436
bool fDbEnvInit
Definition: db.h:39
~BerkeleyDatabase()
Definition: db.h:130
void clear()
Definition: streams.h:300
Db * pdb
Definition: db.h:225
file_path
Definition: optimize-pngs.py:41
void Flush(bool fShutdown)
Definition: db.cpp:765
fs::path WalletDataFilePath(const fs::path &wallet_path)
Definition: db.cpp:83
bool Backup(const std::string &strDest)
Definition: db.cpp:854
Dbt m_dbt
Definition: db.h:207
~BerkeleyBatch()
Definition: db.h:234
Dbc * GetCursor()
Definition: db.h:341
std::shared_ptr< BerkeleyEnvironment > env
Definition: db.h:186
VerifyResult
Definition: db.h:68
Definition: streams.h:203
bool fFlushOnClose
Definition: db.h:229
int ReadAtCursor(Dbc *pcursor, CDataStream &ssKey, CDataStream &ssValue)
Definition: db.h:352
BerkeleyBatch & operator=(const BerkeleyBatch &)=delete
fs::path Directory() const
Definition: db.h:60
bool Rewrite(const char *pszSkip=nullptr)
Definition: db.cpp:849
bool fMockDb
Definition: db.h:40
void IncrementUpdateCounter()
Definition: db.cpp:611
int flags
Definition: bitcoin-tx.cpp:507
std::vector< uint8_t > data
Definition: bech32.cpp:10
static bool Recover(const fs::path &file_path, void *callbackDataIn, bool(*recoverKVcallback)(void *callbackData, CDataStream ssKey, CDataStream ssValue), std::string &out_backup_filename)
Definition: db.cpp:328
void CloseDb(const std::string &strFile)
Definition: db.cpp:635
std::map< std::string, int > mapFileUseCount
Definition: db.h:47
bool TxnCommit()
Definition: db.h:384
void Reset()
Definition: db.cpp:147
SafeDbt()
Definition: db.cpp:289
~SafeDbt()
Definition: db.cpp:299
static std::unique_ptr< BerkeleyDatabase > Create(const fs::path &path)
Definition: db.h:138
std::string strPath
Definition: db.h:43
BerkeleyEnvironment * env
Definition: db.h:230
bool IsDummy()
Definition: db.h:198
bool Exists(const K &key)
Definition: db.h:325
void SetType(int n)
Definition: streams.h:394
signed long long int64_t
Definition: stdint.h:18
static bool Rewrite(BerkeleyDatabase &database, const char *pszSkip=nullptr)
Definition: db.cpp:676
void ReloadDbEnv()
Definition: db.cpp:650
bool Open(bool retry)
Definition: db.cpp:166
int64_t nLastWalletUpdate
Definition: db.h:175
void ReloadDbEnv()
Definition: db.cpp:914
void Flush(bool shutdown)
Definition: db.cpp:895
BerkeleyEnvironment()
Construct an in-memory mock Berkeley environment for testing and as a place-holder for g_dbenvs empla...
Definition: db.cpp:241
size_type size() const
Definition: streams.h:294
BerkeleyDatabase()
Definition: db.h:118
static const int CLIENT_VERSION
Definition: clientversion.h:38
~BerkeleyEnvironment()
Definition: db.cpp:159
bool TxnBegin()
Definition: db.h:373
bool TxnAbort()
Definition: db.h:393