]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
objecter: add new wait_for_osd_map function.
authorGreg Farnum <gregf@hq.newdream.net>
Thu, 4 Nov 2010 18:28:52 +0000 (11:28 -0700)
committerGreg Farnum <gregf@hq.newdream.net>
Thu, 4 Nov 2010 18:28:52 +0000 (11:28 -0700)
src/osdc/Objecter.cc
src/osdc/Objecter.h

index 21e2f8bb9eca717599e557ffc3a7b0d58cfecd8c..0fe4d65019b9c292722a108188eba6aee73d73f8 100644 (file)
@@ -211,6 +211,20 @@ void Objecter::handle_osd_map(MOSDMap *m)
   monc->sub_got("osdmap", osdmap->get_epoch());
 }
 
+void Objecter::wait_for_osd_map()
+{
+  if (osdmap->get_epoch()) return;
+  Mutex lock("");
+  Cond cond;
+  bool done;
+  lock.Lock();
+  C_SafeCond *context = new C_SafeCond(&lock, &cond, &done, NULL);
+  waiting_for_map[0].push_back(pair<Context*, int>(context, 0));
+  while (!done)
+    cond.Wait(lock);
+  lock.Unlock();
+}
+
 
 void Objecter::maybe_request_map()
 {
index 8826740ff5ac42ac8ae77a63bd4385231a523e06..75bdfc9b7f5a3e01837aa93d127e57b7b122d514 100644 (file)
@@ -468,6 +468,7 @@ public:
   void dispatch(Message *m);
   void handle_osd_op_reply(class MOSDOpReply *m);
   void handle_osd_map(class MOSDMap *m);
+  void wait_for_osd_map();
 
 private:
   // low-level