]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd_admin: adapt DumpOpsInFlight to dump from all cores
authorSamuel Just <sjust@redhat.com>
Fri, 30 Sep 2022 18:13:08 +0000 (11:13 -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/shard_services.cc
src/crimson/osd/shard_services.h

index ebf23384f8dd0e0f0ca493c54a43913d4cee8d28..8214b8fd7ee47bbb6eba0814784fac06f3959070 100644 (file)
@@ -17,6 +17,7 @@
 #include "crimson/osd/exceptions.h"
 #include "crimson/osd/osd.h"
 #include "crimson/osd/pg.h"
+#include "crimson/osd/shard_services.h"
 
 namespace {
 seastar::logger& logger()
@@ -452,27 +453,32 @@ template std::unique_ptr<AdminSocketHook> make_asok_hook<InjectMDataErrorHook>(
  */
 class DumpInFlightOpsHook : public AdminSocketHook {
 public:
-  explicit DumpInFlightOpsHook(const crimson::osd::OSDOperationRegistry& op_registry) :
+  explicit DumpInFlightOpsHook(const crimson::osd::PGShardManager &pg_shard_manager) :
     AdminSocketHook{"dump_ops_in_flight", "", "show the ops currently in flight"},
-    op_registry(op_registry)
+    pg_shard_manager(pg_shard_manager)
   {}
   seastar::future<tell_result_t> call(const cmdmap_t&,
                                      std::string_view format,
                                      ceph::bufferlist&& input) const final
   {
-    logger().warn("{}", __func__);
-    unique_ptr<Formatter> f{Formatter::create(format, "json-pretty", "json-pretty")};
+    unique_ptr<Formatter> fref{
+      Formatter::create(format, "json-pretty", "json-pretty")};
+    auto *f = fref.get();
     f->open_object_section("ops_in_flight");
-    op_registry.dump_client_requests(f.get());
-    f->close_section();
-    f->dump_int("num_ops", 0);
-    return seastar::make_ready_future<tell_result_t>(std::move(f));
+    f->open_array_section("ops_in_flight");
+    return pg_shard_manager.invoke_on_each_shard_seq([f](const auto &shard_services) {
+      return shard_services.dump_ops_in_flight(f);
+    }).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::OSDOperationRegistry& op_registry;
+  const crimson::osd::PGShardManager &pg_shard_manager;
 };
 template std::unique_ptr<AdminSocketHook>
-make_asok_hook<DumpInFlightOpsHook>(const crimson::osd::OSDOperationRegistry& op_registry);
+make_asok_hook<DumpInFlightOpsHook>(const crimson::osd::PGShardManager &);
 
 
 class DumpHistoricOpsHook : public AdminSocketHook {
index ea8cdc61884d225e5094646e402ab8a1476c3de9..56f23d356f516adf3342d0788021c5f61a5ed97f 100644 (file)
@@ -608,7 +608,7 @@ seastar::future<> OSD::start_asok_admin()
     // ops commands
     asok->register_command(
       make_asok_hook<DumpInFlightOpsHook>(
-       std::as_const(get_shard_services().get_registry())));
+       std::as_const(pg_shard_manager)));
     asok->register_command(
       make_asok_hook<DumpHistoricOpsHook>(
        std::as_const(get_shard_services().get_registry())));
index 68794184d0a540c2dbf6690db66cde260460da44..26f60ab5767bf16e3b8a2f9506a5f35ff6915875 100644 (file)
@@ -50,6 +50,14 @@ PerShardState::PerShardState(
     startup_time(startup_time)
 {}
 
+seastar::future<> PerShardState::dump_ops_in_flight(Formatter *f) const
+{
+  registry.for_each_op([f](const auto &op) {
+    op.dump(f);
+  });
+  return seastar::now();
+}
+
 seastar::future<> PerShardState::stop_pgs()
 {
   assert_core();
index 64528a6f7de1705a0e3b67421b5f0b8da7e4c111..6fdb4a69ab8dfd07cc889096b836bbf4f171fd54 100644 (file)
@@ -75,6 +75,8 @@ class PerShardState {
   OSDOperationRegistry registry;
   OperationThrottler throttler;
 
+  seastar::future<> dump_ops_in_flight(Formatter *f) const;
+
   epoch_t up_epoch = 0;
   OSDMapService::cached_map_t osdmap;
   const auto &get_osdmap() const {
@@ -370,6 +372,9 @@ public:
     return *local_state.perf;
   }
 
+  // Diagnostics
+  FORWARD_TO_LOCAL_CONST(dump_ops_in_flight);
+
   // Local PG Management
   seastar::future<Ref<PG>> make_pg(
     cached_map_t create_map,