]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: separate pre- and post-fork init
authorSage Weil <sage@inktank.com>
Tue, 30 Oct 2012 20:16:57 +0000 (13:16 -0700)
committerSage Weil <sage@inktank.com>
Tue, 30 Oct 2012 20:21:48 +0000 (13:21 -0700)
Do most init pre-fork, then do the last little bit (start up messenger,
bootstrap) post-fork.

Signed-off-by: Sage Weil <sage@inktank.com>
src/ceph_mon.cc
src/mon/Monitor.cc
src/mon/Monitor.h

index 9d5db254f5bca53e7474a079c74b7251dc445e77..f369f4150e5a061a437a0206f839e09a8dc2d227 100644 (file)
@@ -404,10 +404,13 @@ int main(int argc, const char **argv)
   // 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();
@@ -415,7 +418,10 @@ int main(int argc, const char **argv)
   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);
index 6c5134f4c92500dbdf0b99c777a159d89a17b68b..0ce53515bd02ad4b23df07bdcb04ecf361087e28 100644 (file)
@@ -409,11 +409,11 @@ void Monitor::write_features()
   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);
   {
@@ -540,15 +540,24 @@ int Monitor::init()
   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;
 }
index 43b46a449158c57f1e0c54c8528466074dea4c2a..8ff376ce880eb24527038ffa623e82d5c407c583 100644 (file)
@@ -440,6 +440,7 @@ public:
 
   static int check_features(MonitorStore *store);
 
+  int preinit();
   int init();
   void shutdown();
   void tick();