merge bitcoin#20130: remove db mode string

This commit is contained in:
Kittywhiskers Van Gogh 2022-11-03 21:22:28 +05:30 committed by PastaPastaPasta
parent e2224cbf8a
commit 0fa0991e6e
6 changed files with 25 additions and 30 deletions

View File

@ -131,7 +131,7 @@ CTransactionBuilder::CTransactionBuilder(std::shared_ptr<CWallet> pwalletIn, con
CScript dummyScript; CScript dummyScript;
{ {
LOCK(pwallet->cs_wallet); LOCK(pwallet->cs_wallet);
WalletBatch dummyBatch(pwallet->GetDBHandle(), "r+", false); WalletBatch dummyBatch(pwallet->GetDBHandle(), false);
dummyBatch.TxnBegin(); dummyBatch.TxnBegin();
CKey secret; CKey secret;
secret.MakeNewKey(pwallet->CanSupportFeature(FEATURE_COMPRPUBKEY)); secret.MakeNewKey(pwallet->CanSupportFeature(FEATURE_COMPRPUBKEY));

View File

@ -305,17 +305,16 @@ BerkeleyDatabase::~BerkeleyDatabase()
} }
} }
BerkeleyBatch::BerkeleyBatch(BerkeleyDatabase& database, const char* pszMode, bool fFlushOnCloseIn) : pdb(nullptr), activeTxn(nullptr), m_cursor(nullptr), m_database(database) BerkeleyBatch::BerkeleyBatch(BerkeleyDatabase& database, const bool read_only, bool fFlushOnCloseIn) : pdb(nullptr), activeTxn(nullptr), m_cursor(nullptr), m_database(database)
{ {
database.AddRef(); database.AddRef();
database.Open(pszMode); database.Open();
fReadOnly = (!strchr(pszMode, '+') && !strchr(pszMode, 'w')); fReadOnly = read_only;
fFlushOnClose = fFlushOnCloseIn; fFlushOnClose = fFlushOnCloseIn;
env = database.env.get(); env = database.env.get();
pdb = database.m_db.get(); pdb = database.m_db.get();
strFile = database.strFile; strFile = database.strFile;
bool fCreate = strchr(pszMode, 'c') != nullptr; if (!Exists(std::string("version"))) {
if (fCreate && !Exists(std::string("version"))) {
bool fTmp = fReadOnly; bool fTmp = fReadOnly;
fReadOnly = false; fReadOnly = false;
Write(std::string("version"), CLIENT_VERSION); Write(std::string("version"), CLIENT_VERSION);
@ -323,12 +322,9 @@ BerkeleyBatch::BerkeleyBatch(BerkeleyDatabase& database, const char* pszMode, bo
} }
} }
void BerkeleyDatabase::Open(const char* pszMode) void BerkeleyDatabase::Open()
{ {
bool fCreate = strchr(pszMode, 'c') != nullptr; unsigned int nFlags = DB_THREAD | DB_CREATE;
unsigned int nFlags = DB_THREAD;
if (fCreate)
nFlags |= DB_CREATE;
{ {
LOCK(cs_db); LOCK(cs_db);
@ -468,7 +464,7 @@ bool BerkeleyDatabase::Rewrite(const char* pszSkip)
LogPrintf("BerkeleyBatch::Rewrite: Rewriting %s...\n", strFile); LogPrintf("BerkeleyBatch::Rewrite: Rewriting %s...\n", strFile);
std::string strFileRes = strFile + ".rewrite"; std::string strFileRes = strFile + ".rewrite";
{ // surround usage of db with extra {} { // surround usage of db with extra {}
BerkeleyBatch db(*this, "r"); BerkeleyBatch db(*this, true);
std::unique_ptr<Db> pdbCopy = std::make_unique<Db>(env->dbenv.get(), 0); std::unique_ptr<Db> pdbCopy = std::make_unique<Db>(env->dbenv.get(), 0);
int ret = pdbCopy->open(nullptr, // Txn pointer int ret = pdbCopy->open(nullptr, // Txn pointer
@ -807,9 +803,9 @@ void BerkeleyDatabase::RemoveRef()
if (env) env->m_db_in_use.notify_all(); if (env) env->m_db_in_use.notify_all();
} }
std::unique_ptr<DatabaseBatch> BerkeleyDatabase::MakeBatch(const char* mode, bool flush_on_close) std::unique_ptr<DatabaseBatch> BerkeleyDatabase::MakeBatch(bool flush_on_close)
{ {
return std::make_unique<BerkeleyBatch>(*this, mode, flush_on_close); return std::make_unique<BerkeleyBatch>(*this, false, flush_on_close);
} }
bool ExistsBerkeleyDatabase(const fs::path& path) bool ExistsBerkeleyDatabase(const fs::path& path)

View File

@ -109,9 +109,8 @@ public:
~BerkeleyDatabase() override; ~BerkeleyDatabase() override;
/** Open the database if it is not already opened. /** Open the database if it is not already opened. */
* Dummy function, doesn't do anything right now, but is needed for class abstraction */ void Open() override;
void Open(const char* mode) override;
/** Rewrite the entire database on disk, with the exception of key pszSkip if non-zero /** Rewrite the entire database on disk, with the exception of key pszSkip if non-zero
*/ */
@ -164,7 +163,7 @@ public:
std::string strFile; std::string strFile;
/** Make a BerkeleyBatch connected to this database */ /** Make a BerkeleyBatch connected to this database */
std::unique_ptr<DatabaseBatch> MakeBatch(const char* mode = "r+", bool flush_on_close = true) override; std::unique_ptr<DatabaseBatch> MakeBatch(bool flush_on_close = true) override;
}; };
/** RAII class that provides access to a Berkeley database */ /** RAII class that provides access to a Berkeley database */
@ -207,7 +206,7 @@ protected:
BerkeleyDatabase& m_database; BerkeleyDatabase& m_database;
public: public:
explicit BerkeleyBatch(BerkeleyDatabase& database, const char* pszMode = "r+", bool fFlushOnCloseIn=true); explicit BerkeleyBatch(BerkeleyDatabase& database, const bool fReadOnly, bool fFlushOnCloseIn=true);
~BerkeleyBatch() override; ~BerkeleyBatch() override;
BerkeleyBatch(const BerkeleyBatch&) = delete; BerkeleyBatch(const BerkeleyBatch&) = delete;

View File

@ -108,7 +108,7 @@ public:
virtual ~WalletDatabase() {}; virtual ~WalletDatabase() {};
/** Open the database if it is not already opened. */ /** Open the database if it is not already opened. */
virtual void Open(const char* mode) = 0; virtual void Open() = 0;
//! Counts the number of active database users to be sure that the database is not closed while someone is using it //! Counts the number of active database users to be sure that the database is not closed while someone is using it
std::atomic<int> m_refcount{0}; std::atomic<int> m_refcount{0};
@ -149,7 +149,7 @@ public:
int64_t nLastWalletUpdate; int64_t nLastWalletUpdate;
/** Make a DatabaseBatch connected to this database */ /** Make a DatabaseBatch connected to this database */
virtual std::unique_ptr<DatabaseBatch> MakeBatch(const char* mode = "r+", bool flush_on_close = true) = 0; virtual std::unique_ptr<DatabaseBatch> MakeBatch(bool flush_on_close = true) = 0;
}; };
/** RAII class that provides access to a DummyDatabase. Never fails. */ /** RAII class that provides access to a DummyDatabase. Never fails. */
@ -178,7 +178,7 @@ public:
class DummyDatabase : public WalletDatabase class DummyDatabase : public WalletDatabase
{ {
public: public:
void Open(const char* mode) override {}; void Open() override {};
void AddRef() override {} void AddRef() override {}
void RemoveRef() override {} void RemoveRef() override {}
bool Rewrite(const char* pszSkip=nullptr) override { return true; } bool Rewrite(const char* pszSkip=nullptr) override { return true; }
@ -189,7 +189,7 @@ public:
void IncrementUpdateCounter() override { ++nUpdateCounter; } void IncrementUpdateCounter() override { ++nUpdateCounter; }
void ReloadDbEnv() override {} void ReloadDbEnv() override {}
std::string Filename() override { return "dummy"; } std::string Filename() override { return "dummy"; }
std::unique_ptr<DatabaseBatch> MakeBatch(const char* mode = "r+", bool flush_on_close = true) override { return std::make_unique<DummyBatch>(); } std::unique_ptr<DatabaseBatch> MakeBatch(bool flush_on_close = true) override { return std::make_unique<DummyBatch>(); }
}; };
enum class DatabaseFormat { enum class DatabaseFormat {

View File

@ -822,7 +822,7 @@ bool CWallet::AddToWallet(const CWalletTx& wtxIn, bool fFlushOnClose)
{ {
LOCK(cs_wallet); LOCK(cs_wallet);
WalletBatch batch(*database, "r+", fFlushOnClose); WalletBatch batch(*database, fFlushOnClose);
uint256 hash = wtxIn.GetHash(); uint256 hash = wtxIn.GetHash();
@ -1051,7 +1051,7 @@ bool CWallet::AbandonTransaction(const uint256& hashTx)
{ {
LOCK(cs_wallet); LOCK(cs_wallet);
WalletBatch batch(*database, "r+"); WalletBatch batch(*database);
std::set<uint256> todo; std::set<uint256> todo;
std::set<uint256> done; std::set<uint256> done;
@ -1129,7 +1129,7 @@ void CWallet::MarkConflicted(const uint256& hashBlock, int conflicting_height, c
return; return;
// Do not flush the wallet here for performance reasons // Do not flush the wallet here for performance reasons
WalletBatch batch(*database, "r+", false); WalletBatch batch(*database, false);
std::set<uint256> todo; std::set<uint256> todo;
std::set<uint256> done; std::set<uint256> done;
@ -3600,7 +3600,7 @@ DBErrors CWallet::LoadWallet(bool& fFirstRunRet)
LOCK(cs_wallet); LOCK(cs_wallet);
fFirstRunRet = false; fFirstRunRet = false;
DBErrors nLoadWalletRet = WalletBatch(*database,"cr+").LoadWallet(this); DBErrors nLoadWalletRet = WalletBatch(*database).LoadWallet(this);
if (nLoadWalletRet == DBErrors::NEED_REWRITE) if (nLoadWalletRet == DBErrors::NEED_REWRITE)
{ {
if (database->Rewrite("\x04pool")) if (database->Rewrite("\x04pool"))
@ -3661,7 +3661,7 @@ void CWallet::AutoLockMasternodeCollaterals()
DBErrors CWallet::ZapSelectTx(std::vector<uint256>& vHashIn, std::vector<uint256>& vHashOut) DBErrors CWallet::ZapSelectTx(std::vector<uint256>& vHashIn, std::vector<uint256>& vHashOut)
{ {
AssertLockHeld(cs_wallet); AssertLockHeld(cs_wallet);
DBErrors nZapSelectTxRet = WalletBatch(*database, "cr+").ZapSelectTx(vHashIn, vHashOut); DBErrors nZapSelectTxRet = WalletBatch(*database).ZapSelectTx(vHashIn, vHashOut);
for (uint256 hash : vHashOut) { for (uint256 hash : vHashOut) {
const auto& it = mapWallet.find(hash); const auto& it = mapWallet.find(hash);
wtxOrdered.erase(it->second.m_it_wtxOrdered); wtxOrdered.erase(it->second.m_it_wtxOrdered);

View File

@ -158,8 +158,8 @@ private:
} }
public: public:
explicit WalletBatch(WalletDatabase& database, const char* pszMode = "r+", bool _fFlushOnClose = true) : explicit WalletBatch(WalletDatabase &database, bool _fFlushOnClose = true) :
m_batch(database.MakeBatch(pszMode, _fFlushOnClose)), m_batch(database.MakeBatch(_fFlushOnClose)),
m_database(database) m_database(database)
{ {
} }