aboutsummaryrefslogtreecommitdiff
path: root/src/blockchain_db
diff options
context:
space:
mode:
authorwarptangent <warptangent@inbox.com>2015-07-15 07:21:48 -0700
committerwarptangent <warptangent@inbox.com>2015-07-16 00:36:26 -0700
commit71793ef43fb48089a281b754749f693832a3526a (patch)
tree68d80433ea511086e556c3b7b41ee68c45752ca7 /src/blockchain_db
parentRemoved on_idle() calls to Blockchain::store_blockchain() for lmdb. (diff)
downloadmonero-71793ef43fb48089a281b754749f693832a3526a.tar.xz
Add batch support to BlockchainLMDB::get_output_key
This allows blockchain_import to work with batch and verify modes enabled (the default).
Diffstat (limited to 'src/blockchain_db')
-rw-r--r--src/blockchain_db/lmdb/db_lmdb.cpp18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/blockchain_db/lmdb/db_lmdb.cpp b/src/blockchain_db/lmdb/db_lmdb.cpp
index 63ac54171..dd829f3b0 100644
--- a/src/blockchain_db/lmdb/db_lmdb.cpp
+++ b/src/blockchain_db/lmdb/db_lmdb.cpp
@@ -2293,16 +2293,21 @@ void BlockchainLMDB::get_output_key(const uint64_t &amount, const std::vector<ui
if (global_indices.size() > 0)
{
- mdb_txn_safe txn;
- if (mdb_txn_begin(m_env, NULL, MDB_RDONLY, txn))
- throw0(DB_ERROR("Failed to create a transaction for the db"));
-
+ mdb_txn_safe txn;
+ mdb_txn_safe* txn_ptr = &txn;
+ if (m_batch_active)
+ txn_ptr = m_write_txn;
+ else
+ {
+ if (mdb_txn_begin(m_env, NULL, MDB_RDONLY, txn))
+ throw0(DB_ERROR("Failed to create a transaction for the db"));
+ }
for (const uint64_t &index : global_indices)
{
MDB_val_copy<uint64_t> k(index);
MDB_val v;
- auto get_result = mdb_get(txn, m_output_keys, &k, &v);
+ auto get_result = mdb_get(*txn_ptr, m_output_keys, &k, &v);
if (get_result != 0)
throw0(DB_ERROR("Attempting to get output pubkey by global index, but key does not exist"));
else if (get_result)
@@ -2312,7 +2317,8 @@ void BlockchainLMDB::get_output_key(const uint64_t &amount, const std::vector<ui
outputs.push_back(data);
}
- txn.commit();
+ if (!m_batch_active)
+ txn.commit();
}
TIME_MEASURE_FINISH(db3);