// start monitor
mon = new Monitor(g_ceph_context, g_conf->name.get_id(), &store, messenger, &monmap);
+ err = mon->preinit();
+ if (err < 0)
+ return 1;
+
global_init_daemonize(g_ceph_context, 0);
common_init_finish(g_ceph_context);
global_init_chdir(g_ceph_context);
- messenger->start();
// set up signal handlers, now that we've daemonized/forked.
init_async_signal_handler();
register_async_signal_handler_oneshot(SIGINT, handle_mon_signal);
register_async_signal_handler_oneshot(SIGTERM, handle_mon_signal);
+ messenger->start();
+
mon->init();
+
messenger->wait();
unregister_async_signal_handler(SIGHUP, sighup_handler);
store->put_bl_ss(bl, COMPAT_SET_LOC, 0);
}
-int Monitor::init()
+int Monitor::preinit()
{
lock.Lock();
- dout(1) << "init fsid " << monmap->fsid << dendl;
+ dout(1) << "preinit fsid " << monmap->fsid << dendl;
assert(!logger);
{
assert(r == 0);
lock.Lock();
- // i'm ready!
- messenger->add_dispatcher_tail(this);
-
+ lock.Unlock();
+ return 0;
+}
+
+int Monitor::init()
+{
+ dout(2) << "init" << dendl;
+ lock.Lock();
+
// start ticker
timer.init();
new_tick();
+ // i'm ready!
+ messenger->add_dispatcher_tail(this);
+
bootstrap();
-
+
lock.Unlock();
return 0;
}