From 6cf8ca2a7f3e11ca5559018dfc9b20869c07cdce Mon Sep 17 00:00:00 2001 From: moneromooo-monero Date: Tue, 30 Aug 2016 16:39:33 +0100 Subject: 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. --- src/blockchain_db/berkeleydb/db_bdb.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src/blockchain_db/berkeleydb/db_bdb.cpp') diff --git a/src/blockchain_db/berkeleydb/db_bdb.cpp b/src/blockchain_db/berkeleydb/db_bdb.cpp index 4ec284e38..137ed9dc6 100644 --- a/src/blockchain_db/berkeleydb/db_bdb.cpp +++ b/src/blockchain_db/berkeleydb/db_bdb.cpp @@ -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; } -- cgit v1.2.3