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 6d24c646e12..d6426093999 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 5070f5ea14a..fb9a43f76de 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 6784052d03a..dda91504248 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 1b48d504b25..1674ed0de53 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 bcfa10eec23..5fb8997f1be 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));