From: Shraddha Agrawal Date: Thu, 21 Aug 2025 12:27:52 +0000 (+0530) Subject: mon/MgrStatMonitor: update availability score after configured interval X-Git-Tag: v20.1.1~12^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=5644428f57edcc38167adc52f424f1985fb4d0ab;p=ceph.git 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) --- diff --git a/src/mon/MgrStatMonitor.cc b/src/mon/MgrStatMonitor.cc index 6d90129805bf..f91056bf9c6e 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 b2cec6a20ba8..d82803529742 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();