From da4f0cfc18b7ecd4d0141217bb0dee13d6263db0 Mon Sep 17 00:00:00 2001 From: Shraddha Agrawal Date: Thu, 26 Jun 2025 17:54:36 +0530 Subject: [PATCH] mon/MgrStatMonitor.cc: cleanup pool_availability This commit does the following: 1. In `calc_pool_availability()`, instead of swapping pool_availability and pending_pool_availability (which resulted in pool_availability storing old object value and not the latest object values), we now simply update pending_pool_availability to the newest calculated values. 2. `calc_pool_availability` now updates pool_availability only in leader mon. For peon, it will simply exit early. Fixes: https://tracker.ceph.com/issues/71857 Signed-off-by: Shraddha Agrawal --- src/mon/MgrStatMonitor.cc | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/mon/MgrStatMonitor.cc b/src/mon/MgrStatMonitor.cc index 5ef4e7de5749a..4d85a260a8261 100644 --- a/src/mon/MgrStatMonitor.cc +++ b/src/mon/MgrStatMonitor.cc @@ -205,7 +205,7 @@ void MgrStatMonitor::calc_pool_availability() avail.last_uptime = reset_availability_last_uptime_downtime_val.value(); } } - pending_pool_availability.swap(pool_availability); + pending_pool_availability = pool_availability; reset_availability_last_uptime_downtime_val.reset(); } @@ -242,7 +242,11 @@ void MgrStatMonitor::update_from_paxos(bool *need_bootstrap) check_subs(); update_logger(); mon.osdmon()->notify_new_pg_digest(); - calc_pool_availability(); + + // only calculate pool_availability within leader mon + if (mon.is_leader()) { + calc_pool_availability(); + } } void MgrStatMonitor::update_logger() -- 2.39.5