]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/osd_types: add num_bytes_hit_set_archive to stats
authorSage Weil <sage@redhat.com>
Wed, 13 Aug 2014 13:37:55 +0000 (06:37 -0700)
committerSage Weil <sage@redhat.com>
Fri, 29 Aug 2014 23:52:38 +0000 (16:52 -0700)
The tiering agent's life is easier/better if it knows how many bytes these
objects consume (instead of making a conservative guess).

Signed-off-by: Sage Weil <sage@redhat.com>
src/osd/osd_types.cc
src/osd/osd_types.h

index 27f6e26c00ecc32ce3b43fde951b25f56a641474..7a86236f8146de1a30a36a2483fca0a6ad01c7a5 100644 (file)
@@ -1397,11 +1397,12 @@ void object_stat_sum_t::dump(Formatter *f) const
   f->dump_int("num_keys_recovered", num_keys_recovered);
   f->dump_int("num_objects_omap", num_objects_omap);
   f->dump_int("num_objects_hit_set_archive", num_objects_hit_set_archive);
+  f->dump_int("num_bytes_hit_set_archive", num_bytes_hit_set_archive);
 }
 
 void object_stat_sum_t::encode(bufferlist& bl) const
 {
-  ENCODE_START(10, 3, bl);
+  ENCODE_START(11, 3, bl);
   ::encode(num_bytes, bl);
   ::encode(num_objects, bl);
   ::encode(num_object_clones, bl);
@@ -1424,12 +1425,13 @@ void object_stat_sum_t::encode(bufferlist& bl) const
   ::encode(num_objects_omap, bl);
   ::encode(num_objects_hit_set_archive, bl);
   ::encode(num_objects_misplaced, bl);
+  ::encode(num_bytes_hit_set_archive, bl);
   ENCODE_FINISH(bl);
 }
 
 void object_stat_sum_t::decode(bufferlist::iterator& bl)
 {
-  DECODE_START_LEGACY_COMPAT_LEN(10, 3, 3, bl);
+  DECODE_START_LEGACY_COMPAT_LEN(11, 3, 3, bl);
   ::decode(num_bytes, bl);
   if (struct_v < 3) {
     uint64_t num_kb;
@@ -1488,13 +1490,17 @@ void object_stat_sum_t::decode(bufferlist::iterator& bl)
   } else {
     num_objects_misplaced = 0;
   }
+  if (struct_v >= 11) {
+    ::decode(num_bytes_hit_set_archive, bl);
+  } else {
+    num_bytes_hit_set_archive = 0;
+  }
   DECODE_FINISH(bl);
 }
 
 void object_stat_sum_t::generate_test_instances(list<object_stat_sum_t*>& o)
 {
   object_stat_sum_t a;
-  o.push_back(new object_stat_sum_t(a));
 
   a.num_bytes = 1;
   a.num_objects = 3;
@@ -1514,6 +1520,8 @@ void object_stat_sum_t::generate_test_instances(list<object_stat_sum_t*>& o)
   a.num_objects_dirty = 21;
   a.num_whiteouts = 22;
   a.num_objects_misplaced = 1232;
+  a.num_objects_hit_set_archive = 2;
+  a.num_bytes_hit_set_archive = 27;
   o.push_back(new object_stat_sum_t(a));
 }
 
@@ -1541,6 +1549,7 @@ void object_stat_sum_t::add(const object_stat_sum_t& o)
   num_whiteouts += o.num_whiteouts;
   num_objects_omap += o.num_objects_omap;
   num_objects_hit_set_archive += o.num_objects_hit_set_archive;
+  num_bytes_hit_set_archive += o.num_bytes_hit_set_archive;
 }
 
 void object_stat_sum_t::sub(const object_stat_sum_t& o)
@@ -1567,6 +1576,7 @@ void object_stat_sum_t::sub(const object_stat_sum_t& o)
   num_whiteouts -= o.num_whiteouts;
   num_objects_omap -= o.num_objects_omap;
   num_objects_hit_set_archive -= o.num_objects_hit_set_archive;
+  num_bytes_hit_set_archive -= o.num_bytes_hit_set_archive;
 }
 
 
@@ -1683,7 +1693,7 @@ void pg_stat_t::dump_brief(Formatter *f) const
 
 void pg_stat_t::encode(bufferlist &bl) const
 {
-  ENCODE_START(19, 8, bl);
+  ENCODE_START(20, 8, bl);
   ::encode(version, bl);
   ::encode(reported_seq, bl);
   ::encode(reported_epoch, bl);
@@ -1720,12 +1730,13 @@ void pg_stat_t::encode(bufferlist &bl) const
   ::encode(blocked_by, bl);
   ::encode(last_undegraded, bl);
   ::encode(last_fullsized, bl);
+  ::encode(hitset_bytes_stats_invalid, bl);
   ENCODE_FINISH(bl);
 }
 
 void pg_stat_t::decode(bufferlist::iterator &bl)
 {
-  DECODE_START_LEGACY_COMPAT_LEN(19, 8, 8, bl);
+  DECODE_START_LEGACY_COMPAT_LEN(20, 8, 8, bl);
   ::decode(version, bl);
   ::decode(reported_seq, bl);
   ::decode(reported_epoch, bl);
@@ -1845,6 +1856,13 @@ void pg_stat_t::decode(bufferlist::iterator &bl)
     last_undegraded = utime_t();
     last_fullsized = utime_t();
   }
+  if (struct_v >= 20) {
+    ::decode(hitset_bytes_stats_invalid, bl);
+  } else {
+    // if we are decoding an old encoding of this object, then the
+    // encoder may not have supported num_bytes_hit_set_archive accounting.
+    hitset_bytes_stats_invalid = true;
+  }
   DECODE_FINISH(bl);
 }
 
index 4368998a1eddc485fbb704e5d8c3c0451703b155..34c789267bf01e456c4690100f6d49c4ea001797 100644 (file)
@@ -1180,6 +1180,7 @@ struct object_stat_sum_t {
   int64_t num_whiteouts;
   int64_t num_objects_omap;
   int64_t num_objects_hit_set_archive;
+  int64_t num_bytes_hit_set_archive;
 
   object_stat_sum_t()
     : num_bytes(0),
@@ -1196,7 +1197,8 @@ struct object_stat_sum_t {
       num_objects_dirty(0),
       num_whiteouts(0),
       num_objects_omap(0),
-      num_objects_hit_set_archive(0)
+      num_objects_hit_set_archive(0),
+      num_bytes_hit_set_archive(0)
   {}
 
   void floor(int64_t f) {
@@ -1223,6 +1225,7 @@ struct object_stat_sum_t {
     FLOOR(num_whiteouts);
     FLOOR(num_objects_omap);
     FLOOR(num_objects_hit_set_archive);
+    FLOOR(num_bytes_hit_set_archive);
 #undef FLOOR
   }
 
@@ -1257,6 +1260,7 @@ struct object_stat_sum_t {
     SPLIT(num_whiteouts);
     SPLIT(num_objects_omap);
     SPLIT(num_objects_hit_set_archive);
+    SPLIT(num_bytes_hit_set_archive);
 #undef SPLIT
   }
 
@@ -1393,6 +1397,7 @@ struct pg_stat_t {
   bool dirty_stats_invalid;
   bool omap_stats_invalid;
   bool hitset_stats_invalid;
+  bool hitset_bytes_stats_invalid;
 
   /// up, acting primaries
   int32_t up_primary;
@@ -1410,6 +1415,7 @@ struct pg_stat_t {
       dirty_stats_invalid(false),
       omap_stats_invalid(false),
       hitset_stats_invalid(false),
+      hitset_bytes_stats_invalid(false),
       up_primary(-1),
       acting_primary(-1)
   { }