diff options
author | moneromooo-monero <moneromooo-monero@users.noreply.github.com> | 2016-08-30 16:39:33 +0100 |
---|---|---|
committer | moneromooo-monero <moneromooo-monero@users.noreply.github.com> | 2016-08-31 10:03:32 +0100 |
commit | 6cf8ca2a7f3e11ca5559018dfc9b20869c07cdce (patch) | |
tree | 5634718d7626d234510d1f9e4c714627ff4b8590 /src/blockchain_db/lmdb | |
parent | Merge pull request #1014 (diff) | |
download | monero-6cf8ca2a7f3e11ca5559018dfc9b20869c07cdce.tar.xz |
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.
Diffstat (limited to 'src/blockchain_db/lmdb')
-rw-r--r-- | src/blockchain_db/lmdb/db_lmdb.cpp | 9 | ||||
-rw-r--r-- | src/blockchain_db/lmdb/db_lmdb.h | 2 |
2 files changed, 9 insertions, 2 deletions
diff --git a/src/blockchain_db/lmdb/db_lmdb.cpp b/src/blockchain_db/lmdb/db_lmdb.cpp index c0cf28dda..8ad875fc8 100644 --- a/src/blockchain_db/lmdb/db_lmdb.cpp +++ b/src/blockchain_db/lmdb/db_lmdb.cpp @@ -1387,7 +1387,7 @@ void BlockchainLMDB::unlock() auto_txn.commit(); \ } while(0) -bool BlockchainLMDB::block_exists(const crypto::hash& h) const +bool BlockchainLMDB::block_exists(const crypto::hash& h, uint64_t *height) const { LOG_PRINT_L3("BlockchainLMDB::" << __func__); check_open(); @@ -1405,7 +1405,14 @@ bool BlockchainLMDB::block_exists(const crypto::hash& h) const else if (get_result) throw0(DB_ERROR(lmdb_error("DB error attempting to fetch block index from hash", get_result).c_str())); else + { + if (height) + { + const blk_height *bhp = (const blk_height *)key.mv_data; + *height = bhp->bh_height; + } ret = true; + } TXN_POSTFIX_RDONLY(); return ret; diff --git a/src/blockchain_db/lmdb/db_lmdb.h b/src/blockchain_db/lmdb/db_lmdb.h index 050e9e0ae..9df4b86d1 100644 --- a/src/blockchain_db/lmdb/db_lmdb.h +++ b/src/blockchain_db/lmdb/db_lmdb.h @@ -168,7 +168,7 @@ public: virtual void unlock(); - virtual bool block_exists(const crypto::hash& h) const; + virtual bool block_exists(const crypto::hash& h, uint64_t *height = NULL) const; virtual block get_block(const crypto::hash& h) const; |