From: John Spray Date: Tue, 28 Jun 2016 13:22:08 +0000 (+0100) Subject: mds: remove TMAP2OMAP check and refactor X-Git-Tag: ses5-milestone5~308^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=a2682edb76ceac428c686e0ac21c06511e27693e;p=ceph.git mds: remove TMAP2OMAP check and refactor Removing this check allows us to finally move the Objecter instance down into MDSRank where it belongs. Fixes: http://tracker.ceph.com/issues/15923 Signed-off-by: John Spray --- diff --git a/src/mds/MDSDaemon.cc b/src/mds/MDSDaemon.cc index ad163372b1c1..869daaef7a92 100644 --- a/src/mds/MDSDaemon.cc +++ b/src/mds/MDSDaemon.cc @@ -116,7 +116,6 @@ MDSDaemon::MDSDaemon(const std::string &n, Messenger *m, MonClient *mc) : name(n), messenger(m), monc(mc), - objecter(new Objecter(m->cct, m, mc, NULL, 0, 0)), log_client(m->cct, messenger, &mc->monmap, LogClient::NO_FLAGS), mds_rank(NULL), tick_event(0), @@ -130,8 +129,6 @@ MDSDaemon::MDSDaemon(const std::string &n, Messenger *m, MonClient *mc) : monc->set_messenger(messenger); mdsmap = new MDSMap; - - objecter->unset_honor_osdmap_full(); } MDSDaemon::~MDSDaemon() { @@ -139,8 +136,6 @@ MDSDaemon::~MDSDaemon() { delete mds_rank; mds_rank = NULL; - delete objecter; - objecter = NULL; delete mdsmap; mdsmap = NULL; @@ -189,9 +184,6 @@ bool MDSDaemon::asok_command(string command, cmdmap_t& cmdmap, string format, void MDSDaemon::dump_status(Formatter *f) { - const epoch_t osd_epoch = objecter->with_osdmap( - std::mem_fn(&OSDMap::get_epoch)); - f->open_object_section("status"); f->dump_stream("cluster_fsid") << monc->get_fsid(); if (mds_rank) { @@ -209,10 +201,11 @@ void MDSDaemon::dump_status(Formatter *f) } f->dump_unsigned("mdsmap_epoch", mdsmap->get_epoch()); - f->dump_unsigned("osdmap_epoch", osd_epoch); if (mds_rank) { + f->dump_unsigned("osdmap_epoch", mds_rank->get_osd_epoch()); f->dump_unsigned("osdmap_epoch_barrier", mds_rank->get_osd_epoch_barrier()); } else { + f->dump_unsigned("osdmap_epoch", 0); f->dump_unsigned("osdmap_epoch_barrier", 0); } f->close_section(); // status @@ -457,9 +450,6 @@ int MDSDaemon::init() dout(10) << sizeof(Capability) << "\tCapability " << dendl; dout(10) << sizeof(xlist::item) << "\t xlist<>::item *2=" << 2*sizeof(xlist::item) << dendl; - objecter->init(); - messenger->add_dispatcher_tail(objecter); - messenger->add_dispatcher_tail(&beacon); messenger->add_dispatcher_tail(this); @@ -505,8 +495,6 @@ int MDSDaemon::init() return -ETIMEDOUT; } - objecter->start(); - mds_lock.Lock(); if (beacon.get_want_state() == CEPH_MDS_STATE_DNE) { dout(4) << __func__ << ": terminated already, dropping out" << dendl; @@ -519,27 +507,6 @@ int MDSDaemon::init() mds_lock.Unlock(); - // verify that osds support tmap2omap - while (true) { - objecter->maybe_request_map(); - objecter->wait_for_osd_map(); - if (objecter->with_osdmap([&](const OSDMap& o) { - uint64_t osd_features = o.get_up_osd_features(); - if (osd_features & CEPH_FEATURE_OSD_TMAP2OMAP) - return true; - if (o.get_num_up_osds() > 0) { - derr << "*** one or more OSDs do not support TMAP2OMAP; upgrade " - << "OSDs before starting MDS (or downgrade MDS) ***" << dendl; - } else { - derr << "*** no OSDs are up as of epoch " << o.get_epoch() - << ", waiting" << dendl; - } - return false; - })) - break; - sleep(10); - } - // Set up admin socket before taking mds_lock, so that ordering // is consistent (later we take mds_lock within asok callbacks) set_up_admin_socket(); @@ -1010,7 +977,7 @@ void MDSDaemon::handle_mds_map(MMDSMap *m) // Did I previously not hold a rank? Initialize! if (mds_rank == NULL) { mds_rank = new MDSRankDispatcher(whoami, mds_lock, clog, - timer, beacon, mdsmap, messenger, monc, objecter, + timer, beacon, mdsmap, messenger, monc, new C_VoidFn(this, &MDSDaemon::respawn), new C_VoidFn(this, &MDSDaemon::suicide)); dout(10) << __func__ << ": initializing MDS rank " @@ -1105,10 +1072,6 @@ void MDSDaemon::suicide() if (mds_rank) { mds_rank->shutdown(); } else { - - if (objecter->initialized.read()) { - objecter->shutdown(); - } timer.shutdown(); monc->shutdown(); diff --git a/src/mds/MDSDaemon.h b/src/mds/MDSDaemon.h index d193dac66c21..68c60137a306 100644 --- a/src/mds/MDSDaemon.h +++ b/src/mds/MDSDaemon.h @@ -45,9 +45,6 @@ class filepath; class MonClient; -class Objecter; -class Filer; - class Server; class Locker; class MDCache; diff --git a/src/mds/MDSRank.cc b/src/mds/MDSRank.cc index e662f1b1a7b7..8aa884615edd 100644 --- a/src/mds/MDSRank.cc +++ b/src/mds/MDSRank.cc @@ -49,14 +49,13 @@ MDSRank::MDSRank( MDSMap *& mdsmap_, Messenger *msgr, MonClient *monc_, - Objecter *objecter_, Context *respawn_hook_, Context *suicide_hook_) : whoami(whoami_), incarnation(0), mds_lock(mds_lock_), clog(clog_), timer(timer_), mdsmap(mdsmap_), - objecter(objecter_), + objecter(new Objecter(g_ceph_context, msgr, monc_, nullptr, 0, 0)), server(NULL), mdcache(NULL), locker(NULL), mdlog(NULL), balancer(NULL), scrubstack(NULL), damage_table(whoami_), @@ -78,6 +77,8 @@ MDSRank::MDSRank( { hb = g_ceph_context->get_heartbeat_map()->add_worker("MDSRank", pthread_self()); + objecter->unset_honor_osdmap_full(); + finisher = new Finisher(msgr->cct); mdcache = new MDCache(this); @@ -136,10 +137,18 @@ MDSRank::~MDSRank() delete respawn_hook; respawn_hook = NULL; + + delete objecter; + objecter = nullptr; } void MDSRankDispatcher::init() { + objecter->init(); + messenger->add_dispatcher_head(objecter); + + objecter->start(); + update_log_config(); create_logger(); @@ -2553,11 +2562,10 @@ MDSRankDispatcher::MDSRankDispatcher( MDSMap *& mdsmap_, Messenger *msgr, MonClient *monc_, - Objecter *objecter_, Context *respawn_hook_, Context *suicide_hook_) : MDSRank(whoami_, mds_lock_, clog_, timer_, beacon_, mdsmap_, - msgr, monc_, objecter_, respawn_hook_, suicide_hook_) + msgr, monc_, respawn_hook_, suicide_hook_) {} bool MDSRankDispatcher::handle_command( @@ -2626,3 +2634,9 @@ bool MDSRankDispatcher::handle_command( return false; } } + +epoch_t MDSRank::get_osd_epoch() const +{ + return objecter->with_osdmap(std::mem_fn(&OSDMap::get_epoch)); +} + diff --git a/src/mds/MDSRank.h b/src/mds/MDSRank.h index b8ad90dd46f3..2a2ea75b2af1 100644 --- a/src/mds/MDSRank.h +++ b/src/mds/MDSRank.h @@ -278,7 +278,6 @@ class MDSRank { MDSMap *& mdsmap_, Messenger *msgr, MonClient *monc_, - Objecter *objecter_, Context *respawn_hook_, Context *suicide_hook_); ~MDSRank(); @@ -355,6 +354,7 @@ class MDSRank { void set_osd_epoch_barrier(epoch_t e); epoch_t get_osd_epoch_barrier() const {return osd_epoch_barrier;} + epoch_t get_osd_epoch() const; ceph_tid_t issue_tid() { return ++last_tid; } @@ -519,7 +519,6 @@ public: MDSMap *& mdsmap_, Messenger *msgr, MonClient *monc_, - Objecter *objecter_, Context *respawn_hook_, Context *suicide_hook_); };