From 190dc2f38f30ce1e0c53a21dbd02c05ee96bddc2 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 30 Jun 2014 17:18:24 -0700 Subject: [PATCH] mon: track pgs that get stuck degraded Signed-off-by: Sage Weil --- src/mon/PGMap.cc | 5 +++++ src/mon/PGMap.h | 1 + src/mon/PGMonitor.cc | 14 ++++++++++++++ 3 files changed, 20 insertions(+) diff --git a/src/mon/PGMap.cc b/src/mon/PGMap.cc index b458df550ad08..fd918c952ebbb 100644 --- a/src/mon/PGMap.cc +++ b/src/mon/PGMap.cc @@ -771,6 +771,11 @@ void PGMap::get_stuck_stats(PGMap::StuckPG type, utime_t cutoff, continue; val = i->second.last_clean; break; + case STUCK_DEGRADED: + if ((i->second.state & PG_STATE_DEGRADED) == 0) + continue; + val = i->second.last_undegraded; + break; case STUCK_STALE: if ((i->second.state & PG_STATE_STALE) == 0) continue; diff --git a/src/mon/PGMap.h b/src/mon/PGMap.h index 66d634c3bb151..17ae221e8a9ef 100644 --- a/src/mon/PGMap.h +++ b/src/mon/PGMap.h @@ -186,6 +186,7 @@ public: enum StuckPG { STUCK_INACTIVE, STUCK_UNCLEAN, + STUCK_DEGRADED, STUCK_STALE, STUCK_NONE }; diff --git a/src/mon/PGMonitor.cc b/src/mon/PGMonitor.cc index 48365518a398d..ec24915d6f538 100644 --- a/src/mon/PGMonitor.cc +++ b/src/mon/PGMonitor.cc @@ -1790,6 +1790,10 @@ static void note_stuck_detail(enum PGMap::StuckPG what, since = p->second.last_clean; whatname = "unclean"; break; + case PGMap::STUCK_DEGRADED: + since = p->second.last_undegraded; + whatname = "degraded"; + break; case PGMap::STUCK_STALE: since = p->second.last_unstale; whatname = "stale"; @@ -1885,6 +1889,14 @@ void PGMonitor::get_health(list >& summary, } stuck_pgs.clear(); + pg_map.get_stuck_stats(PGMap::STUCK_DEGRADED, cutoff, stuck_pgs); + if (!stuck_pgs.empty()) { + note["stuck degraded"] = stuck_pgs.size(); + if (detail) + note_stuck_detail(PGMap::STUCK_DEGRADED, stuck_pgs, detail); + } + stuck_pgs.clear(); + pg_map.get_stuck_stats(PGMap::STUCK_STALE, cutoff, stuck_pgs); if (!stuck_pgs.empty()) { note["stuck stale"] = stuck_pgs.size(); @@ -2113,6 +2125,8 @@ int PGMonitor::dump_stuck_pg_stats(stringstream &ds, stuck_type = PGMap::STUCK_INACTIVE; else if (type == "unclean") stuck_type = PGMap::STUCK_UNCLEAN; + else if (type == "degraded") + stuck_type = PGMap::STUCK_DEGRADED; else if (type == "stale") stuck_type = PGMap::STUCK_STALE; else { -- 2.39.5