From: Sage Weil Date: Sun, 26 Feb 2017 19:15:17 +0000 (-0500) Subject: mon: add a MgrClient X-Git-Tag: v12.0.2~252^2~53 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=9c7082960479664bc379f738bcbb0761259033ce;p=ceph.git mon: add a MgrClient Signed-off-by: Sage Weil --- diff --git a/src/ceph_mon.cc b/src/ceph_mon.cc index 0ee2b170bfb4..6e8fd1d5749e 100644 --- a/src/ceph_mon.cc +++ b/src/ceph_mon.cc @@ -421,7 +421,7 @@ int main(int argc, const char **argv) } assert(r == 0); - Monitor mon(g_ceph_context, g_conf->name.get_id(), &store, 0, &monmap); + Monitor mon(g_ceph_context, g_conf->name.get_id(), &store, 0, 0, &monmap); r = mon.mkfs(osdmapbl); if (r < 0) { cerr << argv[0] << ": error creating monfs: " << cpp_strerror(r) << std::endl; @@ -703,6 +703,14 @@ int main(int argc, const char **argv) prefork.exit(1); } + Messenger *mgr_msgr = Messenger::create(g_ceph_context, public_msgr_type, + entity_name_t::MON(rank), "mon-mgrc", + getpid(), 0); + if (!mgr_msgr) { + derr << "unable to create mgr_msgr" << dendl; + prefork.exit(1); + } + cout << "starting " << g_conf->name << " rank " << rank << " at " << ipaddr << " mon_data " << g_conf->mon_data @@ -711,7 +719,7 @@ int main(int argc, const char **argv) // start monitor mon = new Monitor(g_ceph_context, g_conf->name.get_id(), store, - msgr, &monmap); + msgr, mgr_msgr, &monmap); if (force_sync) { derr << "flagging a forced sync ..." << dendl; @@ -736,6 +744,7 @@ int main(int argc, const char **argv) } msgr->start(); + mgr_msgr->start(); mon->init(); @@ -749,6 +758,7 @@ int main(int argc, const char **argv) kill(getpid(), SIGTERM); msgr->wait(); + mgr_msgr->wait(); store->close(); @@ -760,6 +770,7 @@ int main(int argc, const char **argv) delete mon; delete store; delete msgr; + delete mgr_msgr; delete client_throttler; delete daemon_throttler; diff --git a/src/mon/Monitor.cc b/src/mon/Monitor.cc index c79bfc5a4a74..2da72ba2b623 100644 --- a/src/mon/Monitor.cc +++ b/src/mon/Monitor.cc @@ -148,7 +148,7 @@ long parse_pos_long(const char *s, ostream *pss) } Monitor::Monitor(CephContext* cct_, string nm, MonitorDBStore *s, - Messenger *m, MonMap *map) : + Messenger *m, Messenger *mgr_m, MonMap *map) : Dispatcher(cct_), name(nm), rank(-1), @@ -170,6 +170,8 @@ Monitor::Monitor(CephContext* cct_, string nm, MonitorDBStore *s, cct->_conf->auth_service_required : cct->_conf->auth_supported ), leader_supported_mon_commands(NULL), leader_supported_mon_commands_size(0), + mgr_messenger(mgr_m), + mgr_client(cct_, mgr_m), store(s), state(STATE_PROBING), @@ -843,6 +845,10 @@ int Monitor::init() // i'm ready! messenger->add_dispatcher_tail(this); + mgr_client.init(); + mgr_messenger->add_dispatcher_tail(&mgr_client); + mgr_messenger->add_dispatcher_tail(this); // for auth ms_* calls + bootstrap(); // encode command sets @@ -926,6 +932,7 @@ void Monitor::shutdown() dout(1) << "shutdown" << dendl; lock.Lock(); + wait_for_paxos_write(); state = STATE_SHUTDOWN; @@ -953,6 +960,8 @@ void Monitor::shutdown() elector.shutdown(); + mgr_client.shutdown(); + // clean up paxos->shutdown(); for (vector::iterator p = paxos_service.begin(); p != paxos_service.end(); ++p) @@ -986,6 +995,7 @@ void Monitor::shutdown() lock.Unlock(); messenger->shutdown(); // last thing! ceph_mon.cc will delete mon. + mgr_messenger->shutdown(); } void Monitor::wait_for_paxos_write() @@ -2771,7 +2781,7 @@ void Monitor::handle_command(MonOpRequestRef op) // check return value. If no prefix parameter provided, // return value will be false, then return error info. - if(!cmd_getval(g_ceph_context, cmdmap, "prefix", prefix)) { + if (!cmd_getval(g_ceph_context, cmdmap, "prefix", prefix)) { reply_command(op, -EINVAL, "command prefix not found", 0); return; } diff --git a/src/mon/Monitor.h b/src/mon/Monitor.h index 39eff4bd3040..ea019652c082 100644 --- a/src/mon/Monitor.h +++ b/src/mon/Monitor.h @@ -23,6 +23,9 @@ #ifndef CEPH_MONITOR_H #define CEPH_MONITOR_H +#include +#include + #include "include/types.h" #include "msg/Messenger.h" @@ -40,8 +43,7 @@ #include "messages/MMonCommand.h" #include "mon/MonitorDBStore.h" #include "include/memory.h" -#include -#include +#include "mgr/MgrClient.h" #include "mon/MonOpRequest.h" #include "common/WorkQueue.h" @@ -154,6 +156,8 @@ public: const MonCommand *leader_supported_mon_commands; int leader_supported_mon_commands_size; + Messenger *mgr_messenger; + MgrClient mgr_client; private: void new_tick(); friend class C_Mon_Tick; @@ -899,7 +903,7 @@ public: public: Monitor(CephContext *cct_, string nm, MonitorDBStore *s, - Messenger *m, MonMap *map); + Messenger *m, Messenger *mgr_m, MonMap *map); ~Monitor() override; static int check_features(MonitorDBStore *store);