]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
tools: update for Journaler/Objecter interfaces
authorJohn Spray <john.spray@redhat.com>
Tue, 12 Aug 2014 16:47:01 +0000 (17:47 +0100)
committerJohn Spray <john.spray@redhat.com>
Mon, 25 Aug 2014 00:34:18 +0000 (01:34 +0100)
Journaler now requires a Finisher: construct one in
MDSUtility.

Objecter now requires separate calls to init() and start(),
do that in MDSUtility and also take advantage of Objecter's
new ability to act as its own dispatcher.

Signed-off-by: John Spray <john.spray@redhat.com>
src/osdc/Journaler.h
src/tools/cephfs/Dumper.cc
src/tools/cephfs/MDSUtility.cc
src/tools/cephfs/MDSUtility.h
src/tools/cephfs/Resetter.cc

index 6d24c646e122128a372936dd6adbbd15baca69cf..d642609399994c16ef2613ce59e4151e02b5209a 100644 (file)
@@ -369,7 +369,7 @@ private:
   C_OnFinisher *wrap_finisher(Context *c);
 
 public:
-  Journaler(inodeno_t ino_, int64_t pool, const char *mag, Objecter *obj, PerfCounters *l, int lkey, SafeTimer *tim, Finisher *f=NULL) : 
+  Journaler(inodeno_t ino_, int64_t pool, const char *mag, Objecter *obj, PerfCounters *l, int lkey, SafeTimer *tim, Finisher *f) : 
     last_committed(mag),
     cct(obj->cct), lock("Journaler"), finisher(f),
     last_written(mag),
index 5070f5ea14a9bb2f108b6ebf4f8ca06c7caadd66..fb9a43f76de86142cbe3b9bc0bc78dd79548ed2d 100644 (file)
@@ -74,7 +74,7 @@ void Dumper::dump(const char *dump_file)
   int r = 0;
 
   Journaler journaler(ino, mdsmap->get_metadata_pool(), CEPH_FS_ONDISK_MAGIC,
-                                       objecter, 0, 0, &timer);
+                                       objecter, 0, 0, &timer, &finisher);
   r = recover_journal(&journaler);
   if (r) {
     return;
index 6784052d03a3dd7fbd8f0e1c1422e11ecd7e226f..dda915042481c21c507ea3385eb95b2e4e61f5c5 100644 (file)
@@ -22,6 +22,7 @@ MDSUtility::MDSUtility() :
   objecter(NULL),
   lock("MDSUtility::lock"),
   timer(g_ceph_context, lock),
+  finisher(g_ceph_context, "MDSUtility"),
   waiting_for_mds_map(NULL)
 {
   monc = new MonClient(g_ceph_context);
@@ -48,11 +49,18 @@ int MDSUtility::init()
   if (r < 0)
     return r;
 
-  messenger->add_dispatcher_head(this);
   messenger->start();
 
+  objecter->set_client_incarnation(0);
+  objecter->init();
+
+  // Connect dispatchers before starting objecter
+  messenger->add_dispatcher_tail(objecter);
+  messenger->add_dispatcher_tail(this);
+
   // Initialize MonClient
   if (monc->build_initial_monmap() < 0) {
+    objecter->shutdown();
     messenger->shutdown();
     messenger->wait();
     return -1;
@@ -65,6 +73,7 @@ int MDSUtility::init()
   if (r < 0) {
     derr << "Authentication failed, did you specify an MDS ID with a valid keyring?" << dendl;
     monc->shutdown();
+    objecter->shutdown();
     messenger->shutdown();
     messenger->wait();
     return r;
@@ -73,9 +82,8 @@ int MDSUtility::init()
   client_t whoami = monc->get_global_id();
   messenger->set_myname(entity_name_t::CLIENT(whoami.v));
 
-  // Initialize Objecter and wait for OSD map
-  objecter->set_client_incarnation(0);
-  objecter->init();
+  // Start Objecter and wait for OSD map
+  objecter->start();
   objecter->wait_for_osd_map();
   timer.init();
 
@@ -98,12 +106,16 @@ int MDSUtility::init()
   init_lock.Unlock();
   dout(4) << "Got MDS map " << mdsmap->get_epoch() << dendl;
 
+  finisher.start();
+
   return 0;
 }
 
 
 void MDSUtility::shutdown()
 {
+  finisher.stop();
+
   lock.Lock();
   timer.shutdown();
   objecter->shutdown();
@@ -118,15 +130,11 @@ bool MDSUtility::ms_dispatch(Message *m)
 {
    Mutex::Locker locker(lock);
    switch (m->get_type()) {
-   case CEPH_MSG_OSD_OPREPLY:
-     objecter->handle_osd_op_reply((MOSDOpReply *)m);
-     break;
-   case CEPH_MSG_OSD_MAP:
-     objecter->handle_osd_map((MOSDMap*)m);
-     break;
    case CEPH_MSG_MDS_MAP:
      handle_mds_map((MMDSMap*)m);
      break;
+   case CEPH_MSG_OSD_MAP:
+     break;
    default:
      return false;
    }
index 1b48d504b252d60dfd3d9f359657a0a418eafa03..1674ed0de53530dee73d7da726f76c6eee72e9a6 100644 (file)
@@ -20,6 +20,7 @@
 #include "msg/Dispatcher.h"
 #include "msg/Messenger.h"
 #include "auth/Auth.h"
+#include "common/Finisher.h"
 
 /// MDS Utility
 /**
@@ -36,6 +37,7 @@ protected:
 
   Mutex lock;
   SafeTimer timer;
+  Finisher finisher;
 
   Context *waiting_for_mds_map;
 
index bcfa10eec231011e9b4eca863cb12097c4102bf9..5fb8997f1be56fa108166e676d64864cefbc9fcc 100644 (file)
@@ -40,7 +40,7 @@ void Resetter::reset(int rank)
   Journaler journaler(jp.front,
       mdsmap->get_metadata_pool(),
       CEPH_FS_ONDISK_MAGIC,
-      objecter, 0, 0, &timer);
+      objecter, 0, 0, &timer, &finisher);
 
   lock.Lock();
   journaler.recover(new C_SafeCond(&mylock, &cond, &done, &r));