summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2013-08-26 18:11:32 -0700
committerSage Weil <sage@inktank.com>2013-08-26 18:11:32 -0700
commita6fe776c3a04ddbc015ca104fa67ea8248bd0df9 (patch)
tree877a9b4a4b4cc16aadc43e2614bf8398e441dd71
parent76a38c3bc6939f7675af76b5f3f1d7fe16253217 (diff)
parentc5b5ce120a8ce9116be52874dbbcc39adec48b5c (diff)
downloadceph-a6fe776c3a04ddbc015ca104fa67ea8248bd0df9.tar.gz
Merge remote-tracking branch 'gh/next'
-rw-r--r--src/ceph_osd.cc2
-rw-r--r--src/osd/OSD.cc72
-rw-r--r--src/osd/OSD.h1
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();