]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: remove TMAP2OMAP check and refactor
authorJohn Spray <john.spray@redhat.com>
Tue, 28 Jun 2016 13:22:08 +0000 (14:22 +0100)
committerJohn Spray <john.spray@redhat.com>
Tue, 19 Jul 2016 12:59:33 +0000 (13:59 +0100)
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 <john.spray@redhat.com>
src/mds/MDSDaemon.cc
src/mds/MDSDaemon.h
src/mds/MDSRank.cc
src/mds/MDSRank.h

index ad163372b1c17d9e244d01e690d901f1eae329b4..869daaef7a92b29db1aff9e514c3b5ef2c7c35ba 100644 (file)
@@ -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<void*>::item) << "\t xlist<>::item   *2=" << 2*sizeof(xlist<void*>::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();
index d193dac66c216460288813ec3135d684efc2e3cb..68c60137a306fcba48644b7faaebff385b10f8c0 100644 (file)
@@ -45,9 +45,6 @@ class filepath;
 
 class MonClient;
 
-class Objecter;
-class Filer;
-
 class Server;
 class Locker;
 class MDCache;
index e662f1b1a7b7e3dad28c609ec85e0f68881e9114..8aa884615edde8e1a15949f7abe39eb67d114b7e 100644 (file)
@@ -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));  
+}
+
index b8ad90dd46f319ff49349e826f8be493b5fedcca..2a2ea75b2af1d68b844eff4c566f94e80314ff51 100644 (file)
@@ -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_);
 };