]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/admin: capture PGShardManager for DumpPGStateHistory rather than OSD
authorSamuel Just <sjust@redhat.com>
Fri, 30 Sep 2022 17:32:54 +0000 (10:32 -0700)
committerSamuel Just <sjust@redhat.com>
Sat, 1 Oct 2022 22:12:08 +0000 (15:12 -0700)
Signed-off-by: Samuel Just <sjust@redhat.com>
src/crimson/admin/osd_admin.cc
src/crimson/osd/osd.cc
src/crimson/osd/osd.h

index 478256d341913d0a9e25551d146ad1acf9137340..ebf23384f8dd0e0f0ca493c54a43913d4cee8d28 100644 (file)
@@ -16,6 +16,7 @@
 #include "crimson/common/log.h"
 #include "crimson/osd/exceptions.h"
 #include "crimson/osd/osd.h"
+#include "crimson/osd/pg.h"
 
 namespace {
 seastar::logger& logger()
@@ -120,32 +121,40 @@ template std::unique_ptr<AdminSocketHook> make_asok_hook<FlushPgStatsHook>(crims
 /// dump the history of PGs' peering state
 class DumpPGStateHistory final: public AdminSocketHook {
 public:
-  explicit DumpPGStateHistory(const crimson::osd::OSD &osd) :
+  explicit DumpPGStateHistory(const crimson::osd::PGShardManager &pg_shard_manager) :
     AdminSocketHook{"dump_pgstate_history",
                     "",
                     "dump history of PGs' peering state"},
-    osd{osd}
+    pg_shard_manager{pg_shard_manager}
   {}
   seastar::future<tell_result_t> call(const cmdmap_t&,
                                       std::string_view format,
                                       ceph::bufferlist&& input) const final
   {
-    std::unique_ptr<Formatter> fref{Formatter::create(format,
-                                                     "json-pretty",
-                                                     "json-pretty")};
+    std::unique_ptr<Formatter> fref{
+      Formatter::create(format, "json-pretty", "json-pretty")};
     Formatter *f = fref.get();
     f->open_object_section("pgstate_history");
-    return osd.dump_pg_state_history(
-      f
-    ).then([fref=std::move(fref)]() mutable {
+    f->open_array_section("pgs");
+    return pg_shard_manager.for_each_pg([f](auto &pgid, auto &pg) {
+      f->open_object_section("pg");
+      f->dump_stream("pg") << pgid;
+      const auto& peering_state = pg->get_peering_state();
+      f->dump_string("currently", peering_state.get_current_state());
+      peering_state.dump_history(f);
+      f->close_section();
+    }).then([fref=std::move(fref)]() mutable {
+      fref->close_section();
       fref->close_section();
       return seastar::make_ready_future<tell_result_t>(std::move(fref));
     });
   }
+
 private:
-  const crimson::osd::OSD& osd;
+  const crimson::osd::PGShardManager &pg_shard_manager;
 };
-template std::unique_ptr<AdminSocketHook> make_asok_hook<DumpPGStateHistory>(const crimson::osd::OSD& osd);
+template std::unique_ptr<AdminSocketHook> make_asok_hook<DumpPGStateHistory>(
+  const crimson::osd::PGShardManager &);
 
 //dump the contents of perfcounters in osd and store
 class DumpPerfCountersHook final: public AdminSocketHook {
index d52ef08717c1e45fdec9e8ee2ea9cabd5ea52ced..ea8cdc61884d225e5094646e402ab8a1476c3de9 100644 (file)
@@ -596,7 +596,8 @@ seastar::future<> OSD::start_asok_admin()
     asok->register_command(make_asok_hook<OsdStatusHook>(std::as_const(*this)));
     asok->register_command(make_asok_hook<SendBeaconHook>(*this));
     asok->register_command(make_asok_hook<FlushPgStatsHook>(*this));
-    asok->register_command(make_asok_hook<DumpPGStateHistory>(std::as_const(*this)));
+    asok->register_command(
+      make_asok_hook<DumpPGStateHistory>(std::as_const(pg_shard_manager)));
     asok->register_command(make_asok_hook<DumpMetricsHook>());
     asok->register_command(make_asok_hook<DumpPerfCountersHook>());
     asok->register_command(make_asok_hook<InjectDataErrorHook>(get_shard_services()));
@@ -668,21 +669,6 @@ void OSD::dump_status(Formatter* f) const
   f->dump_unsigned("num_pgs", pg_shard_manager.get_num_pgs());
 }
 
-seastar::future<> OSD::dump_pg_state_history(Formatter* f) const
-{
-  f->open_array_section("pgs");
-  return pg_shard_manager.for_each_pg([f](auto &pgid, auto &pg) {
-    f->open_object_section("pg");
-    f->dump_stream("pg") << pgid;
-    const auto& peering_state = pg->get_peering_state();
-    f->dump_string("currently", peering_state.get_current_state());
-    peering_state.dump_history(f);
-    f->close_section();
-  }).then([f] {
-    f->close_section();
-  });
-}
-
 void OSD::print(std::ostream& out) const
 {
   out << "{osd." << superblock.whoami << " "
index 02aa2d3e25ff07823f345b581d3e8a4525b0154b..897ece58231b3e9e5c255e9461f7f1c1e940b248 100644 (file)
@@ -138,7 +138,6 @@ public:
   seastar::future<> stop();
 
   void dump_status(Formatter*) const;
-  seastar::future<> dump_pg_state_history(Formatter*) const;
   void print(std::ostream&) const;
 
   /// @return the seq id of the pg stats being sent