diff options
author | Sage Weil <sage@inktank.com> | 2013-01-02 22:38:53 -0800 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-01-02 22:39:10 -0800 |
commit | a32d6c5dca081dcd8266f4ab51581ed6b2755685 (patch) | |
tree | 45114d43c518a2cbd08044d15c1cae3db496d126 | |
parent | 0bfad8ef2040a0dd4a0dc1d3abf3ab5b2019d179 (diff) | |
download | ceph-a32d6c5dca081dcd8266f4ab51581ed6b2755685.tar.gz |
osd: move common active vs booting code into consume_map
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>
-rw-r--r-- | src/osd/OSD.cc | 28 | ||||
-rw-r--r-- | src/osd/OSD.h | 1 |
2 files changed, 18 insertions, 11 deletions
diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 93b0fc4f10b..75f84ede5bb 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -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); diff --git a/src/osd/OSD.h b/src/osd/OSD.h index 05b1978b429..6576d7fdbda 100644 --- a/src/osd/OSD.h +++ b/src/osd/OSD.h @@ -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) |