diff options
author | Sage Weil <sage@inktank.com> | 2013-08-26 18:11:32 -0700 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-08-26 18:11:32 -0700 |
commit | a6fe776c3a04ddbc015ca104fa67ea8248bd0df9 (patch) | |
tree | 877a9b4a4b4cc16aadc43e2614bf8398e441dd71 | |
parent | 76a38c3bc6939f7675af76b5f3f1d7fe16253217 (diff) | |
parent | c5b5ce120a8ce9116be52874dbbcc39adec48b5c (diff) | |
download | ceph-a6fe776c3a04ddbc015ca104fa67ea8248bd0df9.tar.gz |
Merge remote-tracking branch 'gh/next'
-rw-r--r-- | src/ceph_osd.cc | 2 | ||||
-rw-r--r-- | src/osd/OSD.cc | 72 | ||||
-rw-r--r-- | src/osd/OSD.h | 1 |
3 files changed, 41 insertions, 34 deletions
diff --git a/src/ceph_osd.cc b/src/ceph_osd.cc index d8590bff817..dc6f435bdcf 100644 --- a/src/ceph_osd.cc +++ b/src/ceph_osd.cc @@ -465,6 +465,8 @@ int main(int argc, const char **argv) register_async_signal_handler_oneshot(SIGINT, handle_osd_signal); register_async_signal_handler_oneshot(SIGTERM, handle_osd_signal); + osd->final_init(); + if (g_conf->inject_early_sigterm) kill(getpid(), SIGTERM); diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 3e19f5634c1..21fbe65714c 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -1231,6 +1231,44 @@ int OSD::init() // tick tick_timer.add_event_after(g_conf->osd_heartbeat_interval, new C_Tick(this)); + service.init(); + service.publish_map(osdmap); + service.publish_superblock(superblock); + + osd_lock.Unlock(); + + r = monc->authenticate(); + if (r < 0) { + monc->shutdown(); + store->umount(); + osd_lock.Lock(); // locker is going to unlock this on function exit + if (is_stopping()) + return 0; + return r; + } + + while (monc->wait_auth_rotating(30.0) < 0) { + derr << "unable to obtain rotating service keys; retrying" << dendl; + } + + osd_lock.Lock(); + if (is_stopping()) + return 0; + + dout(10) << "ensuring pgs have consumed prior maps" << dendl; + consume_map(); + peering_wq.drain(); + + dout(10) << "done with init, starting boot process" << dendl; + state = STATE_BOOTING; + start_boot(); + + return 0; +} + +void OSD::final_init() +{ + int r; AdminSocket *admin_socket = cct->get_admin_socket(); asok_hook = new OSDSocketHook(this); r = admin_socket->register_command("dump_ops_in_flight", @@ -1323,40 +1361,6 @@ int OSD::init() test_ops_hook, "inject metadata error"); assert(r == 0); - - service.init(); - service.publish_map(osdmap); - service.publish_superblock(superblock); - - osd_lock.Unlock(); - - r = monc->authenticate(); - if (r < 0) { - monc->shutdown(); - store->umount(); - osd_lock.Lock(); // locker is going to unlock this on function exit - if (is_stopping()) - return 0; - return r; - } - - while (monc->wait_auth_rotating(30.0) < 0) { - derr << "unable to obtain rotating service keys; retrying" << dendl; - } - - osd_lock.Lock(); - if (is_stopping()) - return 0; - - dout(10) << "ensuring pgs have consumed prior maps" << dendl; - consume_map(); - peering_wq.drain(); - - dout(10) << "done with init, starting boot process" << dendl; - state = STATE_BOOTING; - start_boot(); - - return 0; } void OSD::create_logger() diff --git a/src/osd/OSD.h b/src/osd/OSD.h index 4d8c31e3046..e0cf76c0f92 100644 --- a/src/osd/OSD.h +++ b/src/osd/OSD.h @@ -1719,6 +1719,7 @@ public: // startup/shutdown int pre_init(); int init(); + void final_init(); void suicide(int exitcode); int shutdown(); |