]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: track the number of hit_set archive objects in a pg
authorSamuel Just <sam.just@inktank.com>
Mon, 21 Apr 2014 17:52:58 +0000 (10:52 -0700)
committerSamuel Just <sam.just@inktank.com>
Mon, 21 Apr 2014 17:52:58 +0000 (10:52 -0700)
Also, use this value in agent_choose_mode instead of the max
number.

Related: #8124
Signed-off-by: Samuel Just <sam.just@inktank.com>
src/osd/ReplicatedPG.cc
src/osd/osd_types.cc
src/osd/osd_types.h

index 5ca31e4c6ee9bb33ebe4f11d4d96efd15f79b1ff..cdb049a3d1e4ca387ce5bd8c559ff1fffdbec764 100644 (file)
@@ -10619,6 +10619,7 @@ void ReplicatedPG::hit_set_persist()
   ctx->new_snapset.head_exists = true;
 
   ctx->delta_stats.num_objects++;
+  ctx->delta_stats.num_objects_hit_set_archive++;
   ctx->delta_stats.num_bytes += bl.length();
 
   bufferlist bss;
@@ -10693,6 +10694,7 @@ void ReplicatedPG::hit_set_trim(RepGather *repop, unsigned max)
       &st);
     assert(r == 0);
     --repop->ctx->delta_stats.num_objects;
+    --repop->ctx->delta_stats.num_objects_hit_set_archive;
     repop->ctx->delta_stats.num_bytes -= st.st_size;
   }
 }
@@ -11064,10 +11066,10 @@ void ReplicatedPG::agent_choose_mode()
 
   uint64_t num_user_objects = info.stats.stats.sum.num_objects;
 
-  // adjust (effective) user objects down based on the (max) number
+  // adjust (effective) user objects down based on the number
   // of HitSet objects, which should not count toward our total since
   // they cannot be flushed.
-  uint64_t unflushable = pool.info.hit_set_count;
+  uint64_t unflushable = info.stats.stats.sum.num_objects_hit_set_archive;
 
   // also exclude omap objects if ec backing pool
   const pg_pool_t *base_pool = get_osdmap()->get_pg_pool(pool.info.tier_of);
@@ -11285,6 +11287,9 @@ void ReplicatedPG::_scrub(ScrubMap& scrubmap)
     if (soid.snap != CEPH_SNAPDIR)
       stat.num_objects++;
 
+    if (soid.nspace == cct->_conf->osd_hit_set_namespace)
+      stat.num_objects_hit_set_archive++;
+
     // new snapset?
     if (soid.snap == CEPH_SNAPDIR ||
        soid.snap == CEPH_NOSNAP) {
@@ -11483,6 +11488,7 @@ void ReplicatedPG::_scrub_finish()
           << scrub_cstat.sum.num_object_clones << "/" << info.stats.stats.sum.num_object_clones << " clones, "
           << scrub_cstat.sum.num_objects_dirty << "/" << info.stats.stats.sum.num_objects_dirty << " dirty, "
           << scrub_cstat.sum.num_objects_omap << "/" << info.stats.stats.sum.num_objects_omap << " omap, "
+          << scrub_cstat.sum.num_objects_hit_set_archive << "/" << info.stats.stats.sum.num_objects_hit_set_archive << " hit_set_archive, "
           << scrub_cstat.sum.num_bytes << "/" << info.stats.stats.sum.num_bytes << " bytes."
           << dendl;
 
@@ -11492,6 +11498,8 @@ void ReplicatedPG::_scrub_finish()
        !info.stats.dirty_stats_invalid) ||
       (scrub_cstat.sum.num_objects_omap != info.stats.stats.sum.num_objects_omap &&
        !info.stats.omap_stats_invalid) ||
+      (scrub_cstat.sum.num_objects_hit_set_archive != info.stats.stats.sum.num_objects_hit_set_archive &&
+       !info.stats.hitset_stats_invalid) ||
       scrub_cstat.sum.num_whiteouts != info.stats.stats.sum.num_whiteouts ||
       scrub_cstat.sum.num_bytes != info.stats.stats.sum.num_bytes) {
     osd->clog.error() << info.pgid << " " << mode
@@ -11500,6 +11508,7 @@ void ReplicatedPG::_scrub_finish()
                      << scrub_cstat.sum.num_object_clones << "/" << info.stats.stats.sum.num_object_clones << " clones, "
                      << scrub_cstat.sum.num_objects_dirty << "/" << info.stats.stats.sum.num_objects_dirty << " dirty, "
                      << scrub_cstat.sum.num_objects_omap << "/" << info.stats.stats.sum.num_objects_omap << " omap, "
+                     << scrub_cstat.sum.num_objects_hit_set_archive << "/" << info.stats.stats.sum.num_objects_hit_set_archive << " hit_set_archive, "
                      << scrub_cstat.sum.num_whiteouts << "/" << info.stats.stats.sum.num_whiteouts << " whiteouts, "
                      << scrub_cstat.sum.num_bytes << "/" << info.stats.stats.sum.num_bytes << " bytes.\n";
     ++scrubber.shallow_errors;
@@ -11509,6 +11518,7 @@ void ReplicatedPG::_scrub_finish()
       info.stats.stats = scrub_cstat;
       info.stats.dirty_stats_invalid = false;
       info.stats.omap_stats_invalid = false;
+      info.stats.hitset_stats_invalid = false;
       publish_stats_to_osd();
       share_pg_info();
     }
index 6649b114735b33ebf4109312dde2e1476cf649e5..50124409c9b3bfac31cb28f7827635d77a836fc5 100644 (file)
@@ -1311,11 +1311,12 @@ void object_stat_sum_t::dump(Formatter *f) const
   f->dump_int("num_bytes_recovered", num_bytes_recovered);
   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);
 }
 
 void object_stat_sum_t::encode(bufferlist& bl) const
 {
-  ENCODE_START(8, 3, bl);
+  ENCODE_START(9, 3, bl);
   ::encode(num_bytes, bl);
   ::encode(num_objects, bl);
   ::encode(num_object_clones, bl);
@@ -1336,12 +1337,13 @@ void object_stat_sum_t::encode(bufferlist& bl) const
   ::encode(num_objects_dirty, bl);
   ::encode(num_whiteouts, bl);
   ::encode(num_objects_omap, bl);
+  ::encode(num_objects_hit_set_archive, bl);
   ENCODE_FINISH(bl);
 }
 
 void object_stat_sum_t::decode(bufferlist::iterator& bl)
 {
-  DECODE_START_LEGACY_COMPAT_LEN(8, 3, 3, bl);
+  DECODE_START_LEGACY_COMPAT_LEN(9, 3, 3, bl);
   ::decode(num_bytes, bl);
   if (struct_v < 3) {
     uint64_t num_kb;
@@ -1390,6 +1392,11 @@ void object_stat_sum_t::decode(bufferlist::iterator& bl)
   } else {
     num_objects_omap = 0;
   }
+  if (struct_v >= 9) {
+    ::decode(num_objects_hit_set_archive, bl);
+  } else {
+    num_objects_hit_set_archive = 0;
+  }
   DECODE_FINISH(bl);
 }
 
@@ -1440,6 +1447,7 @@ void object_stat_sum_t::add(const object_stat_sum_t& o)
   num_objects_dirty += o.num_objects_dirty;
   num_whiteouts += o.num_whiteouts;
   num_objects_omap += o.num_objects_omap;
+  num_objects_hit_set_archive += o.num_objects_hit_set_archive;
 }
 
 void object_stat_sum_t::sub(const object_stat_sum_t& o)
@@ -1464,6 +1472,7 @@ void object_stat_sum_t::sub(const object_stat_sum_t& o)
   num_objects_dirty -= o.num_objects_dirty;
   num_whiteouts -= o.num_whiteouts;
   num_objects_omap -= o.num_objects_omap;
+  num_objects_hit_set_archive -= o.num_objects_hit_set_archive;
 }
 
 
@@ -1573,7 +1582,7 @@ void pg_stat_t::dump_brief(Formatter *f) const
 
 void pg_stat_t::encode(bufferlist &bl) const
 {
-  ENCODE_START(16, 8, bl);
+  ENCODE_START(17, 8, bl);
   ::encode(version, bl);
   ::encode(reported_seq, bl);
   ::encode(reported_epoch, bl);
@@ -1606,12 +1615,13 @@ void pg_stat_t::encode(bufferlist &bl) const
   ::encode(up_primary, bl);
   ::encode(acting_primary, bl);
   ::encode(omap_stats_invalid, bl);
+  ::encode(hitset_stats_invalid, bl);
   ENCODE_FINISH(bl);
 }
 
 void pg_stat_t::decode(bufferlist::iterator &bl)
 {
-  DECODE_START_LEGACY_COMPAT_LEN(16, 8, 8, bl);
+  DECODE_START_LEGACY_COMPAT_LEN(17, 8, 8, bl);
   ::decode(version, bl);
   ::decode(reported_seq, bl);
   ::decode(reported_epoch, bl);
@@ -1712,6 +1722,13 @@ void pg_stat_t::decode(bufferlist::iterator &bl)
     // encoder may not have supported num_objects_omap accounting.
     omap_stats_invalid = true;
   }
+  if (struct_v >= 17) {
+    ::decode(hitset_stats_invalid, bl);
+  } else {
+    // if we are decoding an old encoding of this object, then the
+    // encoder may not have supported num_objects_hit_set_archive accounting.
+    hitset_stats_invalid = true;
+  }
   DECODE_FINISH(bl);
 }
 
index 4154d42fcfba844c5702282115e1568236cbec8b..d55f63a4dd5937b3da177ea30b788bd46c4f392b 100644 (file)
@@ -1125,6 +1125,7 @@ struct object_stat_sum_t {
   int64_t num_objects_dirty;
   int64_t num_whiteouts;
   int64_t num_objects_omap;
+  int64_t num_objects_hit_set_archive;
 
   object_stat_sum_t()
     : num_bytes(0),
@@ -1138,7 +1139,8 @@ struct object_stat_sum_t {
       num_keys_recovered(0),
       num_objects_dirty(0),
       num_whiteouts(0),
-      num_objects_omap(0)
+      num_objects_omap(0),
+      num_objects_hit_set_archive(0)
   {}
 
   void floor(int64_t f) {
@@ -1163,6 +1165,7 @@ struct object_stat_sum_t {
     FLOOR(num_objects_dirty);
     FLOOR(num_whiteouts);
     FLOOR(num_objects_omap);
+    FLOOR(num_objects_hit_set_archive);
 #undef FLOOR
   }
 
@@ -1195,6 +1198,7 @@ struct object_stat_sum_t {
     SPLIT(num_objects_dirty);
     SPLIT(num_whiteouts);
     SPLIT(num_objects_omap);
+    SPLIT(num_objects_hit_set_archive);
 #undef SPLIT
   }
 
@@ -1326,6 +1330,7 @@ struct pg_stat_t {
   /// maintained starting from pool creation)
   bool dirty_stats_invalid;
   bool omap_stats_invalid;
+  bool hitset_stats_invalid;
 
   /// up, acting primaries
   int up_primary;
@@ -1342,6 +1347,7 @@ struct pg_stat_t {
       mapping_epoch(0),
       dirty_stats_invalid(false),
       omap_stats_invalid(false),
+      hitset_stats_invalid(false),
       up_primary(-1),
       acting_primary(-1)
   { }