From 5644428f57edcc38167adc52f424f1985fb4d0ab Mon Sep 17 00:00:00 2001 From: Shraddha Agrawal Date: Thu, 21 Aug 2025 17:57:52 +0530 Subject: [PATCH] mon/MgrStatMonitor: update availability score after configured interval This commit ensures that data availability status is only updated after the configured interval has elapsed. By default this interval is setup to be 1s. Fixes: https://tracker.ceph.com/issues/72619 Signed-off-by: Shraddha Agrawal (cherry picked from commit e9e3d90210922f336950d02bedca2f09d4463dfe) --- src/mon/MgrStatMonitor.cc | 16 +++++++++++++++- src/mon/MgrStatMonitor.h | 2 ++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/mon/MgrStatMonitor.cc b/src/mon/MgrStatMonitor.cc index 6d90129805b..f91056bf9c6 100644 --- a/src/mon/MgrStatMonitor.cc +++ b/src/mon/MgrStatMonitor.cc @@ -130,6 +130,18 @@ void MgrStatMonitor::clear_pool_availability(int64_t poolid) dout(20) << __func__ << " cleared availability score for pool: " << poolid << dendl; } +bool MgrStatMonitor::should_calc_pool_availability() +{ + dout(20) << __func__ << dendl; + std::scoped_lock l(lock); + + utime_t now = ceph_clock_now(); + if ((now - pool_availability_last_updated) >= pool_availability_update_interval) { + return true; + } + return false; +} + void MgrStatMonitor::calc_pool_availability() { dout(20) << __func__ << dendl; @@ -212,6 +224,7 @@ void MgrStatMonitor::calc_pool_availability() } pending_pool_availability = pool_availability; + pool_availability_last_updated = now; } void MgrStatMonitor::update_from_paxos(bool *need_bootstrap) @@ -249,7 +262,8 @@ void MgrStatMonitor::update_from_paxos(bool *need_bootstrap) mon.osdmon()->notify_new_pg_digest(); // only calculate pool_availability within leader mon - if (mon.is_leader()) { + // and if configured interval has elapsed + if (mon.is_leader() && should_calc_pool_availability()) { calc_pool_availability(); } } diff --git a/src/mon/MgrStatMonitor.h b/src/mon/MgrStatMonitor.h index b2cec6a20ba..d8280352974 100644 --- a/src/mon/MgrStatMonitor.h +++ b/src/mon/MgrStatMonitor.h @@ -57,8 +57,10 @@ public: void calc_pool_availability(); bool enable_availability_tracking = g_conf().get_val("enable_availability_tracking"); ///< tracking availability score feature double pool_availability_update_interval = g_conf().get_val("pool_availability_update_interval"); + utime_t pool_availability_last_updated = ceph_clock_now(); void clear_pool_availability(int64_t poolid); + bool should_calc_pool_availability(); void check_sub(Subscription *sub); void check_subs(); -- 2.39.5