]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/osd_types: add blocked_by to pg_stat_t
authorSage Weil <sage@redhat.com>
Mon, 4 Aug 2014 23:16:25 +0000 (16:16 -0700)
committerSage Weil <sage@redhat.com>
Mon, 4 Aug 2014 23:16:25 +0000 (16:16 -0700)
Signed-off-by: Sage Weil <sage@redhat.com>
src/osd/osd_types.cc
src/osd/osd_types.h

index 9cde9dcfe89ebb48230c9554dc0a2ead288327c8..a7ebda474a2703d43372230985049da8085c1c78 100644 (file)
@@ -1632,6 +1632,11 @@ void pg_stat_t::dump(Formatter *f) const
   for (vector<int>::const_iterator p = acting.begin(); p != acting.end(); ++p)
     f->dump_int("osd", *p);
   f->close_section();
+  f->open_array_section("blocked_by");
+  for (vector<int>::const_iterator p = blocked_by.begin();
+       p != blocked_by.end(); ++p)
+    f->dump_int("osd", *p);
+  f->close_section();
   f->dump_int("up_primary", up_primary);
   f->dump_int("acting_primary", acting_primary);
 }
@@ -1653,7 +1658,7 @@ void pg_stat_t::dump_brief(Formatter *f) const
 
 void pg_stat_t::encode(bufferlist &bl) const
 {
-  ENCODE_START(17, 8, bl);
+  ENCODE_START(18, 8, bl);
   ::encode(version, bl);
   ::encode(reported_seq, bl);
   ::encode(reported_epoch, bl);
@@ -1687,12 +1692,13 @@ void pg_stat_t::encode(bufferlist &bl) const
   ::encode(acting_primary, bl);
   ::encode(omap_stats_invalid, bl);
   ::encode(hitset_stats_invalid, bl);
+  ::encode(blocked_by, bl);
   ENCODE_FINISH(bl);
 }
 
 void pg_stat_t::decode(bufferlist::iterator &bl)
 {
-  DECODE_START_LEGACY_COMPAT_LEN(17, 8, 8, bl);
+  DECODE_START_LEGACY_COMPAT_LEN(18, 8, 8, bl);
   ::decode(version, bl);
   ::decode(reported_seq, bl);
   ::decode(reported_epoch, bl);
@@ -1800,6 +1806,11 @@ void pg_stat_t::decode(bufferlist::iterator &bl)
     // encoder may not have supported num_objects_hit_set_archive accounting.
     hitset_stats_invalid = true;
   }
+  if (struct_v >= 18) {
+    ::decode(blocked_by, bl);
+  } else {
+    blocked_by.clear();
+  }
   DECODE_FINISH(bl);
 }
 
@@ -1844,6 +1855,8 @@ void pg_stat_t::generate_test_instances(list<pg_stat_t*>& o)
   a.up_primary = 124;
   a.acting.push_back(124);
   a.acting_primary = 124;
+  a.blocked_by.push_back(155);
+  a.blocked_by.push_back(156);
   o.push_back(new pg_stat_t(a));
 }
 
index abbfe2c26754d724a436ec91404c7f40b7778292..30406853762d1447bacb835f57f2f6c4159f0e88 100644 (file)
@@ -1374,6 +1374,8 @@ struct pg_stat_t {
   vector<int> up, acting;
   epoch_t mapping_epoch;
 
+  vector<int> blocked_by;  ///< osds on which the pg is blocked
+
   utime_t last_became_active;
 
   /// true if num_objects_dirty is not accurate (because it was not