]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: move common active vs booting code into consume_map
authorSage Weil <sage@inktank.com>
Thu, 3 Jan 2013 06:38:53 +0000 (22:38 -0800)
committerSage Weil <sage@inktank.com>
Thu, 3 Jan 2013 06:39:10 +0000 (22:39 -0800)
Push osdmaps to PGs in separate method from activate_map() (whose name
is becoming less and less accurate).

Signed-off-by: Sage Weil <sage@inktank.com>
src/osd/OSD.cc
src/osd/OSD.h

index 93b0fc4f10b0b34d3a65057a5228d27afb355e74..75f84ede5bb30bee5ac0e7504e124317b7544493 100644 (file)
@@ -3956,7 +3956,14 @@ void OSD::handle_osd_map(MOSDMap *m)
   check_osdmap_features();
 
   // yay!
-  activate_map();
+  consume_map();
+
+  if (!is_active()) {
+    dout(10) << " not yet active; waiting for peering wq to drain" << dendl;
+    peering_wq.drain();
+  } else {
+    activate_map();
+  }
 
   if (m->newest_map && m->newest_map > last) {
     dout(10) << " msg say newest map is " << m->newest_map << ", requesting more" << dendl;
@@ -4135,11 +4142,10 @@ void OSD::advance_map(ObjectStore::Transaction& t, C_Contexts *tfin)
   }
 }
 
-void OSD::activate_map()
+void OSD::consume_map()
 {
   assert(osd_lock.is_locked());
-
-  dout(7) << "activate_map version " << osdmap->get_epoch() << dendl;
+  dout(7) << "consume_map version " << osdmap->get_epoch() << dendl;
 
   int num_pg_primary = 0, num_pg_replica = 0, num_pg_stray = 0;
   list<PG*> to_remove;
@@ -4197,22 +4203,22 @@ void OSD::activate_map()
     pg->queue_null(osdmap->get_epoch(), osdmap->get_epoch());
     pg->unlock();
   }
-
   
   logger->set(l_osd_pg, pg_map.size());
   logger->set(l_osd_pg_primary, num_pg_primary);
   logger->set(l_osd_pg_replica, num_pg_replica);
   logger->set(l_osd_pg_stray, num_pg_stray);
+}
+
+void OSD::activate_map()
+{
+  assert(osd_lock.is_locked());
+
+  dout(7) << "activate_map version " << osdmap->get_epoch() << dendl;
 
   wake_all_pg_waiters();   // the pg mapping may have shifted
   maybe_update_heartbeat_peers();
 
-  if (!is_active()) {
-    dout(10) << " not yet active; waiting for peering wq to drain" << dendl;
-    peering_wq.drain();
-    return;
-  }
-
   if (osdmap->test_flag(CEPH_OSDMAP_FULL)) {
     dout(10) << " osdmap flagged full, doing onetime osdmap subscribe" << dendl;
     monc->sub_want("osdmap", osdmap->get_epoch() + 1, CEPH_SUBSCRIBE_ONETIME);
index 05b1978b42938782f91b7db9e7aa71415c787eb2..6576d7fdbdaa7bb0c6201244afc0326aed04df91 100644 (file)
@@ -772,6 +772,7 @@ private:
     epoch_t advance_to, PG *pg, PG::RecoveryCtx *rctx,
     set<boost::intrusive_ptr<PG> > *split_pgs);
   void advance_map(ObjectStore::Transaction& t, C_Contexts *tfin);
+  void consume_map();
   void activate_map();
 
   // osd map cache (past osd maps)