Handle negative block rate in monitor (#4920)

This commit is contained in:
Piotr Wójcik 2025-06-25 00:50:28 +02:00 committed by GitHub
commit f9bddfa13b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 11 additions and 5 deletions

View file

@ -11,6 +11,7 @@ class block;
class block_details;
class block_visitor;
class container_info;
class error;
class jsonconfig;
class logger;
class mutable_block_visitor;

View file

@ -1,9 +1,8 @@
#include "nano/secure/ledger.hpp"
#include <nano/lib/thread_roles.hpp>
#include <nano/lib/utility.hpp>
#include <nano/node/monitor.hpp>
#include <nano/node/node.hpp>
#include <nano/secure/ledger.hpp>
nano::monitor::monitor (nano::monitor_config const & config_a, nano::node & node_a) :
config{ config_a },
@ -77,10 +76,16 @@ void nano::monitor::run_one ()
// Wait for node to warm up before logging rates
if (last_time != std::chrono::steady_clock::time_point{})
{
// Calculate the rates
auto elapsed_seconds = std::chrono::duration_cast<std::chrono::seconds> (now - last_time).count ();
auto blocks_confirmed_rate = static_cast<double> (blocks_cemented - last_blocks_cemented) / elapsed_seconds;
auto blocks_checked_rate = static_cast<double> (blocks_total - last_blocks_total) / elapsed_seconds;
debug_assert (elapsed_seconds > 0);
// Cast to signed type to correctly handle negative differences (e.g., from rollbacks)
auto cemented_diff = static_cast<std::int64_t> (blocks_cemented) - static_cast<std::int64_t> (last_blocks_cemented);
auto total_diff = static_cast<std::int64_t> (blocks_total) - static_cast<std::int64_t> (last_blocks_total);
// Calculate the rates
auto blocks_confirmed_rate = static_cast<double> (cemented_diff) / elapsed_seconds;
auto blocks_checked_rate = static_cast<double> (total_diff) / elapsed_seconds;
logger.info (nano::log::type::monitor, "Blocks rate (avg over {}s): confirmed {:.2f}/s | total {:.2f}/s",
elapsed_seconds,