core: faster find_blockchain_supplement
Since this queries block heights for blocks that may or may not exist, queries for non existing blocks would throw an exception, and that would slow down the loop a lot. 7 seconds to go through a 30 hash list. Fix this by adding an optional return block height to block_exists and using this instead. Actual errors will still throw an exception. This also cuts down on log exception spam.
This commit is contained in:
@@ -1235,7 +1235,7 @@ void BlockchainBDB::unlock()
|
||||
check_open();
|
||||
}
|
||||
|
||||
bool BlockchainBDB::block_exists(const crypto::hash& h) const
|
||||
bool BlockchainBDB::block_exists(const crypto::hash& h, uint64_t *height) const
|
||||
{
|
||||
LOG_PRINT_L3("BlockchainBDB::" << __func__);
|
||||
check_open();
|
||||
@@ -1251,6 +1251,9 @@ bool BlockchainBDB::block_exists(const crypto::hash& h) const
|
||||
else if (get_result)
|
||||
throw0(DB_ERROR("DB error attempting to fetch block index from hash"));
|
||||
|
||||
if (height)
|
||||
*height = get_result - 1;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user