]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
mon/MgrStatMonitor: update availability score after configured interval
authorShraddha Agrawal <shraddha.agrawal000@gmail.com>
Thu, 21 Aug 2025 12:27:52 +0000 (17:57 +0530)
committerShraddha Agrawal <shraddha.agrawal000@gmail.com>
Mon, 15 Sep 2025 05:31:34 +0000 (11:01 +0530)
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 <shraddhaag@ibm.com>
(cherry picked from commit e9e3d90210922f336950d02bedca2f09d4463dfe)

src/mon/MgrStatMonitor.cc
src/mon/MgrStatMonitor.h

index 6d90129805bf66e66beebcdff8c19ea4de37cfff..f91056bf9c6eaa959e521bee58e15cc69d33c0cb 100644 (file)
@@ -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();
   }
 }
index b2cec6a20ba88447a4cc3b9ebc29818cb67f33e7..d82803529742ab357237d0098b80bdd8cd4130c9 100644 (file)
@@ -57,8 +57,10 @@ public:
   void calc_pool_availability();
   bool enable_availability_tracking = g_conf().get_val<bool>("enable_availability_tracking"); ///< tracking availability score feature 
   double pool_availability_update_interval = g_conf().get_val<double>("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();