]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd/osd_operations/snaptrim_event: update PG's stats 57483/head
authorjunxiang Mu <1948535941@qq.com>
Fri, 22 Mar 2024 02:44:49 +0000 (22:44 -0400)
committerMatan Breizman <mbreizma@redhat.com>
Wed, 15 May 2024 14:59:48 +0000 (17:59 +0300)
Fixes: https://tracker.ceph.com/issues/63307
Signed-off-by: junxiang Mu <1948535941@qq.com>
(cherry picked from commit 4a180f559a3fff1615664898603fc832cfd8d72c)

src/crimson/osd/ops_executer.cc
src/crimson/osd/osd_operations/snaptrim_event.cc
src/crimson/osd/osd_operations/snaptrim_event.h
src/crimson/osd/pg.cc
src/crimson/osd/pg.h

index 7e11868d0abb33ce6af8af0d7b2f27079115a917..f9c7c7d3b8b3e8775965fc15998532913ca31729 100644 (file)
@@ -1049,9 +1049,7 @@ ObjectContextRef OpsExecuter::prepare_clone(
 
 void OpsExecuter::apply_stats()
 {
-  pg->get_peering_state().apply_op_stats(get_target(), delta_stats);
-  pg->scrubber.handle_op_stats(get_target(), delta_stats);
-  pg->publish_stats_to_osd();
+  pg->apply_stats(get_target(), delta_stats);
 }
 
 OpsExecuter::OpsExecuter(Ref<PG> pg,
index 1a2292ae90fd86845a6ffdc7d4dcd714fc6b0543..53efab05131af0487c41c890e84dffc0a85a2829 100644 (file)
@@ -390,7 +390,6 @@ SnapTrimObjSubEvent::remove_or_update(
   }
 
   return seastar::do_with(ceph::os::Transaction{}, [=, this](auto &txn) {
-    int64_t num_objects_before_trim = delta_stats.num_objects;
     osd_op_p.at_version = pg->get_next_version();
     auto ret = remove_or_update_iertr::now();
     if (new_snaps.empty()) {
@@ -405,8 +404,7 @@ SnapTrimObjSubEvent::remove_or_update(
       ret = adjust_snaps(obc, head_obc, new_snaps, txn);
     }
     return std::move(ret).si_then(
-      [&txn, obc, num_objects_before_trim,
-      head_obc=std::move(head_obc), this]() mutable {
+      [&txn, obc, head_obc=std::move(head_obc), this]() mutable {
       // save head snapset
       logger().debug("{}: {} new snapset {} on {}",
                     *this, coid, head_obc->ssc->snapset, head_obc->obs.oi);
@@ -416,11 +414,14 @@ SnapTrimObjSubEvent::remove_or_update(
        update_head(obc, head_obc, txn);
       }
       // Stats reporting - Set number of objects trimmed
-      if (num_objects_before_trim > delta_stats.num_objects) {
-       //int64_t num_objects_trimmed =
-       //  num_objects_before_trim - delta_stats.num_objects;
-       //add_objects_trimmed_count(num_objects_trimmed);
+      if (delta_stats.num_objects < 0) {
+        int64_t num_objects_trimmed = std::abs(delta_stats.num_objects);
+        pg->get_peering_state().update_stats_wo_resched(
+          [num_objects_trimmed](auto &history, auto &stats) {
+          stats.objects_trimmed += num_objects_trimmed;
+        });
       }
+      pg->apply_stats(coid, delta_stats);
     }).si_then(
       [&txn] () mutable {
       return std::move(txn);
index 23f8be26c8416890733988d4ceef01abc0bcb269..66132543b13d29aedbc9fa9401d6f24a7f213ed4 100644 (file)
@@ -134,8 +134,6 @@ public:
   CommonPGPipeline& client_pp();
 
 private:
-  /* TODO: we don't actually update the PG's stats
-   * https://tracker.ceph.com/issues/63307 */
   object_stat_sum_t delta_stats;
 
   snap_trim_obj_subevent_ret_t remove_clone(
index f5541da96194d18121ca0b709295db4d921d86cb..343a789f1317e74564ca5e72fa5461d8f6372fdd 100644 (file)
@@ -212,6 +212,15 @@ pg_stat_t PG::get_stats() const
   return pg_stats.value_or(pg_stat_t{});
 }
 
+void PG::apply_stats(
+  const hobject_t &soid,
+  const object_stat_sum_t &delta_stats)
+{
+  peering_state.apply_op_stats(soid, delta_stats);
+  scrubber.handle_op_stats(soid, delta_stats);
+  publish_stats_to_osd();
+}
+
 void PG::queue_check_readable(epoch_t last_peering_reset, ceph::timespan delay)
 {
   // handle the peering event in the background
index 0552d49f2ad495cfc01b0576c8ca95c204380096..c8cb4010cf06612ee962cbe44982fb49677638f8 100644 (file)
@@ -664,6 +664,9 @@ public:
   void publish_stats_to_osd() final;
   void clear_publish_stats() final;
   pg_stat_t get_stats() const;
+  void apply_stats(
+    const hobject_t &soid,
+    const object_stat_sum_t &delta_stats);
 
 private:
   std::optional<pg_stat_t> pg_stats;