}
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;
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
// 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;
}
msgr->start();
+ mgr_msgr->start();
mon->init();
kill(getpid(), SIGTERM);
msgr->wait();
+ mgr_msgr->wait();
store->close();
delete mon;
delete store;
delete msgr;
+ delete mgr_msgr;
delete client_throttler;
delete daemon_throttler;
}
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),
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),
// 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
dout(1) << "shutdown" << dendl;
lock.Lock();
+
wait_for_paxos_write();
state = STATE_SHUTDOWN;
elector.shutdown();
+ mgr_client.shutdown();
+
// clean up
paxos->shutdown();
for (vector<PaxosService*>::iterator p = paxos_service.begin(); p != paxos_service.end(); ++p)
lock.Unlock();
messenger->shutdown(); // last thing! ceph_mon.cc will delete mon.
+ mgr_messenger->shutdown();
}
void Monitor::wait_for_paxos_write()
// 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;
}
#ifndef CEPH_MONITOR_H
#define CEPH_MONITOR_H
+#include <errno.h>
+#include <cmath>
+
#include "include/types.h"
#include "msg/Messenger.h"
#include "messages/MMonCommand.h"
#include "mon/MonitorDBStore.h"
#include "include/memory.h"
-#include <errno.h>
-#include <cmath>
+#include "mgr/MgrClient.h"
#include "mon/MonOpRequest.h"
#include "common/WorkQueue.h"
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;
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);