]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: fix OSDService vs Objecter init order 6366/head
authorSage Weil <sage@redhat.com>
Fri, 23 Oct 2015 17:27:39 +0000 (13:27 -0400)
committerSage Weil <sage@redhat.com>
Fri, 23 Oct 2015 17:27:39 +0000 (13:27 -0400)
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 <sage@redhat.com>
src/osd/OSD.cc
src/osd/OSD.h

index 80d8da305650fe9c400394191b24cbc7f48a1940..413ad594c4f304e055cadfde954180ae76e422cf 100644 (file)
@@ -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();
 
index 996e7777af2faaff8667ddcee2dbf348e1aa1e27..44a492c83aa6b66988bcd4e5753070c41648d169 100644 (file)
@@ -881,6 +881,7 @@ public:
   void pg_stat_queue_dequeue(PG *pg);
 
   void init();
+  void final_init();  
   void start_shutdown();
   void shutdown();