Remove unused nested BDB transaction support

This commit is contained in:
Jeff Garzik 2012-05-14 12:39:29 -04:00 committed by Jeff Garzik
parent 24b57e3c6a
commit 8b1202c52c
2 changed files with 19 additions and 31 deletions

View File

@ -170,9 +170,9 @@ void CDB::Close()
{ {
if (!pdb) if (!pdb)
return; return;
if (!vTxn.empty()) if (activeTxn)
vTxn.front()->abort(); activeTxn->abort();
vTxn.clear(); activeTxn = NULL;
pdb = NULL; pdb = NULL;
// Flush database activity from memory pool to disk log // Flush database activity from memory pool to disk log

View File

@ -51,10 +51,10 @@ public:
void CheckpointLSN(std::string strFile); void CheckpointLSN(std::string strFile);
void SetDetach(bool fDetachDB_) { fDetachDB = fDetachDB_; } void SetDetach(bool fDetachDB_) { fDetachDB = fDetachDB_; }
DbTxn *TxnBegin(DbTxn *baseTxn, int flags=DB_TXN_WRITE_NOSYNC) DbTxn *TxnBegin(int flags=DB_TXN_WRITE_NOSYNC)
{ {
DbTxn* ptxn = NULL; DbTxn* ptxn = NULL;
int ret = dbenv.txn_begin(baseTxn, &ptxn, flags); int ret = dbenv.txn_begin(NULL, &ptxn, flags);
if (!ptxn || ret != 0) if (!ptxn || ret != 0)
return NULL; return NULL;
return ptxn; return ptxn;
@ -70,7 +70,7 @@ class CDB
protected: protected:
Db* pdb; Db* pdb;
std::string strFile; std::string strFile;
std::vector<DbTxn*> vTxn; DbTxn *activeTxn;
bool fReadOnly; bool fReadOnly;
explicit CDB(const char* pszFile, const char* pszMode="r+"); explicit CDB(const char* pszFile, const char* pszMode="r+");
@ -97,7 +97,7 @@ protected:
// Read // Read
Dbt datValue; Dbt datValue;
datValue.set_flags(DB_DBT_MALLOC); datValue.set_flags(DB_DBT_MALLOC);
int ret = pdb->get(GetTxn(), &datKey, &datValue, 0); int ret = pdb->get(activeTxn, &datKey, &datValue, 0);
memset(datKey.get_data(), 0, datKey.get_size()); memset(datKey.get_data(), 0, datKey.get_size());
if (datValue.get_data() == NULL) if (datValue.get_data() == NULL)
return false; return false;
@ -133,7 +133,7 @@ protected:
Dbt datValue(&ssValue[0], ssValue.size()); Dbt datValue(&ssValue[0], ssValue.size());
// Write // Write
int ret = pdb->put(GetTxn(), &datKey, &datValue, (fOverwrite ? 0 : DB_NOOVERWRITE)); int ret = pdb->put(activeTxn, &datKey, &datValue, (fOverwrite ? 0 : DB_NOOVERWRITE));
// Clear memory in case it was a private key // Clear memory in case it was a private key
memset(datKey.get_data(), 0, datKey.get_size()); memset(datKey.get_data(), 0, datKey.get_size());
@ -156,7 +156,7 @@ protected:
Dbt datKey(&ssKey[0], ssKey.size()); Dbt datKey(&ssKey[0], ssKey.size());
// Erase // Erase
int ret = pdb->del(GetTxn(), &datKey, 0); int ret = pdb->del(activeTxn, &datKey, 0);
// Clear memory // Clear memory
memset(datKey.get_data(), 0, datKey.get_size()); memset(datKey.get_data(), 0, datKey.get_size());
@ -176,7 +176,7 @@ protected:
Dbt datKey(&ssKey[0], ssKey.size()); Dbt datKey(&ssKey[0], ssKey.size());
// Exists // Exists
int ret = pdb->exists(GetTxn(), &datKey, 0); int ret = pdb->exists(activeTxn, &datKey, 0);
// Clear memory // Clear memory
memset(datKey.get_data(), 0, datKey.get_size()); memset(datKey.get_data(), 0, datKey.get_size());
@ -233,45 +233,33 @@ protected:
return 0; return 0;
} }
DbTxn* GetTxn()
{
if (!vTxn.empty())
return vTxn.back();
else
return NULL;
}
public: public:
bool TxnBegin() bool TxnBegin()
{ {
if (!pdb) if (!pdb || activeTxn)
return false; return false;
DbTxn* ptxn = bitdb.TxnBegin(GetTxn()); DbTxn* ptxn = bitdb.TxnBegin();
if (!ptxn) if (!ptxn)
return false; return false;
vTxn.push_back(ptxn); activeTxn = ptxn;
return true; return true;
} }
bool TxnCommit() bool TxnCommit()
{ {
if (!pdb) if (!pdb || !activeTxn)
return false; return false;
if (vTxn.empty()) int ret = activeTxn->commit(0);
return false; activeTxn = NULL;
int ret = vTxn.back()->commit(0);
vTxn.pop_back();
return (ret == 0); return (ret == 0);
} }
bool TxnAbort() bool TxnAbort()
{ {
if (!pdb) if (!pdb || !activeTxn)
return false; return false;
if (vTxn.empty()) int ret = activeTxn->abort();
return false; activeTxn = NULL;
int ret = vTxn.back()->abort();
vTxn.pop_back();
return (ret == 0); return (ret == 0);
} }