]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
mds/MDSMap: un-inline methods to reduce compile times
authorMax Kellermann <max.kellermann@ionos.com>
Wed, 13 Nov 2024 15:42:33 +0000 (16:42 +0100)
committerMax Kellermann <max.kellermann@ionos.com>
Thu, 17 Apr 2025 16:58:31 +0000 (18:58 +0200)
Signed-off-by: Max Kellermann <max.kellermann@ionos.com>
src/mds/MDSMap.cc
src/mds/MDSMap.h

index 4376fe9313fa3227dab5da95433949a3c6865fcd..59f9c5a4da031f29b7841f079d2470e75930ff73 100644 (file)
@@ -40,6 +40,27 @@ using ceph::Formatter;
 #define dout_context g_ceph_context
 #define dout_subsys ceph_subsys_
 
+const std::map<int, std::string> MDSMap::flag_display = {
+  {CEPH_MDSMAP_NOT_JOINABLE, "joinable"}, //inverse for user display
+  {CEPH_MDSMAP_ALLOW_SNAPS, "allow_snaps"},
+  {CEPH_MDSMAP_ALLOW_MULTIMDS_SNAPS, "allow_multimds_snaps"},
+  {CEPH_MDSMAP_ALLOW_STANDBY_REPLAY, "allow_standby_replay"},
+  {CEPH_MDSMAP_REFUSE_CLIENT_SESSION, "refuse_client_session"},
+  {CEPH_MDSMAP_REFUSE_STANDBY_FOR_ANOTHER_FS, "refuse_standby_for_another_fs"},
+  {CEPH_MDSMAP_BALANCE_AUTOMATE, "balance_automate"},
+  {CEPH_MDSMAP_REFERENT_INODES, "allow_referent_inodes"}
+};
+
+MDSMap::MDSMap() noexcept = default;
+MDSMap::~MDSMap() noexcept = default;
+
+MDSMap 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;
+}
+
 // features
 CompatSet MDSMap::get_compat_set_all() {
   CompatSet::FeatureSet feature_compat;
@@ -1044,6 +1065,32 @@ MDSMap::availability_t MDSMap::is_cluster_available() const
   }
 }
 
+MDSMap::DaemonState MDSMap::get_state_gid(mds_gid_t gid) const noexcept {
+  auto it = mds_info.find(gid);
+  if (it == mds_info.end())
+    return STATE_NULL;
+  return it->second.state;
+}
+
+MDSMap::DaemonState MDSMap::get_state(mds_rank_t m) const noexcept {
+  auto it = up.find(m);
+  if (it == up.end())
+    return STATE_NULL;
+  return get_state_gid(it->second);
+}
+
+mds_gid_t MDSMap::get_gid(mds_rank_t r) const noexcept {
+  return up.at(r);
+}
+
+const MDSMap::mds_info_t& MDSMap::get_info(mds_rank_t m) const noexcept {
+  return mds_info.at(up.at(m));
+}
+
+const MDSMap::mds_info_t& MDSMap::get_info_gid(mds_gid_t gid) const noexcept {
+  return mds_info.at(gid);
+}
+
 bool MDSMap::state_transition_valid(DaemonState prev, DaemonState next)
 {
   if (next == prev)
@@ -1107,6 +1154,22 @@ bool MDSMap::check_health(mds_rank_t standby_daemon_count)
   return false;
 }
 
+bool MDSMap::is_data_pool(int64_t poolid) const noexcept {
+  auto p = std::find(data_pools.begin(), data_pools.end(), poolid);
+  if (p == data_pools.end())
+    return false;
+  return true;
+}
+
+const MDSMap::mds_info_t& MDSMap::get_mds_info_gid(mds_gid_t gid) const noexcept {
+  return mds_info.at(gid);
+}
+
+const MDSMap::mds_info_t& MDSMap::get_mds_info(mds_rank_t m) const noexcept {
+  ceph_assert(up.count(m) && mds_info.count(up.at(m)));
+  return mds_info.at(up.at(m));
+}
+
 mds_gid_t MDSMap::find_mds_gid_by_name(std::string_view s) const {
   for (const auto& [gid, info] : mds_info) {
     if (info.name == s) {
@@ -1132,6 +1195,18 @@ void MDSMap::get_up_mds_set(std::set<mds_rank_t>& s) const {
     s.insert(p->first);
 }
 
+void MDSMap::add_data_pool(int64_t poolid) {
+  data_pools.push_back(poolid);
+}
+
+int MDSMap::remove_data_pool(int64_t poolid) {
+  std::vector<int64_t>::iterator p = std::find(data_pools.begin(), data_pools.end(), poolid);
+  if (p == data_pools.end())
+    return -ENOENT;
+  data_pools.erase(p);
+  return 0;
+}
+
 uint64_t MDSMap::get_up_features() const {
   uint64_t features = 0;
   bool first = true;
@@ -1182,6 +1257,23 @@ mds_gid_t MDSMap::get_standby_replay(mds_rank_t r) const {
   return MDS_GID_NONE;
 }
 
+bool MDSMap::is_followable(mds_rank_t r) const {
+  if (auto it1 = up.find(r); it1 != up.end()) {
+    if (auto it2 = mds_info.find(it1->second); it2 != mds_info.end()) {
+      auto& info = it2->second;
+      if (!info.is_degraded() && !has_standby_replay(r)) {
+        return true;
+      }
+    }
+  }
+  return false;
+}
+
+bool MDSMap::is_laggy_gid(mds_gid_t gid) const {
+  auto it = mds_info.find(gid);
+  return it == mds_info.end() ? false : it->second.laggy();
+}
+
 bool MDSMap::is_degraded() const {
   if (!failed.empty() || !damaged.empty())
     return true;
@@ -1192,6 +1284,36 @@ bool MDSMap::is_degraded() const {
   return false;
 }
 
+bool MDSMap::have_inst(mds_rank_t m) const {
+  return up.count(m);
+}
+
+entity_addrvec_t MDSMap::get_addrs(mds_rank_t m) const {
+  return mds_info.at(up.at(m)).get_addrs();
+}
+
+mds_rank_t MDSMap::get_rank_gid(mds_gid_t gid) const {
+  if (mds_info.count(gid)) {
+    return mds_info.at(gid).rank;
+  } else {
+    return MDS_RANK_NONE;
+  }
+}
+
+mds_gid_t MDSMap::get_incarnation(mds_rank_t m) const {
+  auto it = up.find(m);
+  if (it == up.end())
+    return MDS_GID_NONE;
+  return (mds_gid_t)get_inc_gid(it->second);
+}
+
+int MDSMap::get_inc_gid(mds_gid_t gid) const {
+  auto mds_info_entry = mds_info.find(gid);
+  if (mds_info_entry != mds_info.end())
+    return mds_info_entry->second.inc;
+  return -1;
+}
+
 void MDSMap::set_min_compat_client(ceph_release_t version)
 {
   vector<size_t> bits;
index 05c2a5f67af869ac319bc4e21e3eaf8497c155b3..21e76c61fe6d05559d4815e01cebc650ff9b2694 100644 (file)
@@ -179,12 +179,10 @@ public:
   static CompatSet get_compat_set_base(); // pre v0.20
   static CompatSet get_compat_set_v16_2_4(); // pre-v16.2.5 CompatSet in MDS beacon
 
-  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;
-  }
+  MDSMap() noexcept;
+  ~MDSMap() noexcept;
+
+  static MDSMap create_null_mdsmap();
 
   bool get_inline_data_enabled() const { return inline_data_enabled; }
   void set_inline_data_enabled(bool enabled) { inline_data_enabled = enabled; }
@@ -355,25 +353,15 @@ public:
   const std::vector<int64_t> &get_data_pools() const { return data_pools; }
   int64_t get_first_data_pool() const { return *data_pools.begin(); }
   int64_t get_metadata_pool() const { return metadata_pool; }
-  bool is_data_pool(int64_t poolid) const {
-    auto p = std::find(data_pools.begin(), data_pools.end(), poolid);
-    if (p == data_pools.end())
-      return false;
-    return true;
-  }
+  bool is_data_pool(int64_t poolid) const noexcept;
 
   bool pool_in_use(int64_t poolid) const {
     return get_enabled() && (is_data_pool(poolid) || metadata_pool == poolid);
   }
 
   const auto& get_mds_info() const { return mds_info; }
-  const auto& get_mds_info_gid(mds_gid_t gid) const {
-    return mds_info.at(gid);
-  }
-  const mds_info_t& get_mds_info(mds_rank_t m) const {
-    ceph_assert(up.count(m) && mds_info.count(up.at(m)));
-    return mds_info.at(up.at(m));
-  }
+  const mds_info_t& get_mds_info_gid(mds_gid_t gid) const noexcept;
+  const mds_info_t& get_mds_info(mds_rank_t m) const noexcept;
   mds_gid_t find_mds_gid_by_name(std::string_view s) const;
 
   // counts
@@ -401,16 +389,8 @@ public:
   }
   unsigned get_num_mds(int state) const;
   // data pools
-  void add_data_pool(int64_t poolid) {
-    data_pools.push_back(poolid);
-  }
-  int remove_data_pool(int64_t poolid) {
-    std::vector<int64_t>::iterator p = std::find(data_pools.begin(), data_pools.end(), poolid);
-    if (p == data_pools.end())
-      return -ENOENT;
-    data_pools.erase(p);
-    return 0;
-  }
+  void add_data_pool(int64_t poolid);
+  int remove_data_pool(int64_t poolid);
 
   // sets
   void get_mds_set(std::set<mds_rank_t>& s) const {
@@ -503,32 +483,16 @@ public:
   /**
    * Get MDS daemon status by GID
    */
-  auto get_state_gid(mds_gid_t gid) const {
-    auto it = mds_info.find(gid);
-    if (it == mds_info.end())
-      return STATE_NULL;
-    return it->second.state;
-  }
+  MDSMap::DaemonState get_state_gid(mds_gid_t gid) const noexcept;
 
   /**
    * Get MDS rank state if the rank is up, else STATE_NULL
    */
-  auto get_state(mds_rank_t m) const {
-    auto it = up.find(m);
-    if (it == up.end())
-      return STATE_NULL;
-    return get_state_gid(it->second);
-  }
+  MDSMap::DaemonState get_state(mds_rank_t m) const noexcept;
 
-  auto get_gid(mds_rank_t r) const {
-    return up.at(r);
-  }
-  const auto& get_info(mds_rank_t m) const {
-    return mds_info.at(up.at(m));
-  }
-  const auto& get_info_gid(mds_gid_t gid) const {
-    return mds_info.at(gid);
-  }
+  mds_gid_t get_gid(mds_rank_t r) const noexcept;
+  const mds_info_t& get_info(mds_rank_t m) const noexcept;
+  const mds_info_t& get_info_gid(mds_gid_t gid) const noexcept;
 
   bool is_boot(mds_rank_t m) const { return get_state(m) == STATE_BOOT; }
   bool is_bootstrapping(mds_rank_t m) const {
@@ -555,22 +519,8 @@ public:
     return get_standby_replay(r) != MDS_GID_NONE;
   }
 
-  bool is_followable(mds_rank_t r) const {
-    if (auto it1 = up.find(r); it1 != up.end()) {
-      if (auto it2 = mds_info.find(it1->second); it2 != mds_info.end()) {
-        auto& info = it2->second;
-        if (!info.is_degraded() && !has_standby_replay(r)) {
-          return true;
-        }
-      }
-    }
-    return false;
-  }
-
-  bool is_laggy_gid(mds_gid_t gid) const {
-    auto it = mds_info.find(gid);
-    return it == mds_info.end() ? false : it->second.laggy();
-  }
+  bool is_followable(mds_rank_t r) const;
+  bool is_laggy_gid(mds_gid_t gid) const;
 
   // degraded = some recovery in process.  fixes active membership and
   // recovery_set.
@@ -605,42 +555,21 @@ public:
    * an MDS daemon's entity_inst_t associated
    * with it.
    */
-  bool have_inst(mds_rank_t m) const {
-    return up.count(m);
-  }
+  bool have_inst(mds_rank_t m) const;
 
   /**
    * Get the MDS daemon entity_inst_t for a rank
    * known to be up.
    */
-  entity_addrvec_t get_addrs(mds_rank_t m) const {
-    return mds_info.at(up.at(m)).get_addrs();
-  }
+  entity_addrvec_t get_addrs(mds_rank_t m) const;
 
-  mds_rank_t get_rank_gid(mds_gid_t gid) const {
-    if (mds_info.count(gid)) {
-      return mds_info.at(gid).rank;
-    } else {
-      return MDS_RANK_NONE;
-    }
-  }
+  mds_rank_t get_rank_gid(mds_gid_t gid) const;
 
   /**
    * Get MDS rank incarnation if the rank is up, else -1
    */
-  mds_gid_t get_incarnation(mds_rank_t m) const {
-    auto it = up.find(m);
-    if (it == up.end())
-      return MDS_GID_NONE;
-    return (mds_gid_t)get_inc_gid(it->second);
-  }
-
-  int get_inc_gid(mds_gid_t gid) const {
-    auto mds_info_entry = mds_info.find(gid);
-    if (mds_info_entry != mds_info.end())
-      return mds_info_entry->second.inc;
-    return -1;
-  }
+  mds_gid_t get_incarnation(mds_rank_t m) const;
+  int get_inc_gid(mds_gid_t gid) const;
   void encode(ceph::buffer::list& bl, uint64_t features) const;
   void decode(ceph::buffer::list::const_iterator& p);
   void decode(const ceph::buffer::list& bl) {
@@ -721,16 +650,7 @@ protected:
   bool inline_data_enabled = false;
 
 private:
-  inline static const std::map<int, std::string> flag_display = {
-    {CEPH_MDSMAP_NOT_JOINABLE, "joinable"}, //inverse for user display
-    {CEPH_MDSMAP_ALLOW_SNAPS, "allow_snaps"},
-    {CEPH_MDSMAP_ALLOW_MULTIMDS_SNAPS, "allow_multimds_snaps"},
-    {CEPH_MDSMAP_ALLOW_STANDBY_REPLAY, "allow_standby_replay"},
-    {CEPH_MDSMAP_REFUSE_CLIENT_SESSION, "refuse_client_session"},
-    {CEPH_MDSMAP_REFUSE_STANDBY_FOR_ANOTHER_FS, "refuse_standby_for_another_fs"},
-    {CEPH_MDSMAP_BALANCE_AUTOMATE, "balance_automate"},
-    {CEPH_MDSMAP_REFERENT_INODES, "allow_referent_inodes"}
-  };
+  static const std::map<int, std::string> flag_display;
 };
 WRITE_CLASS_ENCODER_FEATURES(MDSMap::mds_info_t)
 WRITE_CLASS_ENCODER_FEATURES(MDSMap)