]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: add asock command to dump the scrub queue 12728/head
authorliuchang0812 <liuchang0812@gmail.com>
Sun, 1 Jan 2017 04:47:03 +0000 (12:47 +0800)
committerliuchang0812 <liuchang0812@gmail.com>
Wed, 4 Jan 2017 06:43:16 +0000 (14:43 +0800)
* add a public method to dumps scrubs
* register new command "dump_scrubs" to asock_admin

Fixes: http://tracker.ceph.com/issues/17861
Signed-off-by: liuchang0812 <liuchang0812@gmail.com>
src/osd/OSD.cc
src/osd/OSD.h

index 70f39fde5b49951609185248042d771f9b4a8e90..8ba5c5c778deae944631a7608d124bfc98058bd2 100644 (file)
@@ -1937,6 +1937,8 @@ bool OSD::asok_command(string command, cmdmap_t& cmdmap, string format,
     f->close_section();
   } else if (command == "dump_objectstore_kv_stats") {
     store->get_db_statistics(f);
+  } else if (command == "dump_scrubs") {
+    service.dumps_scrub(f);
   } else {
     assert(0 == "broken asok registration");
   }
@@ -2395,8 +2397,16 @@ void OSD::final_init()
                                     "get malloc extension heap property");
   assert(r == 0);
 
-  r = admin_socket->register_command("dump_objectstore_kv_stats", "dump_objectstore_kv_stats", asok_hook,
-                                        "print statistics of kvdb which used by bluestore");
+  r = admin_socket->register_command("dump_objectstore_kv_stats",
+                                    "dump_objectstore_kv_stats",
+                                    asok_hook,
+                                    "print statistics of kvdb which used by bluestore");
+  assert(r == 0);
+
+  r = admin_socket->register_command("dump_scrubs",
+                                    "dump_scrubs",
+                                    asok_hook,
+                                    "print scheduled scrubs");
   assert(r == 0);
 
   test_ops_hook = new TestOpsSocketHook(&(this->service), this->store);
index d404d0254e5c1e889ed99fe56c290fc4d51adca8..3a4bb8a3b3d75622f68aabe11926ad1113ff22cf 100644 (file)
@@ -685,6 +685,22 @@ public:
     return true;
   }
 
+  void dumps_scrub(Formatter *f) {
+    assert(f != nullptr);
+    Mutex::Locker l(sched_scrub_lock);
+
+    f->open_array_section("scrubs");
+    for (const auto &i: sched_scrub_pg) {
+      f->open_object_section("scrub");
+      f->dump_stream("pgid") << i.pgid;
+      f->dump_stream("sched_time") << i.sched_time;
+      f->dump_stream("deadline") << i.deadline;
+      f->dump_bool("forced", i.sched_time == i.deadline);
+      f->close_section();
+    }
+    f->close_section();
+  }
+
   bool can_inc_scrubs_pending();
   bool inc_scrubs_pending();
   void inc_scrubs_active(bool reserved);