mirror of
https://github.com/monero-project/monero.git
synced 2024-11-18 00:37:43 +00:00
BlockchainDB/LMDB: Refactor block-scope DB txn handling for add block
Move block-scope txn start and stop from BlockchainLMDB to BlockchainDB.
This commit is contained in:
parent
f3a6000094
commit
fd46c96dce
2 changed files with 10 additions and 20 deletions
|
@ -99,6 +99,8 @@ uint64_t BlockchainDB::add_block( const block& blk
|
|||
, const std::vector<transaction>& txs
|
||||
)
|
||||
{
|
||||
block_txn_start();
|
||||
|
||||
TIME_MEASURE_START(time1);
|
||||
crypto::hash blk_hash = get_block_hash(blk);
|
||||
TIME_MEASURE_FINISH(time1);
|
||||
|
@ -125,9 +127,15 @@ uint64_t BlockchainDB::add_block( const block& blk
|
|||
TIME_MEASURE_FINISH(time1);
|
||||
time_add_transaction += time1;
|
||||
|
||||
// DB's new height based on this added block is only incremented after this
|
||||
// function returns, so height() here returns the new previous height.
|
||||
uint64_t prev_height = height();
|
||||
|
||||
block_txn_stop();
|
||||
|
||||
++num_calls;
|
||||
|
||||
return height();
|
||||
return prev_height;
|
||||
}
|
||||
|
||||
void BlockchainDB::pop_block(block& blk, std::vector<transaction>& txs)
|
||||
|
|
|
@ -2244,33 +2244,15 @@ uint64_t BlockchainLMDB::add_block(const block& blk, const size_t& block_size, c
|
|||
}
|
||||
}
|
||||
|
||||
mdb_txn_safe txn;
|
||||
if (! m_batch_active)
|
||||
{
|
||||
if (auto mdb_res = mdb_txn_begin(m_env, NULL, 0, txn))
|
||||
throw0(DB_ERROR(lmdb_error("Failed to create a transaction for the db: ", mdb_res).c_str()));
|
||||
m_write_txn = &txn;
|
||||
}
|
||||
|
||||
uint64_t num_outputs = m_num_outputs;
|
||||
try
|
||||
{
|
||||
BlockchainDB::add_block(blk, block_size, cumulative_difficulty, coins_generated, txs);
|
||||
if (! m_batch_active)
|
||||
{
|
||||
m_write_txn = NULL;
|
||||
|
||||
TIME_MEASURE_START(time1);
|
||||
txn.commit();
|
||||
TIME_MEASURE_FINISH(time1);
|
||||
time_commit1 += time1;
|
||||
}
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
m_num_outputs = num_outputs;
|
||||
if (! m_batch_active)
|
||||
m_write_txn = NULL;
|
||||
block_txn_abort();
|
||||
throw;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue