From 5c4919219efdc445d226f14c908c4003fe8df05e Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Fri, 23 Oct 2015 13:27:39 -0400 Subject: [PATCH] osd: fix OSDService vs Objecter init order This reverts c7d96a5ed1d2cb844622af29b13705b8f7be6be7, but still keeps the Objecter init *after* we have authenticated. This way we don't crash when we get mon messages like MOSDPGCreate, and we also don't request maps we aren't prepared to handle. Signed-off-by: Sage Weil --- src/osd/OSD.cc | 16 ++++++++++++---- src/osd/OSD.h | 1 + 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 80d8da305650f..413ad594c4f30 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -480,13 +480,17 @@ void OSDService::init() reserver_finisher.start(); objecter_finisher.start(); objecter->set_client_incarnation(0); - objecter->start(); watch_timer.init(); agent_timer.init(); agent_thread.create(); } +void OSDService::final_init() +{ + objecter->start(); +} + void OSDService::activate_map() { // wake/unwake the tiering agent @@ -1929,6 +1933,10 @@ int OSD::init() tick_timer_without_osd_lock.add_event_after(cct->_conf->osd_heartbeat_interval, new C_Tick_WithoutOSDLock(this)); } + service.init(); + service.publish_map(osdmap); + service.publish_superblock(superblock); + osd_lock.Unlock(); r = monc->authenticate(); @@ -1947,9 +1955,9 @@ int OSD::init() if (is_stopping()) return 0; - service.init(); - service.publish_map(osdmap); - service.publish_superblock(superblock); + // start objecter *after* we have authenticated, so that we don't ignore + // the OSDMaps it requests. + service.final_init(); check_config(); diff --git a/src/osd/OSD.h b/src/osd/OSD.h index 996e7777af2fa..44a492c83aa6b 100644 --- a/src/osd/OSD.h +++ b/src/osd/OSD.h @@ -881,6 +881,7 @@ public: void pg_stat_queue_dequeue(PG *pg); void init(); + void final_init(); void start_shutdown(); void shutdown(); -- 2.39.5