]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd,crimson: pass optional<pg_stat_t> to prepare_stats_for_publish()
authorKefu Chai <kchai@redhat.com>
Thu, 28 Jan 2021 05:56:30 +0000 (13:56 +0800)
committerKefu Chai <kchai@redhat.com>
Thu, 28 Jan 2021 12:57:22 +0000 (20:57 +0800)
to simplify the interface. also save the overhead of passing an empty
pg_stat_t if the existing one is invalidated before calling
prepare_stats_for_publish().

Signed-off-by: Kefu Chai <kchai@redhat.com>
src/crimson/osd/pg.cc
src/osd/PG.cc
src/osd/PG.h
src/osd/PeeringState.cc
src/osd/PeeringState.h

index 17452c511bb639fc621226b2427dc3a417aee279..a53fabd7cd5c7670405f7d7e8040ec74d96d9427 100644 (file)
@@ -145,10 +145,8 @@ void PG::publish_stats_to_osd()
 {
   if (!is_primary())
     return;
-  const bool is_stats_valid = pg_stats.has_value();
   if (auto new_pg_stats = peering_state.prepare_stats_for_publish(
-        is_stats_valid,
-        pg_stats.value_or(pg_stat_t{}),
+        pg_stats,
         object_stat_collection_t());
       new_pg_stats.has_value()) {
     pg_stats = std::move(new_pg_stats);
index 5a01fac7fb0d190dff08cb9a77f05ca524c435ef..fef4b65dfcda32cf86f5b832a159e1647b6522c4 100644 (file)
@@ -207,7 +207,6 @@ PG::PG(OSDService *o, OSDMapRef curmap,
   recovery_queued(false),
   recovery_ops_active(0),
   backfill_reserving(false),
-  pg_stats_publish_valid(false),
   finish_sync_event(NULL),
   scrub_after_recovery(false),
   active_pushes(0),
@@ -823,12 +822,10 @@ void PG::publish_stats_to_osd()
 
   std::lock_guard l{pg_stats_publish_lock};
   auto stats = recovery_state.prepare_stats_for_publish(
-    pg_stats_publish_valid,
     pg_stats_publish,
     unstable_stats);
   if (stats) {
-    pg_stats_publish = stats.value();
-    pg_stats_publish_valid = true;
+    pg_stats_publish = std::move(stats);
   }
 }
 
@@ -841,7 +838,7 @@ void PG::clear_publish_stats()
 {
   dout(15) << "clear_stats" << dendl;
   std::lock_guard l{pg_stats_publish_lock};
-  pg_stats_publish_valid = false;
+  pg_stats_publish.reset();
 }
 
 /**
@@ -2797,8 +2794,8 @@ void PG::dump_missing(Formatter *f)
 void PG::get_pg_stats(std::function<void(const pg_stat_t&, epoch_t lec)> f)
 {
   std::lock_guard l{pg_stats_publish_lock};
-  if (pg_stats_publish_valid) {
-    f(pg_stats_publish, pg_stats_publish.get_effective_last_epoch_clean());
+  if (pg_stats_publish) {
+    f(*pg_stats_publish, pg_stats_publish->get_effective_last_epoch_clean());
   }
 }
 
index cad031c10861fb0f572051d6402ffa96f0a4cb76..67a1c80459df6b6d69f81e9eaf1ccdf700ce2b00 100644 (file)
@@ -947,8 +947,7 @@ protected:
   // publish stats
   ceph::mutex pg_stats_publish_lock =
     ceph::make_mutex("PG::pg_stats_publish_lock");
-  bool pg_stats_publish_valid;
-  pg_stat_t pg_stats_publish;
+  std::optional<pg_stat_t> pg_stats_publish;
 
   friend class TestOpsSocketHook;
   void publish_stats_to_osd() override;
index 0a74aca8ac469a89a8510bfd84dea3b5276d595c..8a9439e1375db218f207a566b800b4683a31ad6d 100644 (file)
@@ -3849,8 +3849,7 @@ out:
 }
 
 std::optional<pg_stat_t> PeeringState::prepare_stats_for_publish(
-  bool pg_stats_publish_valid,
-  const pg_stat_t &pg_stats_publish,
+  const std::optional<pg_stat_t> &pg_stats_publish,
   const object_stat_collection_t &unstable_stats)
 {
   if (info.stats.stats.sum.num_scrub_errors) {
@@ -3904,9 +3903,9 @@ std::optional<pg_stat_t> PeeringState::prepare_stats_for_publish(
   psdout(20) << __func__ << " reporting purged_snaps "
             << pre_publish.purged_snaps << dendl;
 
-  if (pg_stats_publish_valid && pre_publish == pg_stats_publish &&
+  if (pg_stats_publish && pre_publish == *pg_stats_publish &&
       info.stats.last_fresh > cutoff) {
-    psdout(15) << "publish_stats_to_osd " << pg_stats_publish.reported_epoch
+    psdout(15) << "publish_stats_to_osd " << pg_stats_publish->reported_epoch
               << ": no change since " << info.stats.last_fresh << dendl;
     return std::nullopt;
   } else {
index 1ae5073d1f37236624aca4938e93c74bb4867a78..a74b65eafa6ac54a391cd890038657de14417ca9 100644 (file)
@@ -1827,8 +1827,7 @@ public:
    * pg_stats_publish adding in unstable_stats.
    */
   std::optional<pg_stat_t> prepare_stats_for_publish(
-    bool pg_stats_publish_valid,
-    const pg_stat_t &pg_stats_publish,
+    const std::optional<pg_stat_t> &pg_stats_publish,
     const object_stat_collection_t &unstable_stats);
 
   /**