]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/scrub: Add stats to PG dump for number of objects scrubbed
authorAishwarya Mathuria <amathuri@redhat.com>
Tue, 10 Aug 2021 14:21:02 +0000 (19:51 +0530)
committerAishwarya Mathuria <amathuri@redhat.com>
Wed, 12 Jan 2022 09:27:27 +0000 (14:57 +0530)
Addition of a new column in PG dump, OBJECTS_SCRUBBED, which keeps track of the number of objects scrubbed.

Signed-off-by: Aishwarya Mathuria <amathuri@redhat.com>
src/mon/PGMap.cc
src/osd/PG.h
src/osd/osd_types.cc
src/osd/osd_types.h
src/osd/scrubber/pg_scrubber.cc

index 1df61c51d687a077a158ea40542042f3c4a703b2..f7e40e207022dcee961d86609631688d72b8d901 100644 (file)
@@ -1675,6 +1675,7 @@ void PGMap::dump_pg_stats_plain(
     tab.define_column("SNAPTRIMQ_LEN", TextTable::LEFT, TextTable::RIGHT);
     tab.define_column("LAST_SCRUB_DURATION", TextTable::LEFT, TextTable::RIGHT);
     tab.define_column("SCRUB_SCHEDULING", TextTable::LEFT, TextTable::LEFT);
+    tab.define_column("OBJECTS_SCRUBBED", TextTable::LEFT, TextTable::RIGHT);
   }
 
   for (const auto& [pg, st] : pg_stats) {
@@ -1716,6 +1717,7 @@ void PGMap::dump_pg_stats_plain(
           << st.snaptrimq_len
           << st.last_scrub_duration
           << st.dump_scrub_schedule()
+          << st.objects_scrubbed
           << TextTable::endrow;
     }
   }
index 6bcd0dca131943e71d6f7acfedc639a16a8dd4d8..e56c61f49591c80ed453d25fafc9be078894b3a6 100644 (file)
@@ -282,6 +282,19 @@ public:
       });
   }
 
+  static void add_objects_scrubbed_count(
+    int64_t count, pg_stat_t &stats) {
+    stats.objects_scrubbed += count;
+  }
+
+  void add_objects_scrubbed_count(int64_t count) {
+    recovery_state.update_stats(
+      [=](auto &history, auto &stats) {
+       add_objects_scrubbed_count(count, stats);
+       return true;
+      });
+  }
+
   bool is_deleting() const {
     return recovery_state.is_deleting();
   }
index f2e983f7d6e5058292ba92cfa802e1444cabe64c..9a0927d16a78de26301081c6b14466b42ba20efd 100644 (file)
@@ -2850,6 +2850,7 @@ void pg_stat_t::dump(Formatter *f) const
   f->dump_stream("last_deep_scrub") << last_deep_scrub;
   f->dump_stream("last_deep_scrub_stamp") << last_deep_scrub_stamp;
   f->dump_stream("last_clean_scrub_stamp") << last_clean_scrub_stamp;
+  f->dump_int("objects_scrubbed", objects_scrubbed);
   f->dump_int("log_size", log_size);
   f->dump_int("ondisk_log_size", ondisk_log_size);
   f->dump_bool("stats_invalid", stats_invalid);
@@ -3012,6 +3013,8 @@ void pg_stat_t::encode(ceph::buffer::list &bl) const
   encode(scrub_sched_status.m_is_active, bl);
   encode((scrub_sched_status.m_is_deep==scrub_level_t::deep), bl);
   encode(scrub_sched_status.m_is_periodic, bl);
+  encode(objects_scrubbed, bl);
+
   ENCODE_FINISH(bl);
 }
 
@@ -3019,7 +3022,7 @@ void pg_stat_t::decode(ceph::buffer::list::const_iterator &bl)
 {
   bool tmp;
   uint32_t old_state;
-  DECODE_START(26, bl);
+  DECODE_START(27, bl);
   decode(version, bl);
   decode(reported_seq, bl);
   decode(reported_epoch, bl);
@@ -3099,6 +3102,7 @@ void pg_stat_t::decode(ceph::buffer::list::const_iterator &bl)
       scrub_sched_status.m_is_deep = tmp ? scrub_level_t::deep : scrub_level_t::shallow;
       decode(tmp, bl);
       scrub_sched_status.m_is_periodic = tmp;
+      decode(objects_scrubbed, bl);
     }
   }
   DECODE_FINISH(bl);
@@ -3134,6 +3138,7 @@ void pg_stat_t::generate_test_instances(list<pg_stat_t*>& o)
   a.last_clean_scrub_stamp = utime_t(17, 18);
   a.last_scrub_duration = 3617;
   a.snaptrimq_len = 1048576;
+  a.objects_scrubbed = 0;
   list<object_stat_collection_t*> l;
   object_stat_collection_t::generate_test_instances(l);
   a.stats = *l.back();
@@ -3208,7 +3213,8 @@ bool operator==(const pg_stat_t& l, const pg_stat_t& r)
     l.purged_snaps == r.purged_snaps &&
     l.snaptrimq_len == r.snaptrimq_len &&
     l.last_scrub_duration == r.last_scrub_duration &&
-    l.scrub_sched_status == r.scrub_sched_status;
+    l.scrub_sched_status == r.scrub_sched_status &&
+    l.objects_scrubbed == r.objects_scrubbed;
 }
 
 // -- store_statfs_t --
index 417f9a9cb1acd0f36da08db37a9eb00acc94d456..6fbc56f02f3131005af0cdd120e07ac3ad38d160 100644 (file)
@@ -2246,6 +2246,7 @@ struct pg_stat_t {
 
   int64_t log_size;
   int64_t ondisk_log_size;    // >= active_log_size
+  int64_t objects_scrubbed;
 
   std::vector<int32_t> up, acting;
   std::vector<pg_shard_t> avail_no_missing;
@@ -2286,6 +2287,7 @@ struct pg_stat_t {
       created(0), last_epoch_clean(0),
       parent_split_bits(0),
       log_size(0), ondisk_log_size(0),
+      objects_scrubbed(0),
       mapping_epoch(0),
       up_primary(-1),
       acting_primary(-1),
index fd3dc97fdea6351de95ad7bfc37d7ff9321e00b9..58879e0c2a091f9cf10d7f98d9a5acc517c27395 100644 (file)
@@ -1370,6 +1370,8 @@ void PgScrubber::scrub_compare_maps()
 {
   dout(10) << __func__ << " has maps, analyzing" << dendl;
 
+  int64_t primary_objects = 0;
+
   // construct authoritative scrub map for type-specific scrubbing
   m_cleaned_meta_map.insert(m_primary_scrubmap);
   map<hobject_t, pair<std::optional<uint32_t>, std::optional<uint32_t>>> missing_digest;
@@ -1410,6 +1412,8 @@ void PgScrubber::scrub_compare_maps()
 
     dout(2) << __func__ << ": primary (" << m_pg->get_primary() << ") has "
            << m_primary_scrubmap.objects.size() << " items" << dendl;
+    primary_objects = m_primary_scrubmap.objects.size();
+    m_pg->add_objects_scrubbed_count(primary_objects);
 
     ss.str("");
     ss.clear();