]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: add MDSMap method for creating null MDSMap
authorPatrick Donnelly <pdonnell@redhat.com>
Wed, 17 Mar 2021 16:55:04 +0000 (09:55 -0700)
committerPatrick Donnelly <pdonnell@redhat.com>
Fri, 30 Jul 2021 23:28:53 +0000 (16:28 -0700)
It's not necessary to distribute a CompatSet with the null mdsmap. We
only need to communicate that the MDS is not part of any map.

Signed-off-by: Patrick Donnelly <pdonnell@redhat.com>
src/mds/MDSMap.h
src/mon/MDSMonitor.cc

index f6ed07577c602b758a81455c1707d98cf67719d3..d61552caa43e922ed2ff9edcd54d1dc799780cb3 100644 (file)
@@ -167,6 +167,13 @@ public:
   static CompatSet get_compat_set_default();
   static CompatSet get_compat_set_base(); // pre v0.20
 
+  static MDSMap create_null_mdsmap() {
+    MDSMap null_map;
+    /* Use the largest epoch so it's always bigger than whatever the MDS has. */
+    null_map.epoch = std::numeric_limits<decltype(epoch)>::max();
+    return null_map;
+  }
+
   bool get_inline_data_enabled() const { return inline_data_enabled; }
   void set_inline_data_enabled(bool enabled) { inline_data_enabled = enabled; }
 
index c74ec94ae41ac32e5c94eb68348c95265faacd93..2f324fc9b91d408d5d39de49db1fe3b690e4fb23 100644 (file)
@@ -414,10 +414,7 @@ bool MDSMonitor::preprocess_beacon(MonOpRequestRef op)
        * know which FS it was part of. Nor does this matter. Sending an empty
        * MDSMap is sufficient for getting the MDS to respawn.
        */
-      MDSMap null_map;
-      null_map.epoch = fsmap.epoch;
-      null_map.compat = fsmap.compat;
-      auto m = make_message<MMDSMap>(mon.monmap->fsid, null_map);
+      auto m = make_message<MMDSMap>(mon.monmap->fsid, MDSMap::create_null_mdsmap());
       mon.send_reply(op, m.detach());
       return true;
     } else {
@@ -713,11 +710,7 @@ bool MDSMonitor::prepare_beacon(MonOpRequestRef op)
        */
       wait_for_finished_proposal(op, new LambdaContext([op, this](int r){
         if (r >= 0) {
-          const auto& fsmap = get_fsmap();
-          MDSMap null_map;
-          null_map.epoch = fsmap.epoch;
-          null_map.compat = fsmap.compat;
-          auto m = make_message<MMDSMap>(mon.monmap->fsid, null_map);
+          auto m = make_message<MMDSMap>(mon.monmap->fsid, MDSMap::create_null_mdsmap());
           mon.send_reply(op, m.detach());
         } else {
           dispatch(op);        // try again
@@ -909,10 +902,7 @@ void MDSMonitor::_updated(MonOpRequestRef op)
 
   if (m->get_state() == MDSMap::STATE_STOPPED) {
     // send the map manually (they're out of the map, so they won't get it automatic)
-    MDSMap null_map;
-    null_map.epoch = fsmap.epoch;
-    null_map.compat = fsmap.compat;
-    auto m = make_message<MMDSMap>(mon.monmap->fsid, null_map);
+    auto m = make_message<MMDSMap>(mon.monmap->fsid, MDSMap::create_null_mdsmap());
     mon.send_reply(op, m.detach());
   } else {
     auto beacon = make_message<MMDSBeacon>(mon.monmap->fsid,
@@ -1788,8 +1778,7 @@ void MDSMonitor::check_sub(Subscription *sub)
 
     // Work out the effective latest epoch
     const MDSMap *mds_map = nullptr;
-    MDSMap null_map;
-    null_map.compat = fsmap.compat;
+    MDSMap null_map = MDSMap::create_null_mdsmap();
     if (fscid == FS_CLUSTER_ID_NONE) {
       // For a client, we should have already dropped out
       ceph_assert(is_mds);