]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: add waiting_for_mdsmap queue
authorSage Weil <sage@inktank.com>
Wed, 26 Dec 2012 18:40:53 +0000 (10:40 -0800)
committerSage Weil <sage@inktank.com>
Wed, 26 Dec 2012 19:58:51 +0000 (11:58 -0800)
Defer events until we get a specific MDSMap epoch.

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

index cbcda25a8dd7812fffece703c87208947ec384a1..bd4bed91585c85b5d8102dd181fe055d63b408b6 100644 (file)
@@ -1056,6 +1056,16 @@ void MDS::handle_mds_map(MMDSMap *m)
   if (!is_any_replay())
     balancer->try_rebalance();
 
+  {
+    map<epoch_t,list<Context*> >::iterator p = waiting_for_mdsmap.begin();
+    while (p != waiting_for_mdsmap.end() && p->first <= mdsmap->get_epoch()) {
+      list<Context*> ls;
+      ls.swap(p->second);
+      waiting_for_mdsmap.erase(p++);
+      finish_contexts(g_ceph_context, ls);
+    }
+  }
+
  out:
   m->put();
   delete oldmap;
index c7c365982419a76ab47d19a44fe49d7f79a86618..a90587e3aa224eb56375345281abb67c948132de 100644 (file)
@@ -200,6 +200,7 @@ class MDS : public Dispatcher {
   list<Context*> replay_queue;
   map<int, list<Context*> > waiting_for_active_peer;
   list<Message*> waiting_for_nolaggy;
+  map<epoch_t, list<Context*> > waiting_for_mdsmap;
 
   map<int,version_t> 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);
   }