summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2013-01-21 15:59:07 -0800
committerSage Weil <sage@inktank.com>2013-01-22 14:47:42 -0800
commit24d0d7eb0165c8b8f923f2d8896b156bfb5e0e60 (patch)
treee07f93340663d66d2914cbf114fe1dcb0386b3a7
parent33efe32151e04beaafd9435d7f86dc2eb046214d (diff)
downloadceph-24d0d7eb0165c8b8f923f2d8896b156bfb5e0e60.tar.gz
osd: dump op priority queue state via admin socket
Signed-off-by: Sage Weil <sage@inktank.com>
-rw-r--r--src/osd/OSD.cc9
-rw-r--r--src/osd/OSD.h5
2 files changed, 14 insertions, 0 deletions
diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc
index 67bc52b114b..b28cace35b4 100644
--- a/src/osd/OSD.cc
+++ b/src/osd/OSD.cc
@@ -865,6 +865,12 @@ bool OSD::asok_command(string command, string args, ostream& ss)
op_tracker.dump_ops_in_flight(ss);
} else if (command == "dump_historic_ops") {
op_tracker.dump_historic_ops(ss);
+ } else if (command == "dump_op_pq_state") {
+ JSONFormatter f(true);
+ f.open_object_section("pq");
+ op_wq.dump(&f);
+ f.close_section();
+ f.flush(ss);
} else {
assert(0 == "broken asok registration");
}
@@ -970,6 +976,8 @@ int OSD::init()
"show the ops currently in flight");
r = admin_socket->register_command("dump_historic_ops", asok_hook,
"show slowest recent ops");
+ r = admin_socket->register_command("dump_op_pq_state", asok_hook,
+ "dump op priority queue state");
assert(r == 0);
service.init();
@@ -1124,6 +1132,7 @@ int OSD::shutdown()
cct->get_admin_socket()->unregister_command("dump_ops_in_flight");
cct->get_admin_socket()->unregister_command("dump_historic_ops");
+ cct->get_admin_socket()->unregister_command("dump_op_pq_state");
delete asok_hook;
asok_hook = NULL;
diff --git a/src/osd/OSD.h b/src/osd/OSD.h
index 4b9e0e0b192..c9b408a2747 100644
--- a/src/osd/OSD.h
+++ b/src/osd/OSD.h
@@ -644,6 +644,11 @@ private:
o->cct->_conf->osd_op_pq_min_cost)
{}
+ void dump(Formatter *f) {
+ Mutex::Locker l(qlock);
+ pqueue.dump(f);
+ }
+
void _enqueue_front(pair<PGRef, OpRequestRef> item);
void _enqueue(pair<PGRef, OpRequestRef> item);
PGRef _dequeue();