From: Patrick Donnelly Date: Wed, 17 Mar 2021 16:55:04 +0000 (-0700) Subject: mds: add MDSMap method for creating null MDSMap X-Git-Tag: v17.1.0~1237^2~7 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=4a10b6016ff76f80e27574ad2ab40ac5b0266264;p=ceph.git mds: add MDSMap method for creating null MDSMap 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 --- diff --git a/src/mds/MDSMap.h b/src/mds/MDSMap.h index f6ed07577c602..d61552caa43e9 100644 --- a/src/mds/MDSMap.h +++ b/src/mds/MDSMap.h @@ -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::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; } diff --git a/src/mon/MDSMonitor.cc b/src/mon/MDSMonitor.cc index c74ec94ae41ac..2f324fc9b91d4 100644 --- a/src/mon/MDSMonitor.cc +++ b/src/mon/MDSMonitor.cc @@ -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(mon.monmap->fsid, null_map); + auto m = make_message(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(mon.monmap->fsid, null_map); + auto m = make_message(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(mon.monmap->fsid, null_map); + auto m = make_message(mon.monmap->fsid, MDSMap::create_null_mdsmap()); mon.send_reply(op, m.detach()); } else { auto beacon = make_message(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);