]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: track pgs that get stuck degraded
authorSage Weil <sage@redhat.com>
Tue, 1 Jul 2014 00:18:24 +0000 (17:18 -0700)
committerSage Weil <sage@redhat.com>
Sat, 16 Aug 2014 20:19:46 +0000 (13:19 -0700)
Signed-off-by: Sage Weil <sage@redhat.com>
src/mon/PGMap.cc
src/mon/PGMap.h
src/mon/PGMonitor.cc

index b458df550ad081cf6201ec021f7f1d2cd50ba110..fd918c952ebbbb6588b8903628b31201207bfb06 100644 (file)
@@ -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;
index 66d634c3bb151000ea352b31caa71f438deb342d..17ae221e8a9ef4bee41bd24d023068cea40cc3f5 100644 (file)
@@ -186,6 +186,7 @@ public:
   enum StuckPG {
     STUCK_INACTIVE,
     STUCK_UNCLEAN,
+    STUCK_DEGRADED,
     STUCK_STALE,
     STUCK_NONE
   };
index 48365518a398d8ed7a8657928abce30e9c33cce5..ec24915d6f53830343c7e0a95540e5f4be9ee420 100644 (file)
@@ -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<pair<health_status_t,string> >& 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 {