From 7816ab5a8eb0ea754a0809eb9da915a16ad39e83 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 18 Sep 2017 16:53:31 -0500 Subject: [PATCH] osd: print summary for forced backfill/recovery to debug Signed-off-by: Sage Weil --- src/osd/OSD.cc | 18 ++++++++++++++++-- src/osd/PG.cc | 12 ++++++++++-- src/osd/PG.h | 4 ++-- 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 207311bae08..c9cbe9ed355 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -8738,15 +8738,29 @@ void OSDService::adjust_pg_priorities(const vector& pgs, int newflags) if (!pgs.size() || !(newflags & (OFR_BACKFILL | OFR_RECOVERY))) { return; } + set did; if (newflags & OFR_BACKFILL) { for (auto& pg : pgs) { - pg->set_force_backfill(!(newflags & OFR_CANCEL)); + if (pg->set_force_backfill(!(newflags & OFR_CANCEL))) { + did.insert(pg->pg_id); + } } } else if (newflags & OFR_RECOVERY) { for (auto& pg : pgs) { - pg->set_force_recovery(!(newflags & OFR_CANCEL)); + if (pg->set_force_recovery(!(newflags & OFR_CANCEL))) { + did.insert(pg->pg_id); + } } } + if (did.empty()) { + dout(10) << __func__ << " " << ((newflags & OFR_CANCEL) ? "cleared" : "set") + << " force_" << ((newflags & OFR_BACKFILL) ? "backfill" : "recovery") + << " on no pgs" << dendl; + } else { + dout(10) << __func__ << " " << ((newflags & OFR_CANCEL) ? "cleared" : "set") + << " force_" << ((newflags & OFR_BACKFILL) ? "backfill" : "recovery") + << " on " << did << dendl; + } } void OSD::do_recovery( diff --git a/src/osd/PG.cc b/src/osd/PG.cc index 00f29614986..47817f0bb91 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -2001,8 +2001,9 @@ void PG::mark_clean() kick_snap_trim(); } -void PG::set_force_recovery(bool b) +bool PG::set_force_recovery(bool b) { + bool did = false; lock(); if (!deleting) { if (b) { @@ -2013,18 +2014,22 @@ void PG::set_force_recovery(bool b) dout(20) << __func__ << " set" << dendl; state_set(PG_STATE_FORCED_RECOVERY); publish_stats_to_osd(); + did = true; } } else if (state & PG_STATE_FORCED_RECOVERY) { dout(20) << __func__ << " clear" << dendl; state_clear(PG_STATE_FORCED_RECOVERY); publish_stats_to_osd(); + did = true; } } unlock(); + return did; } -void PG::set_force_backfill(bool b) +bool PG::set_force_backfill(bool b) { + bool did = false; lock(); if (!deleting) { if (b) { @@ -2035,14 +2040,17 @@ void PG::set_force_backfill(bool b) dout(10) << __func__ << " set" << dendl; state_set(PG_STATE_FORCED_RECOVERY); publish_stats_to_osd(); + did = true; } } else if (state & PG_STATE_FORCED_RECOVERY) { dout(10) << __func__ << " clear" << dendl; state_clear(PG_STATE_FORCED_RECOVERY); publish_stats_to_osd(); + did = true; } } unlock(); + return did; } inline int PG::clamp_recovery_priority(int priority) diff --git a/src/osd/PG.h b/src/osd/PG.h index 03e4d511995..2e75fff4f84 100644 --- a/src/osd/PG.h +++ b/src/osd/PG.h @@ -429,8 +429,8 @@ public: bool is_forced_recovery_or_backfill() const { return get_state() & (PG_STATE_FORCED_RECOVERY | PG_STATE_FORCED_BACKFILL); } - void set_force_recovery(bool b); - void set_force_backfill(bool b); + bool set_force_recovery(bool b); + bool set_force_backfill(bool b); void queue_peering_event(CephPeeringEvtRef evt); void process_peering_event(RecoveryCtx *rctx); -- 2.39.5