summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2013-01-02 22:38:53 -0800
committerSage Weil <sage@inktank.com>2013-01-02 22:39:10 -0800
commita32d6c5dca081dcd8266f4ab51581ed6b2755685 (patch)
tree45114d43c518a2cbd08044d15c1cae3db496d126
parent0bfad8ef2040a0dd4a0dc1d3abf3ab5b2019d179 (diff)
downloadceph-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.cc28
-rw-r--r--src/osd/OSD.h1
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)