From 2366c191458205ae49f2c12b629e8cfe61fc6e1e Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Wed, 13 Nov 2024 16:42:33 +0100 Subject: [PATCH] mds/MDSMap: un-inline methods to reduce compile times Signed-off-by: Max Kellermann --- src/mds/MDSMap.cc | 122 +++++++++++++++++++++++++++++++++++++++++++++ src/mds/MDSMap.h | 124 ++++++++-------------------------------------- 2 files changed, 144 insertions(+), 102 deletions(-) diff --git a/src/mds/MDSMap.cc b/src/mds/MDSMap.cc index 4376fe9313fa3..59f9c5a4da031 100644 --- a/src/mds/MDSMap.cc +++ b/src/mds/MDSMap.cc @@ -40,6 +40,27 @@ using ceph::Formatter; #define dout_context g_ceph_context #define dout_subsys ceph_subsys_ +const std::map 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::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& 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::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 bits; diff --git a/src/mds/MDSMap.h b/src/mds/MDSMap.h index 05c2a5f67af86..21e76c61fe6d0 100644 --- a/src/mds/MDSMap.h +++ b/src/mds/MDSMap.h @@ -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::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 &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::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& 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 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 flag_display; }; WRITE_CLASS_ENCODER_FEATURES(MDSMap::mds_info_t) WRITE_CLASS_ENCODER_FEATURES(MDSMap) -- 2.47.3