From: John Spray Date: Tue, 12 Aug 2014 16:47:01 +0000 (+0100) Subject: tools: update for Journaler/Objecter interfaces X-Git-Tag: v0.86~213^2~26 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=28e5c03daef21dab927747bf411f9a449ed27207;p=ceph.git tools: update for Journaler/Objecter interfaces 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 --- diff --git a/src/osdc/Journaler.h b/src/osdc/Journaler.h index 6d24c646e122..d64260939999 100644 --- a/src/osdc/Journaler.h +++ b/src/osdc/Journaler.h @@ -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), diff --git a/src/tools/cephfs/Dumper.cc b/src/tools/cephfs/Dumper.cc index 5070f5ea14a9..fb9a43f76de8 100644 --- a/src/tools/cephfs/Dumper.cc +++ b/src/tools/cephfs/Dumper.cc @@ -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; diff --git a/src/tools/cephfs/MDSUtility.cc b/src/tools/cephfs/MDSUtility.cc index 6784052d03a3..dda915042481 100644 --- a/src/tools/cephfs/MDSUtility.cc +++ b/src/tools/cephfs/MDSUtility.cc @@ -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; } diff --git a/src/tools/cephfs/MDSUtility.h b/src/tools/cephfs/MDSUtility.h index 1b48d504b252..1674ed0de535 100644 --- a/src/tools/cephfs/MDSUtility.h +++ b/src/tools/cephfs/MDSUtility.h @@ -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; diff --git a/src/tools/cephfs/Resetter.cc b/src/tools/cephfs/Resetter.cc index bcfa10eec231..5fb8997f1be5 100644 --- a/src/tools/cephfs/Resetter.cc +++ b/src/tools/cephfs/Resetter.cc @@ -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));