]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd: fix pg info statistics error during recovery
authorXuehan Xu <xxhdx1985126@gmail.com>
Tue, 20 Oct 2020 06:51:30 +0000 (14:51 +0800)
committerXuehan Xu <xxhdx1985126@gmail.com>
Sun, 1 Nov 2020 02:38:45 +0000 (10:38 +0800)
Signed-off-by: Xuehan Xu <xxhdx1985126@gmail.com>
src/crimson/osd/pg.h
src/crimson/osd/pg_recovery.cc
src/crimson/osd/pg_recovery_listener.h

index d4d3c82d3506399a0ef5970bbe926afa71d9a2d7..930aa5e73d913cae3128b3c51e46fe8319c4a15e 100644 (file)
@@ -274,7 +274,13 @@ public:
     shard_services.remove_want_pg_temp(pgid.pgid);
   }
   void publish_stats_to_osd() final {
-    // Not needed yet
+    if (!is_primary())
+      return;
+
+    (void) peering_state.prepare_stats_for_publish(
+      false,
+      pg_stat_t(),
+      object_stat_collection_t());
   }
   void clear_publish_stats() final {
     // Not needed yet
index cf892aa69b278881c545305777528430152e47ca..3315feed6eb3a531808ab41077c1def63bb28667 100644 (file)
@@ -327,6 +327,7 @@ void PGRecovery::on_local_recover(
     if (!pg->is_unreadable_object(soid)) {
       pg->get_recovery_backend()->get_recovering(soid).set_readable();
     }
+    pg->publish_stats_to_osd();
   }
 }
 
@@ -337,6 +338,7 @@ void PGRecovery::on_global_recover (
 {
   logger().info("{} {}", __func__, soid);
   pg->get_peering_state().object_recovered(soid, stat_diff);
+  pg->publish_stats_to_osd();
   auto& recovery_waiter = pg->get_recovery_backend()->get_recovering(soid);
   if (!is_delete)
     recovery_waiter.obc->drop_recovery_read();
index 2ed08e91d773e04c2f518383653abbc708b5a775..c922b99561a3c7a3d737c0533765f7ca301ced13 100644 (file)
@@ -35,4 +35,5 @@ public:
   virtual epoch_t get_last_peering_reset() const = 0;
   virtual const pg_info_t& get_info() const= 0;
   virtual seastar::future<> stop() = 0;
+  virtual void publish_stats_to_osd() = 0;
 };