mirror of
https://github.com/dashpay/dash.git
synced 2024-12-25 20:12:57 +01:00
merge bitcoin#20130: remove db mode string
This commit is contained in:
parent
e2224cbf8a
commit
0fa0991e6e
@ -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));
|
||||||
|
@ -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)
|
||||||
|
@ -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;
|
||||||
|
@ -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 {
|
||||||
|
@ -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);
|
||||||
|
@ -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)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user