summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2013-01-21 15:50:33 -0800
committerSage Weil <sage@inktank.com>2013-01-22 14:47:42 -0800
commit33efe32151e04beaafd9435d7f86dc2eb046214d (patch)
treed9051ce5bcab53bfb80de171008f0f5c9ab08258
parent514af15e95604bd241d2a98a97b938889c6876db (diff)
downloadceph-33efe32151e04beaafd9435d7f86dc2eb046214d.tar.gz
osd: simplify asok to single callback
Signed-off-by: Sage Weil <sage@inktank.com>
-rw-r--r--src/osd/OSD.cc57
-rw-r--r--src/osd/OSD.h13
2 files changed, 30 insertions, 40 deletions
diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc
index efd9af9d089..67bc52b114b 100644
--- a/src/osd/OSD.cc
+++ b/src/osd/OSD.cc
@@ -761,6 +761,7 @@ OSD::OSD(int id, Messenger *internal_messenger, Messenger *external_messenger,
whoami(id),
dev_path(dev), journal_path(jdev),
dispatch_running(false),
+ asok_hook(NULL),
osd_compat(get_osd_compat_set()),
state(STATE_INITIALIZING), boot_epoch(0), up_epoch(0), bind_epoch(0),
op_tp(external_messenger->cct, "OSD::op_tp", g_conf->osd_op_threads, "osd_op_threads"),
@@ -776,8 +777,6 @@ OSD::OSD(int id, Messenger *internal_messenger, Messenger *external_messenger,
heartbeat_dispatcher(this),
stat_lock("OSD::stat_lock"),
finished_lock("OSD::finished_lock"),
- admin_ops_hook(NULL),
- historic_ops_hook(NULL),
op_wq(this, g_conf->osd_op_thread_timeout, &op_tp),
peering_wq(this, g_conf->osd_op_thread_timeout, &op_tp, 200),
map_lock("OSD::map_lock"),
@@ -846,30 +845,31 @@ int OSD::pre_init()
return 0;
}
-class HistoricOpsSocketHook : public AdminSocketHook {
+// asok
+
+class OSDSocketHook : public AdminSocketHook {
OSD *osd;
public:
- HistoricOpsSocketHook(OSD *o) : osd(o) {}
+ OSDSocketHook(OSD *o) : osd(o) {}
bool call(std::string command, std::string args, bufferlist& out) {
stringstream ss;
- osd->dump_historic_ops(ss);
+ bool r = osd->asok_command(command, args, ss);
out.append(ss);
- return true;
+ return r;
}
};
-
-class OpsFlightSocketHook : public AdminSocketHook {
- OSD *osd;
-public:
- OpsFlightSocketHook(OSD *o) : osd(o) {}
- bool call(std::string command, std::string args, bufferlist& out) {
- stringstream ss;
- osd->dump_ops_in_flight(ss);
- out.append(ss);
- return true;
+bool OSD::asok_command(string command, string args, ostream& ss)
+{
+ if (command == "dump_ops_in_flight") {
+ op_tracker.dump_ops_in_flight(ss);
+ } else if (command == "dump_historic_ops") {
+ op_tracker.dump_historic_ops(ss);
+ } else {
+ assert(0 == "broken asok registration");
}
-};
+ return true;
+}
int OSD::init()
{
@@ -964,13 +964,12 @@ int OSD::init()
// tick
timer.add_event_after(g_conf->osd_heartbeat_interval, new C_Tick(this));
- admin_ops_hook = new OpsFlightSocketHook(this);
+ asok_hook = new OSDSocketHook(this);
AdminSocket *admin_socket = cct->get_admin_socket();
- r = admin_socket->register_command("dump_ops_in_flight", admin_ops_hook,
- "show the ops currently in flight");
- historic_ops_hook = new HistoricOpsSocketHook(this);
- r = admin_socket->register_command("dump_historic_ops", historic_ops_hook,
- "show slowest recent ops");
+ r = admin_socket->register_command("dump_ops_in_flight", asok_hook,
+ "show the ops currently in flight");
+ r = admin_socket->register_command("dump_historic_ops", asok_hook,
+ "show slowest recent ops");
assert(r == 0);
service.init();
@@ -1124,10 +1123,9 @@ int OSD::shutdown()
dout(10) << "no ops" << dendl;
cct->get_admin_socket()->unregister_command("dump_ops_in_flight");
- delete admin_ops_hook;
- delete historic_ops_hook;
- admin_ops_hook = NULL;
- historic_ops_hook = NULL;
+ cct->get_admin_socket()->unregister_command("dump_historic_ops");
+ delete asok_hook;
+ asok_hook = NULL;
recovery_tp.stop();
dout(10) << "recovery tp stopped" << dendl;
@@ -2290,11 +2288,6 @@ void OSD::check_ops_in_flight()
return;
}
-void OSD::dump_ops_in_flight(ostream& ss)
-{
- op_tracker.dump_ops_in_flight(ss);
-}
-
// =========================================
void OSD::RemoveWQ::_process(boost::tuple<coll_t, SequencerRef, DeletingStateRef> *item)
{
diff --git a/src/osd/OSD.h b/src/osd/OSD.h
index 1af32d73883..4b9e0e0b192 100644
--- a/src/osd/OSD.h
+++ b/src/osd/OSD.h
@@ -440,6 +440,11 @@ protected:
void check_osdmap_features();
+ // asok
+ friend class OSDSocketHook;
+ class OSDSocketHook *asok_hook;
+ bool asok_command(string command, string args, ostream& ss);
+
public:
ClassHandler *class_handler;
int get_nodeid() { return whoami; }
@@ -620,15 +625,7 @@ private:
// -- op tracking --
OpTracker op_tracker;
void check_ops_in_flight();
- void dump_ops_in_flight(ostream& ss);
- void dump_historic_ops(ostream& ss) {
- return op_tracker.dump_historic_ops(ss);
- }
- friend class OpsFlightSocketHook;
- friend class HistoricOpsSocketHook;
friend class C_CompleteSplits;
- OpsFlightSocketHook *admin_ops_hook;
- HistoricOpsSocketHook *historic_ops_hook;
// -- op queue --