]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
Add num_objects_unfound to struct pg_stat_t
authorColin Patrick McCabe <cmccabe@alumni.cmu.edu>
Thu, 4 Nov 2010 21:40:22 +0000 (14:40 -0700)
committerColin Patrick McCabe <cmccabe@alumni.cmu.edu>
Wed, 10 Nov 2010 19:46:28 +0000 (11:46 -0800)
Signed-off-by: Colin McCabe <colinm@hq.newdream.net>
src/include/librados.h
src/include/librados.hpp
src/librados.cc
src/mon/PGMap.h
src/osd/PG.cc
src/osd/osd_types.h
src/rados.cc
src/tools/gui.cc

index e55d25a91e239182758edebe61c23d0299899415..acd7b1c4282c82054ba2c2b4a77d05a1c4ccd8ca 100644 (file)
@@ -31,6 +31,7 @@ struct rados_pool_stat_t {
   uint64_t num_object_clones;
   uint64_t num_object_copies;  // num_objects * num_replicas
   uint64_t num_objects_missing_on_primary;
+  uint64_t num_objects_unfound;
   uint64_t num_objects_degraded;
   uint64_t num_rd, num_rd_kb,num_wr, num_wr_kb;
 };
index de27660692074b4cd00a3c7679cd66419af97954..76fd5ca090dc4ef3ac337a1198dcaf533f9d2398 100644 (file)
@@ -31,6 +31,7 @@ namespace librados {
     uint64_t num_object_clones;
     uint64_t num_object_copies;  // num_objects * num_replicas
     uint64_t num_objects_missing_on_primary;
+    uint64_t num_objects_unfound;
     uint64_t num_objects_degraded;
     uint64_t num_rd, num_rd_kb, num_wr, num_wr_kb;
   };
index 096ad7dad954cd658211f21cf5509ddd1c6e46a7..fc4bfce6dfaad8c0783ec4b6e44562bd5b3306d6 100644 (file)
@@ -1416,6 +1416,7 @@ int Rados::get_pool_stats(std::list<string>& v, std::map<string,pool_stat_t>& re
     v.num_object_clones = p->second.num_object_clones;
     v.num_object_copies = p->second.num_object_copies;
     v.num_objects_missing_on_primary = p->second.num_objects_missing_on_primary;
+    v.num_objects_unfound = p->second.num_objects_unfound;
     v.num_objects_degraded = p->second.num_objects_degraded;
     v.num_rd = p->second.num_rd;
     v.num_rd_kb = p->second.num_rd_kb;
@@ -1904,6 +1905,7 @@ extern "C" int rados_stat_pool(rados_pool_t pool, struct rados_pool_stat_t *stat
   stats->num_object_clones = r.num_object_clones;
   stats->num_object_copies = r.num_object_copies;
   stats->num_objects_missing_on_primary = r.num_objects_missing_on_primary;
+  stats->num_objects_unfound = r.num_objects_unfound;
   stats->num_objects_degraded = r.num_objects_degraded;
   stats->num_rd = r.num_rd;
   stats->num_rd_kb = r.num_rd_kb;
index f789bd2dd954f7a05341092ae21ac9af35b53352..b8981fb82eb43c1b8ce5af5c99c50eb96eb8b366 100644 (file)
@@ -223,7 +223,7 @@ public:
     ss << "last_pg_scan " << last_pg_scan << std::endl;
     ss << "full_ratio " << full_ratio << std::endl;
     ss << "nearfull_ratio " << nearfull_ratio << std::endl;
-    ss << "pg_stat\tobjects\tmip\tdegr\tkb\tbytes\tlog\tdisklog\tstate\tv\treported\tup\tacting\tlast_scrub" << std::endl;
+    ss << "pg_stat\tobjects\tmip\tunf\tdegr\tkb\tbytes\tlog\tdisklog\tstate\tv\treported\tup\tacting\tlast_scrub" << std::endl;
     for (set<pg_t>::const_iterator p = pg_set.begin();
         p != pg_set.end();
         p++) {
@@ -237,6 +237,7 @@ public:
         << "\t" << st.num_objects
        //<< "\t" << st.num_object_copies
         << "\t" << st.num_objects_missing_on_primary
+        << "\t" << st.num_objects_unfound
         << "\t" << st.num_objects_degraded
         << "\t" << st.num_kb
         << "\t" << st.num_bytes
@@ -257,6 +258,7 @@ public:
         << "\t" << p->second.num_objects
        //<< "\t" << p->second.num_object_copies
         << "\t" << p->second.num_objects_missing_on_primary
+        << "\t" << p->second.num_objects_unfound
         << "\t" << p->second.num_objects_degraded
         << "\t" << p->second.num_kb
         << "\t" << p->second.num_bytes
@@ -266,6 +268,7 @@ public:
     ss << " sum\t" << pg_sum.num_objects
       //<< "\t" << pg_sum.num_object_copies
        << "\t" << pg_sum.num_objects_missing_on_primary
+       << "\t" << pg_sum.num_objects_unfound
        << "\t" << pg_sum.num_objects_degraded
        << "\t" << pg_sum.num_kb
        << "\t" << pg_sum.num_bytes
index 972130b34cf16d2084bb41f36b1b33e3bf379a1c..8e8746f38b0fb6e87da95bdf23bcd63ac48a181e 100644 (file)
@@ -1823,6 +1823,9 @@ void PG::update_stats()
        degraded += peer_missing[acting[i]].num_missing();
       }
       pg_stats_stable.num_objects_degraded += degraded;
+
+      pg_stats_stable.num_objects_unfound =
+       missing.num_missing() - missing_loc.size();
     }
 
     dout(15) << "update_stats " << pg_stats_stable.reported << dendl;
index 4ad1fbe526bed256813becaadc6d5faa725534c1..8f7a5466baf4f4cbb2b2101c2becfd2955e34286 100644 (file)
@@ -842,13 +842,19 @@ struct pg_stat_t {
   uint64_t num_objects;
   uint64_t num_object_clones;
   uint64_t num_object_copies;  // num_objects * num_replicas
+
+  // The number of objects missing on the primary OSD
   uint64_t num_objects_missing_on_primary;
+
   uint64_t num_objects_degraded;
   uint64_t log_size;
   uint64_t ondisk_log_size;    // >= active_log_size
 
   uint64_t num_rd, num_rd_kb;
   uint64_t num_wr, num_wr_kb;
+
+  // The number of objects missing on the primary OSD
+  uint64_t num_objects_unfound;
   
   vector<int> up, acting;
 
@@ -858,11 +864,12 @@ struct pg_stat_t {
                num_objects(0), num_object_clones(0), num_object_copies(0),
                num_objects_missing_on_primary(0), num_objects_degraded(0),
                log_size(0), ondisk_log_size(0),
-               num_rd(0), num_rd_kb(0), num_wr(0), num_wr_kb(0)
+               num_rd(0), num_rd_kb(0), num_wr(0), num_wr_kb(0),
+               num_objects_unfound(0)
   { }
 
   void encode(bufferlist &bl) const {
-    __u8 v = 3;
+    __u8 v = 4;
     ::encode(v, bl);
 
     ::encode(version, bl);
@@ -889,6 +896,7 @@ struct pg_stat_t {
     ::encode(num_wr, bl);
     ::encode(num_wr_kb, bl);
     ::encode(up, bl);
+    ::encode(num_objects_unfound, bl);
     ::encode(acting, bl);
   }
   void decode(bufferlist::iterator &bl) {
@@ -920,8 +928,12 @@ struct pg_stat_t {
       ::decode(num_wr, bl);
       ::decode(num_wr_kb, bl);
     }
-    if (v >= 3)
+    if (v >= 3) {
       ::decode(up, bl);
+    }
+    if (v >= 4) {
+      ::decode(num_objects_unfound, bl);
+    }
     ::decode(acting, bl);
   }
 
@@ -939,6 +951,7 @@ struct pg_stat_t {
     num_rd_kb += o.num_rd_kb;
     num_wr += o.num_wr;
     num_wr_kb += o.num_wr_kb;
+    num_objects_unfound += o.num_objects_unfound;
   }
   void sub(const pg_stat_t& o) {
     num_bytes -= o.num_bytes;
@@ -954,6 +967,7 @@ struct pg_stat_t {
     num_rd_kb -= o.num_rd_kb;
     num_wr -= o.num_wr;
     num_wr_kb -= o.num_wr_kb;
+    num_objects_unfound -= o.num_objects_unfound;
   }
 };
 WRITE_CLASS_ENCODER(pg_stat_t)
@@ -974,15 +988,19 @@ struct pool_stat_t {
   uint64_t num_rd, num_rd_kb;
   uint64_t num_wr, num_wr_kb;
 
+  // The number of logical objects that are still unfound
+  uint64_t num_objects_unfound;
+
   pool_stat_t() : num_bytes(0), num_kb(0), 
                  num_objects(0), num_object_clones(0), num_object_copies(0),
                  num_objects_missing_on_primary(0), num_objects_degraded(0),
                  log_size(0), ondisk_log_size(0),
-                 num_rd(0), num_rd_kb(0), num_wr(0), num_wr_kb(0)
+                 num_rd(0), num_rd_kb(0), num_wr(0), num_wr_kb(0),
+                 num_objects_unfound(0)
   { }
 
   void encode(bufferlist &bl) const {
-    __u8 v = 2;
+    __u8 v = 3;
     ::encode(v, bl);
     ::encode(num_bytes, bl);
     ::encode(num_kb, bl);
@@ -997,6 +1015,7 @@ struct pool_stat_t {
     ::encode(num_rd_kb, bl);
     ::encode(num_wr, bl);
     ::encode(num_wr_kb, bl);
+    ::encode(num_objects_unfound, bl);
  }
   void decode(bufferlist::iterator &bl) {
     __u8 v;
@@ -1016,6 +1035,9 @@ struct pool_stat_t {
       ::decode(num_wr, bl);
       ::decode(num_wr_kb, bl);
     }
+    if (v >= 3) {
+      ::decode(num_objects_unfound, bl);
+    }
   }
 
   void add(const pg_stat_t& o) {
@@ -1032,6 +1054,7 @@ struct pool_stat_t {
     num_rd_kb += o.num_rd_kb;
     num_wr += o.num_wr;
     num_wr_kb += o.num_wr_kb;
+    num_objects_unfound += o.num_objects_unfound;
   }
   void sub(const pg_stat_t& o) {
     num_bytes -= o.num_bytes;
@@ -1047,6 +1070,7 @@ struct pool_stat_t {
     num_rd_kb -= o.num_rd_kb;
     num_wr -= o.num_wr;
     num_wr_kb -= o.num_wr_kb;
+    num_objects_unfound -= o.num_objects_unfound;
   }
 };
 WRITE_CLASS_ENCODER(pool_stat_t)
index 9106f6a5e09a44ec682474c04ce2909eb9cfaac2..f4bc0e0480b3308f4243c0ec3b8fd922b5253d5c 100644 (file)
@@ -184,15 +184,22 @@ int main(int argc, const char **argv)
     map<string,pool_stat_t> stats;
     rados.get_pool_stats(vec, stats);
 
-    printf("%-15s %12s %12s %12s %12s %12s %12s %12s %12s\n",
-          "pool name", "KB", "objects", "clones", "degraded", "rd", "rd KB", "wr", "wr KB");
+    printf("%-15s "
+          "%12s %12s %12s %12s "
+          "%12s %12s %12s %12s %12s\n",
+          "pool name",
+          "KB", "objects", "clones", "degraded",
+          "unfound", "rd", "rd KB", "wr", "wr KB");
     for (map<string,pool_stat_t>::iterator i = stats.begin(); i != stats.end(); ++i) {
-      printf("%-15s %12lld %12lld %12lld %12lld %12lld %12lld %12lld %12lld\n",
+      printf("%-15s "
+            "%12lld %12lld %12lld %12lld"
+            "%12lld %12lld %12lld %12lld %12lld\n",
             i->first.c_str(),
             (long long)i->second.num_kb,
             (long long)i->second.num_objects,
             (long long)i->second.num_object_clones,
             (long long)i->second.num_objects_degraded,
+            (long long)i->second.num_objects_unfound,
             (long long)i->second.num_rd, (long long)i->second.num_rd_kb,
             (long long)i->second.num_wr, (long long)i->second.num_wr_kb);
     }
index b968b9e765c1f8befbb4757de79fb84162b61c52..322f525824da96676df4465e2d3bd77e16347369 100644 (file)
@@ -1669,6 +1669,8 @@ void GuiMonitor::StatsWindowInfo::gen_pg_node_columns()
      str(boost::format("%llu") % stat.num_objects_missing_on_primary));
   insert_stats("Number of Objects Degraded",
      str(boost::format("%llu") % stat.num_objects_degraded));
+  insert_stats("Number of Objects Unfound",
+     str(boost::format("%llu") % stat.num_objects_unfound));
   insert_stats("KB", str(boost::format("%llu") % stat.num_kb));
   insert_stats("Bytes", str(boost::format("%llu") % stat.num_bytes));
   insert_stats("Log Size", str(boost::format("%llu") % stat.log_size));