]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: keep tabs on total object copies vs missing/degraded
authorSage Weil <sage@newdream.net>
Thu, 4 Dec 2008 00:41:53 +0000 (16:41 -0800)
committerSage Weil <sage@newdream.net>
Thu, 4 Dec 2008 00:54:23 +0000 (16:54 -0800)
Define degraded as an object copy that is not present in the
proper location.

src/mon/PGMonitor.cc
src/osd/PG.cc
src/osd/PG.h
src/osd/osd_types.h

index 0805ae33dc27562de567d6e5062badaabeabab83..6217e075f3971096ca83c330e1fa9e351f33ad5d 100644 (file)
@@ -83,10 +83,14 @@ ostream& operator<<(ostream& out, PGMonitor& pm)
       << kb_t(pm.pg_map.osd_sum.kb_avail) << " / "
       << kb_t(pm.pg_map.osd_sum.kb) << " avail";
 
-  if (pm.pg_map.pg_sum.num_objects_missing_on_primary)
-    out << "; " << pm.pg_map.pg_sum.num_objects_missing_on_primary << "/"
-       << pm.pg_map.pg_sum.num_objects << " mip";
-
+  if (pm.pg_map.pg_sum.num_objects_degraded) {
+    double pc = (double)pm.pg_map.pg_sum.num_objects_degraded / (double)pm.pg_map.pg_sum.num_object_copies * (double)100.0;
+    char b[20];
+    sprintf(b, "%.3lf", pc);
+    out << "; " //<< pm.pg_map.pg_sum.num_objects_missing_on_primary << "/"
+       << pm.pg_map.pg_sum.num_objects_degraded 
+       << "/" << pm.pg_map.pg_sum.num_object_copies << " degraded (" << b << "%)";
+  }
   return out;
 }
 
index 2c6a3ce4060f0af6d329c8978a22ec278196b089..f2f156e2af7a55d086f365dcf649e9a279160c05 100644 (file)
@@ -1412,7 +1412,15 @@ void PG::update_stats()
     pg_stats_stable.reported = osd->osdmap->get_epoch();
     pg_stats_stable.state = state;
     pg_stats_stable.acting = acting;
-    pg_stats_stable.num_objects_missing_on_primary = missing.num_missing();
+
+    pg_stats_stable.num_object_copies = pg_stats_stable.num_objects * info.pgid.size();
+    if (!is_clean()) {
+      pg_stats_stable.num_objects_missing_on_primary = missing.num_missing();
+      int degraded = missing.num_missing();
+      for (unsigned i=1; i<acting.size(); i++)
+       degraded += peer_missing[i].num_missing();
+      pg_stats_stable.num_objects_degraded = degraded;
+    }
   } else {
     pg_stats_valid = false;
   }
index d1475775cd5bfd6299892b16177ef52259a44b5d..6118a668257f6d6a4911cb5ff87b318341a78c4d 100644 (file)
@@ -826,6 +826,7 @@ inline ostream& operator<<(ostream& out, const PG::Info& pgi)
         << " (" << pgi.log_bottom << "," << pgi.last_update << "]"
         << (pgi.log_backlog ? "+backlog":"");
   //out << " c " << pgi.epoch_created;
+  out << " n=" << pgi.stats.num_objects;
   out << " " << pgi.history
       << ")";
   return out;
index 369d8ae62a7b269668c19529de366c6ba1ff5d3d..2734934609bb23805d0a59ef93c7e63e7d106248 100644 (file)
@@ -380,6 +380,7 @@ struct pg_stat_t {
   __u64 num_kb;       // in KB
   __u64 num_objects;
   __u64 num_object_clones;
+  __u64 num_object_copies;  // num_objects * num_replicas
   __u64 num_objects_missing_on_primary;
   __u64 num_objects_degraded;
 
@@ -405,6 +406,7 @@ struct pg_stat_t {
     ::encode(num_kb, bl);
     ::encode(num_objects, bl);
     ::encode(num_object_clones, bl);
+    ::encode(num_object_copies, bl);
     ::encode(num_objects_missing_on_primary, bl);
     ::encode(num_objects_degraded, bl);
     ::encode(acting, bl);
@@ -422,6 +424,7 @@ struct pg_stat_t {
     ::decode(num_kb, bl);
     ::decode(num_objects, bl);
     ::decode(num_object_clones, bl);
+    ::decode(num_object_copies, bl);
     ::decode(num_objects_missing_on_primary, bl);
     ::decode(num_objects_degraded, bl);
     ::decode(acting, bl);
@@ -432,6 +435,7 @@ struct pg_stat_t {
     num_kb += o.num_kb;
     num_objects += o.num_objects;
     num_object_clones += o.num_object_clones;
+    num_object_copies += o.num_object_copies;
     num_objects_missing_on_primary += o.num_objects_missing_on_primary;
     num_objects_degraded += o.num_objects_degraded;
   }
@@ -440,6 +444,7 @@ struct pg_stat_t {
     num_kb -= o.num_kb;
     num_objects -= o.num_objects;
     num_object_clones -= o.num_object_clones;
+    num_object_copies -= o.num_object_copies;
     num_objects_missing_on_primary -= o.num_objects_missing_on_primary;
     num_objects_degraded -= o.num_objects_degraded;
   }