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
|
, const std::vector<transaction>& txs
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
block_txn_start();
|
||||||
|
|
||||||
TIME_MEASURE_START(time1);
|
TIME_MEASURE_START(time1);
|
||||||
crypto::hash blk_hash = get_block_hash(blk);
|
crypto::hash blk_hash = get_block_hash(blk);
|
||||||
TIME_MEASURE_FINISH(time1);
|
TIME_MEASURE_FINISH(time1);
|
||||||
|
@ -125,9 +127,15 @@ uint64_t BlockchainDB::add_block( const block& blk
|
||||||
TIME_MEASURE_FINISH(time1);
|
TIME_MEASURE_FINISH(time1);
|
||||||
time_add_transaction += 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;
|
++num_calls;
|
||||||
|
|
||||||
return height();
|
return prev_height;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BlockchainDB::pop_block(block& blk, std::vector<transaction>& txs)
|
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;
|
uint64_t num_outputs = m_num_outputs;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
BlockchainDB::add_block(blk, block_size, cumulative_difficulty, coins_generated, txs);
|
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 (...)
|
catch (...)
|
||||||
{
|
{
|
||||||
m_num_outputs = num_outputs;
|
m_num_outputs = num_outputs;
|
||||||
if (! m_batch_active)
|
block_txn_abort();
|
||||||
m_write_txn = NULL;
|
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue