From d67279ab83ac0d4360383afd1e46dab7746768ac Mon Sep 17 00:00:00 2001 From: Jon Bailey Date: Tue, 27 Jan 2026 14:31:53 +0000 Subject: [PATCH] osd: Add counter to peering so we can see how often we would try invalidating the stats. Signed-off-by: Jon Bailey (cherry picked from commit 294c36143d5f9c4cb84bbfa5b17d8cb3e66f4dd4) --- src/osd/PeeringState.cc | 18 +++++++++++++++++- src/osd/PeeringState.h | 1 + src/osd/osd_perf_counters.cc | 1 + src/osd/osd_perf_counters.h | 1 + 4 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/osd/PeeringState.cc b/src/osd/PeeringState.cc index ce0e190e796..cc3a1aed62a 100644 --- a/src/osd/PeeringState.cc +++ b/src/osd/PeeringState.cc @@ -3487,6 +3487,7 @@ void PeeringState::proc_master_log( invalidate_stats = true; } info.stats.stats_invalid |= invalidate_stats; + increment_stats_invalidations_counter(invalidate_stats); peer_info[from] = oinfo; psdout(10) << " peer osd." << from << " now " << oinfo << " " << omissing << dendl; @@ -3741,6 +3742,9 @@ void PeeringState::split_into( child->info.last_epoch_started = info.last_epoch_started; child->info.last_interval_started = info.last_interval_started; + increment_stats_invalidations_counter(info.stats.stats_invalid); + increment_stats_invalidations_counter(child->info.stats.stats_invalid); + // There can't be recovery/backfill going on now int primary, up_primary; vector newup, newacting; @@ -4411,6 +4415,12 @@ std::optional PeeringState::prepare_stats_for_publish( } } +void PeeringState::increment_stats_invalidations_counter(bool invalidation_state) { + if (invalidation_state) { + pl->get_peering_perf().inc(rs_stats_invalidated); + } +} + void PeeringState::init( int role, const vector& newup, int new_up_primary, @@ -4504,10 +4514,15 @@ void PeeringState::dump_peering_state(Formatter *f) void PeeringState::update_stats( std::function f, ObjectStore::Transaction *t) { + bool previous_stats_invalidation = info.stats.stats_invalid; if (f(info.history, info.stats)) { pl->publish_stats_to_osd(); } + if (previous_stats_invalidation != info.stats.stats_invalid) { + increment_stats_invalidations_counter(info.stats.stats_invalid); + } + if (t) { dirty_info = true; write_if_dirty(*t); @@ -4554,7 +4569,7 @@ bool PeeringState::append_log_entries_update_missing( info.last_complete = info.last_update; } info.stats.stats_invalid = info.stats.stats_invalid || invalidate_stats; - + increment_stats_invalidations_counter(invalidate_stats); psdout(20) << "trim_to bool = " << bool(trim_to) << " trim_to = " << (trim_to ? *trim_to : eversion_t()) << dendl; if (trim_to) { @@ -4608,6 +4623,7 @@ void PeeringState::merge_new_log_entries( dpp); pinfo.last_update = info.last_update; pinfo.stats.stats_invalid = pinfo.stats.stats_invalid || invalidate_stats; + increment_stats_invalidations_counter(invalidate_stats); rebuild_missing = rebuild_missing || invalidate_stats; } diff --git a/src/osd/PeeringState.h b/src/osd/PeeringState.h index 6fa89017b2e..0f6335e779b 100644 --- a/src/osd/PeeringState.h +++ b/src/osd/PeeringState.h @@ -1810,6 +1810,7 @@ private: void update_blocked_by(); void update_calc_stats(); + void increment_stats_invalidations_counter(bool invalidation_state); void add_log_entry(const pg_log_entry_t& e, ObjectStore::Transaction &t, bool applied); diff --git a/src/osd/osd_perf_counters.cc b/src/osd/osd_perf_counters.cc index 416231dbe65..d47d4459d5a 100644 --- a/src/osd/osd_perf_counters.cc +++ b/src/osd/osd_perf_counters.cc @@ -530,6 +530,7 @@ PerfCounters *build_recoverystate_perf(CephContext *cct) { rs_perf.add_time_avg(rs_getmissing_latency, "getmissing_latency", "Getmissing recovery state latency"); rs_perf.add_time_avg(rs_waitupthru_latency, "waitupthru_latency", "Waitupthru recovery state latency"); rs_perf.add_time_avg(rs_notrecovering_latency, "notrecovering_latency", "Notrecovering recovery state latency"); + rs_perf.add_u64_counter(rs_stats_invalidated, "stats_invalidated", "Number of times pg stats received invalidations"); return rs_perf.create_perf_counters(); } diff --git a/src/osd/osd_perf_counters.h b/src/osd/osd_perf_counters.h index 0b3f9761312..f5f2a20d83d 100644 --- a/src/osd/osd_perf_counters.h +++ b/src/osd/osd_perf_counters.h @@ -255,6 +255,7 @@ enum { rs_getmissing_latency, rs_waitupthru_latency, rs_notrecovering_latency, + rs_stats_invalidated, rs_last, }; -- 2.47.3