From: Sage Weil Date: Wed, 26 Dec 2012 18:40:53 +0000 (-0800) Subject: mds: add waiting_for_mdsmap queue X-Git-Tag: v0.57~283^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=850a056bec615d8693b73c07b6158d2559a2d5f4;p=ceph.git mds: add waiting_for_mdsmap queue Defer events until we get a specific MDSMap epoch. Signed-off-by: Sage Weil --- diff --git a/src/mds/MDS.cc b/src/mds/MDS.cc index cbcda25a8dd7..bd4bed91585c 100644 --- a/src/mds/MDS.cc +++ b/src/mds/MDS.cc @@ -1056,6 +1056,16 @@ void MDS::handle_mds_map(MMDSMap *m) if (!is_any_replay()) balancer->try_rebalance(); + { + map >::iterator p = waiting_for_mdsmap.begin(); + while (p != waiting_for_mdsmap.end() && p->first <= mdsmap->get_epoch()) { + list ls; + ls.swap(p->second); + waiting_for_mdsmap.erase(p++); + finish_contexts(g_ceph_context, ls); + } + } + out: m->put(); delete oldmap; diff --git a/src/mds/MDS.h b/src/mds/MDS.h index c7c365982419..a90587e3aa22 100644 --- a/src/mds/MDS.h +++ b/src/mds/MDS.h @@ -200,6 +200,7 @@ class MDS : public Dispatcher { list replay_queue; map > waiting_for_active_peer; list waiting_for_nolaggy; + map > waiting_for_mdsmap; map peer_mdsmap_epoch; @@ -218,6 +219,9 @@ class MDS : public Dispatcher { void wait_for_reconnect(Context *c) { waiting_for_reconnect.push_back(c); } + void wait_for_mdsmap(epoch_t e, Context *c) { + waiting_for_mdsmap[e].push_back(c); + } void enqueue_replay(Context *c) { replay_queue.push_back(c); }