]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: track stuck undersized
authorSage Weil <sage@redhat.com>
Wed, 2 Jul 2014 16:10:23 +0000 (09:10 -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 fd918c952ebbbb6588b8903628b31201207bfb06..b7a0a4e9ef7705ff245b676106f7eefa97c68a13 100644 (file)
@@ -776,6 +776,11 @@ void PGMap::get_stuck_stats(PGMap::StuckPG type, utime_t cutoff,
        continue;
       val = i->second.last_undegraded;
       break;
+    case STUCK_UNDERSIZED:
+      if ((i->second.state & PG_STATE_UNDERSIZED) == 0)
+       continue;
+      val = i->second.last_fullsized;
+      break;
     case STUCK_STALE:
       if ((i->second.state & PG_STATE_STALE) == 0)
        continue;
index 17ae221e8a9ef4bee41bd24d023068cea40cc3f5..7b4eb6ed66695b0bed618c022588fe84ba995f1b 100644 (file)
@@ -186,6 +186,7 @@ public:
   enum StuckPG {
     STUCK_INACTIVE,
     STUCK_UNCLEAN,
+    STUCK_UNDERSIZED,
     STUCK_DEGRADED,
     STUCK_STALE,
     STUCK_NONE
index ec24915d6f53830343c7e0a95540e5f4be9ee420..ca8142dd500b42492bad7d6bad82229bec24dc5d 100644 (file)
@@ -1794,6 +1794,10 @@ static void note_stuck_detail(enum PGMap::StuckPG what,
       since = p->second.last_undegraded;
       whatname = "degraded";
       break;
+    case PGMap::STUCK_UNDERSIZED:
+      since = p->second.last_fullsized;
+      whatname = "undersized";
+      break;
     case PGMap::STUCK_STALE:
       since = p->second.last_unstale;
       whatname = "stale";
@@ -1845,6 +1849,8 @@ void PGMonitor::get_health(list<pair<health_status_t,string> >& summary,
       note["stale"] += p->second;
     if (p->first & PG_STATE_DOWN)
       note["down"] += p->second;
+    if (p->first & PG_STATE_UNDERSIZED)
+      note["undersized"] += p->second;
     if (p->first & PG_STATE_DEGRADED)
       note["degraded"] += p->second;
     if (p->first & PG_STATE_INCONSISTENT)
@@ -1889,6 +1895,14 @@ void PGMonitor::get_health(list<pair<health_status_t,string> >& summary,
   }
   stuck_pgs.clear();
 
+  pg_map.get_stuck_stats(PGMap::STUCK_UNDERSIZED, cutoff, stuck_pgs);
+  if (!stuck_pgs.empty()) {
+    note["stuck undersized"] = stuck_pgs.size();
+    if (detail)
+      note_stuck_detail(PGMap::STUCK_UNDERSIZED, stuck_pgs, detail);
+  }
+  stuck_pgs.clear();
+
   pg_map.get_stuck_stats(PGMap::STUCK_DEGRADED, cutoff, stuck_pgs);
   if (!stuck_pgs.empty()) {
     note["stuck degraded"] = stuck_pgs.size();
@@ -1916,6 +1930,7 @@ void PGMonitor::get_health(list<pair<health_status_t,string> >& summary,
           ++p) {
        if ((p->second.state & (PG_STATE_STALE |
                               PG_STATE_DOWN |
+                              PG_STATE_UNDERSIZED |
                               PG_STATE_DEGRADED |
                               PG_STATE_INCONSISTENT |
                               PG_STATE_PEERING |
@@ -2125,6 +2140,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 == "undersized")
+    stuck_type = PGMap::STUCK_UNDERSIZED;
   else if (type == "degraded")
     stuck_type = PGMap::STUCK_DEGRADED;
   else if (type == "stale")