From 28e5c03daef21dab927747bf411f9a449ed27207 Mon Sep 17 00:00:00 2001 From: John Spray Date: Tue, 12 Aug 2014 17:47:01 +0100 Subject: [PATCH] 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 --- src/osdc/Journaler.h | 2 +- src/tools/cephfs/Dumper.cc | 2 +- src/tools/cephfs/MDSUtility.cc | 28 ++++++++++++++++++---------- src/tools/cephfs/MDSUtility.h | 2 ++ src/tools/cephfs/Resetter.cc | 2 +- 5 files changed, 23 insertions(+), 13 deletions(-) diff --git a/src/osdc/Journaler.h b/src/osdc/Journaler.h index 6d24c646e1221..d642609399994 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 5070f5ea14a9b..fb9a43f76de86 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 6784052d03a3d..dda915042481c 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 1b48d504b252d..1674ed0de5353 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 bcfa10eec2310..5fb8997f1be56 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)); -- 2.39.5