Skip to content

Commit

Permalink
blockchain: more opportunities for caching the rolling median
Browse files Browse the repository at this point in the history
  • Loading branch information
Crypto City authored and moneromooo-monero committed Aug 17, 2024
1 parent a1dc85c commit cfb19b9
Showing 1 changed file with 10 additions and 3 deletions.
13 changes: 10 additions & 3 deletions src/cryptonote_core/blockchain.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1486,10 +1486,13 @@ uint64_t Blockchain::get_long_term_block_weight_median(uint64_t start_height, si
uint64_t blockchain_height = m_db->height();
uint64_t tip_height = start_height + count - 1;
crypto::hash tip_hash = crypto::null_hash;
if (tip_height < blockchain_height && count == (size_t)m_long_term_block_weights_cache_rolling_median.size())
if (tip_height < blockchain_height)
{
tip_hash = m_db->get_block_hash_from_height(tip_height);
cached = tip_hash == m_long_term_block_weights_cache_tip_hash;
if (count == (size_t)m_long_term_block_weights_cache_rolling_median.size())
{
cached = tip_hash == m_long_term_block_weights_cache_tip_hash;
}
}

if (cached)
Expand All @@ -1500,8 +1503,11 @@ uint64_t Blockchain::get_long_term_block_weight_median(uint64_t start_height, si

// in the vast majority of uncached cases, most is still cached,
// as we just move the window one block up:
if (tip_height > 0 && count == (size_t)m_long_term_block_weights_cache_rolling_median.size() && tip_height < blockchain_height)
if (tip_height > 0 && tip_height < blockchain_height)
{
const size_t rmsize = m_long_term_block_weights_cache_rolling_median.size();
if (count == rmsize || (count == rmsize + 1 && rmsize < CRYPTONOTE_LONG_TERM_BLOCK_WEIGHT_WINDOW_SIZE))
{
crypto::hash old_tip_hash = m_db->get_block_hash_from_height(tip_height - 1);
if (old_tip_hash == m_long_term_block_weights_cache_tip_hash)
{
Expand All @@ -1510,6 +1516,7 @@ uint64_t Blockchain::get_long_term_block_weight_median(uint64_t start_height, si
m_long_term_block_weights_cache_rolling_median.insert(m_db->get_block_long_term_weight(tip_height));
return m_long_term_block_weights_cache_rolling_median.median();
}
}
}

MTRACE("requesting " << count << " from " << start_height << ", uncached");
Expand Down

0 comments on commit cfb19b9

Please sign in to comment.