mirror of
https://github.com/monero-project/monero.git
synced 2026-07-30 23:50:24 -07:00
Use batch transactions when syncing
Faster throughput while avoiding corruption. I.e., makes running with --db-sync-mode safe more tolerable.
This commit is contained in:
@@ -1813,9 +1813,10 @@ bool BlockchainBDB::has_key_image(const crypto::key_image& img) const
|
||||
// Ostensibly BerkeleyDB has batch transaction support built-in,
|
||||
// so the following few functions will be NOP.
|
||||
|
||||
void BlockchainBDB::batch_start(uint64_t batch_num_blocks)
|
||||
bool BlockchainBDB::batch_start(uint64_t batch_num_blocks)
|
||||
{
|
||||
LOG_PRINT_L3("BlockchainBDB::" << __func__);
|
||||
return false;
|
||||
}
|
||||
|
||||
void BlockchainBDB::batch_commit()
|
||||
|
||||
@@ -324,7 +324,7 @@ public:
|
||||
);
|
||||
|
||||
virtual void set_batch_transactions(bool batch_transactions);
|
||||
virtual void batch_start(uint64_t batch_num_blocks=0);
|
||||
virtual bool batch_start(uint64_t batch_num_blocks=0);
|
||||
virtual void batch_commit();
|
||||
virtual void batch_stop();
|
||||
virtual void batch_abort();
|
||||
|
||||
@@ -655,16 +655,17 @@ public:
|
||||
* been called. In either case, it should end the batch and write to its
|
||||
* backing store.
|
||||
*
|
||||
* If a batch is already in-progress, this function should throw a DB_ERROR.
|
||||
* This exception may change in the future if it is deemed necessary to
|
||||
* have a more granular exception type for this scenario.
|
||||
* If a batch is already in-progress, this function must return false.
|
||||
* If a batch was started by this call, it must return true.
|
||||
*
|
||||
* If any of this cannot be done, the subclass should throw the corresponding
|
||||
* subclass of DB_EXCEPTION
|
||||
*
|
||||
* @param batch_num_blocks number of blocks to batch together
|
||||
*
|
||||
* @return true if we started the batch, false if already started
|
||||
*/
|
||||
virtual void batch_start(uint64_t batch_num_blocks=0) = 0;
|
||||
virtual bool batch_start(uint64_t batch_num_blocks=0) = 0;
|
||||
|
||||
/**
|
||||
* @brief ends a batch transaction
|
||||
|
||||
@@ -2234,15 +2234,15 @@ bool BlockchainLMDB::for_all_outputs(std::function<bool(uint64_t amount, const c
|
||||
}
|
||||
|
||||
// batch_num_blocks: (optional) Used to check if resize needed before batch transaction starts.
|
||||
void BlockchainLMDB::batch_start(uint64_t batch_num_blocks)
|
||||
bool BlockchainLMDB::batch_start(uint64_t batch_num_blocks)
|
||||
{
|
||||
LOG_PRINT_L3("BlockchainLMDB::" << __func__);
|
||||
if (! m_batch_transactions)
|
||||
throw0(DB_ERROR("batch transactions not enabled"));
|
||||
if (m_batch_active)
|
||||
throw0(DB_ERROR("batch transaction already in progress"));
|
||||
return false;
|
||||
if (m_write_batch_txn != nullptr)
|
||||
throw0(DB_ERROR("batch transaction already in progress"));
|
||||
return false;
|
||||
if (m_write_txn)
|
||||
throw0(DB_ERROR("batch transaction attempted, but m_write_txn already in use"));
|
||||
check_open();
|
||||
@@ -2268,6 +2268,7 @@ void BlockchainLMDB::batch_start(uint64_t batch_num_blocks)
|
||||
memset(&m_wcursors, 0, sizeof(m_wcursors));
|
||||
|
||||
LOG_PRINT_L3("batch transaction: begin");
|
||||
return true;
|
||||
}
|
||||
|
||||
void BlockchainLMDB::batch_commit()
|
||||
|
||||
@@ -245,7 +245,7 @@ public:
|
||||
);
|
||||
|
||||
virtual void set_batch_transactions(bool batch_transactions);
|
||||
virtual void batch_start(uint64_t batch_num_blocks=0);
|
||||
virtual bool batch_start(uint64_t batch_num_blocks=0);
|
||||
virtual void batch_commit();
|
||||
virtual void batch_stop();
|
||||
virtual void batch_abort();
|
||||
|
||||
Reference in New Issue
Block a user