]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: use pool_stat_t for pool summation in PGMap
authorSage Weil <sage@newdream.net>
Thu, 11 Jun 2009 17:45:37 +0000 (10:45 -0700)
committerSage Weil <sage@newdream.net>
Thu, 11 Jun 2009 17:45:37 +0000 (10:45 -0700)
pg_stat_t has a lot of pg-specific fields we don't need for the
pool and total summations.

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

index a62eddd9b876138dc2f01cd76e5fa44461d92218..03fa764d70593c69047bf96997837f4452e932ad 100644 (file)
@@ -100,8 +100,8 @@ public:
   // aggregate stats (soft state)
   hash_map<int,int> num_pg_by_state;
   int64_t num_pg, num_osd;
-  hash_map<int,pg_stat_t> pg_pool_sum;
-  pg_stat_t pg_sum;
+  hash_map<int,pool_stat_t> pg_pool_sum;
+  pool_stat_t pg_sum;
   osd_stat_t osd_sum;
 
   set<pg_t> creating_pgs;   // lru: front = new additions, back = recently pinged
@@ -111,7 +111,7 @@ public:
     num_pg_by_state.clear();
     num_osd = 0;
     pg_pool_sum.clear();
-    pg_sum = pg_stat_t();
+    pg_sum = pool_stat_t();
     osd_sum = osd_stat_t();
   }
   void stat_pg_add(pg_t pgid, pg_stat_t &s) {
@@ -195,7 +195,7 @@ public:
         << "\t" << st.last_scrub << "\t" << st.last_scrub_stamp
         << std::endl;
     }
-    for (hash_map<int,pg_stat_t>::iterator p = pg_pool_sum.begin();
+    for (hash_map<int,pool_stat_t>::iterator p = pg_pool_sum.begin();
         p != pg_pool_sum.end();
         p++)
       ss << "pool " << p->first
index 6b2f59ada01bffcfabf58ad2a5e5e6cb351803b2..48fa4b1c7d0afd4ffbeaae8644586aa1654c7408 100644 (file)
@@ -251,15 +251,7 @@ bool PGMonitor::preprocess_getpoolstats(MGetPoolStats *m)
       continue;
     if (pg_map.pg_pool_sum.count(poolid) == 0)
       continue;
-    pg_stat_t& sum = pg_map.pg_pool_sum[poolid];
-    pool_stat_t& s = reply->pool_stats[*p];
-    s.num_bytes = sum.num_bytes;
-    s.num_kb = sum.num_kb;
-    s.num_objects = sum.num_objects;
-    s.num_object_clones = sum.num_object_clones;
-    s.num_object_copies = sum.num_object_copies;
-    s.num_objects_missing_on_primary = sum.num_objects_missing_on_primary;
-    s.num_objects_degraded = sum.num_objects_degraded;
+    reply->pool_stats[*p] = pg_map.pg_pool_sum[poolid];
   }
 
   mon->messenger->send_message(reply, m->get_orig_source_inst());
index 8eab20049556e75d5581d18bfa247f7ed29be5ff..6509c975210e8209863989b9bc04a80a226b60aa 100644 (file)
@@ -666,31 +666,9 @@ struct pg_stat_t {
 };
 WRITE_CLASS_ENCODER(pg_stat_t)
 
-struct osd_peer_stat_t {
-       struct ceph_timespec stamp;
-       float oprate;
-       float qlen;
-       float recent_qlen;
-       float read_latency;
-       float read_latency_mine;
-       float frac_rd_ops_shed_in;
-       float frac_rd_ops_shed_out;
-} __attribute__ ((packed));
-
-WRITE_RAW_ENCODER(osd_peer_stat_t)
-
-inline ostream& operator<<(ostream& out, const osd_peer_stat_t &stat) {
-  return out << "stat(" << stat.stamp
-    //<< " oprate=" << stat.oprate
-    //      << " qlen=" << stat.qlen 
-    //      << " recent_qlen=" << stat.recent_qlen
-            << " rdlat=" << stat.read_latency_mine << " / " << stat.read_latency
-            << " fshedin=" << stat.frac_rd_ops_shed_in
-            << ")";
-}
-
-
-
+/*
+ * summation over an entire pool
+ */
 struct pool_stat_t {
   __u64 num_bytes;    // in bytes
   __u64 num_kb;       // in KB
@@ -700,6 +678,11 @@ struct pool_stat_t {
   __u64 num_objects_missing_on_primary;
   __u64 num_objects_degraded;
 
+  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)
+  { }
+
   void encode(bufferlist &bl) const {
     ::encode(num_bytes, bl);
     ::encode(num_kb, bl);
@@ -718,10 +701,59 @@ struct pool_stat_t {
     ::decode(num_objects_missing_on_primary, bl);
     ::decode(num_objects_degraded, bl);
   }
+
+  void add(const pg_stat_t& o) {
+    num_bytes += o.num_bytes;
+    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;
+  }
+  void sub(const pg_stat_t& o) {
+    num_bytes -= o.num_bytes;
+    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;
+  }
 };
 WRITE_CLASS_ENCODER(pool_stat_t)
 
 
+
+
+
+
+struct osd_peer_stat_t {
+       struct ceph_timespec stamp;
+       float oprate;
+       float qlen;
+       float recent_qlen;
+       float read_latency;
+       float read_latency_mine;
+       float frac_rd_ops_shed_in;
+       float frac_rd_ops_shed_out;
+} __attribute__ ((packed));
+
+WRITE_RAW_ENCODER(osd_peer_stat_t)
+
+inline ostream& operator<<(ostream& out, const osd_peer_stat_t &stat) {
+  return out << "stat(" << stat.stamp
+    //<< " oprate=" << stat.oprate
+    //      << " qlen=" << stat.qlen 
+    //      << " recent_qlen=" << stat.recent_qlen
+            << " rdlat=" << stat.read_latency_mine << " / " << stat.read_latency
+            << " fshedin=" << stat.frac_rd_ops_shed_in
+            << ")";
+}
+
+
+
+
 // -----------------------------------------
 
 class ObjectExtent {