Skip to content

Commit e9e3d90

Browse files
committed
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 <[email protected]>
1 parent 37173c8 commit e9e3d90

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

src/mon/MgrStatMonitor.cc

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,18 @@ void MgrStatMonitor::clear_pool_availability(int64_t poolid)
130130
dout(20) << __func__ << " cleared availability score for pool: " << poolid << dendl;
131131
}
132132

133+
bool MgrStatMonitor::should_calc_pool_availability()
134+
{
135+
dout(20) << __func__ << dendl;
136+
std::scoped_lock l(lock);
137+
138+
utime_t now = ceph_clock_now();
139+
if ((now - pool_availability_last_updated) >= pool_availability_update_interval) {
140+
return true;
141+
}
142+
return false;
143+
}
144+
133145
void MgrStatMonitor::calc_pool_availability()
134146
{
135147
dout(20) << __func__ << dendl;
@@ -212,6 +224,7 @@ void MgrStatMonitor::calc_pool_availability()
212224

213225
}
214226
pending_pool_availability = pool_availability;
227+
pool_availability_last_updated = now;
215228
}
216229

217230
void MgrStatMonitor::update_from_paxos(bool *need_bootstrap)
@@ -249,7 +262,8 @@ void MgrStatMonitor::update_from_paxos(bool *need_bootstrap)
249262
mon.osdmon()->notify_new_pg_digest();
250263

251264
// only calculate pool_availability within leader mon
252-
if (mon.is_leader()) {
265+
// and if configured interval has elapsed
266+
if (mon.is_leader() && should_calc_pool_availability()) {
253267
calc_pool_availability();
254268
}
255269
}

src/mon/MgrStatMonitor.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,10 @@
5757
void calc_pool_availability();
5858
bool enable_availability_tracking = g_conf().get_val<bool>("enable_availability_tracking"); ///< tracking availability score feature
5959
double pool_availability_update_interval = g_conf().get_val<double>("pool_availability_update_interval");
60+
utime_t pool_availability_last_updated = ceph_clock_now();
6061

6162
void clear_pool_availability(int64_t poolid);
63+
bool should_calc_pool_availability();
6264

6365
void check_sub(Subscription *sub);
6466
void check_subs();

0 commit comments

Comments
 (0)