Skip to content

Commit 2366c19

Browse files
committed
mds/MDSMap: un-inline methods to reduce compile times
Signed-off-by: Max Kellermann <[email protected]>
1 parent 8e96db1 commit 2366c19

File tree

2 files changed

+144
-102
lines changed

2 files changed

+144
-102
lines changed

src/mds/MDSMap.cc

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,27 @@ using ceph::Formatter;
4040
#define dout_context g_ceph_context
4141
#define dout_subsys ceph_subsys_
4242

43+
const std::map<int, std::string> MDSMap::flag_display = {
44+
{CEPH_MDSMAP_NOT_JOINABLE, "joinable"}, //inverse for user display
45+
{CEPH_MDSMAP_ALLOW_SNAPS, "allow_snaps"},
46+
{CEPH_MDSMAP_ALLOW_MULTIMDS_SNAPS, "allow_multimds_snaps"},
47+
{CEPH_MDSMAP_ALLOW_STANDBY_REPLAY, "allow_standby_replay"},
48+
{CEPH_MDSMAP_REFUSE_CLIENT_SESSION, "refuse_client_session"},
49+
{CEPH_MDSMAP_REFUSE_STANDBY_FOR_ANOTHER_FS, "refuse_standby_for_another_fs"},
50+
{CEPH_MDSMAP_BALANCE_AUTOMATE, "balance_automate"},
51+
{CEPH_MDSMAP_REFERENT_INODES, "allow_referent_inodes"}
52+
};
53+
54+
MDSMap::MDSMap() noexcept = default;
55+
MDSMap::~MDSMap() noexcept = default;
56+
57+
MDSMap MDSMap::create_null_mdsmap() {
58+
MDSMap null_map;
59+
/* Use the largest epoch so it's always bigger than whatever the MDS has. */
60+
null_map.epoch = std::numeric_limits<decltype(epoch)>::max();
61+
return null_map;
62+
}
63+
4364
// features
4465
CompatSet MDSMap::get_compat_set_all() {
4566
CompatSet::FeatureSet feature_compat;
@@ -1044,6 +1065,32 @@ MDSMap::availability_t MDSMap::is_cluster_available() const
10441065
}
10451066
}
10461067

1068+
MDSMap::DaemonState MDSMap::get_state_gid(mds_gid_t gid) const noexcept {
1069+
auto it = mds_info.find(gid);
1070+
if (it == mds_info.end())
1071+
return STATE_NULL;
1072+
return it->second.state;
1073+
}
1074+
1075+
MDSMap::DaemonState MDSMap::get_state(mds_rank_t m) const noexcept {
1076+
auto it = up.find(m);
1077+
if (it == up.end())
1078+
return STATE_NULL;
1079+
return get_state_gid(it->second);
1080+
}
1081+
1082+
mds_gid_t MDSMap::get_gid(mds_rank_t r) const noexcept {
1083+
return up.at(r);
1084+
}
1085+
1086+
const MDSMap::mds_info_t& MDSMap::get_info(mds_rank_t m) const noexcept {
1087+
return mds_info.at(up.at(m));
1088+
}
1089+
1090+
const MDSMap::mds_info_t& MDSMap::get_info_gid(mds_gid_t gid) const noexcept {
1091+
return mds_info.at(gid);
1092+
}
1093+
10471094
bool MDSMap::state_transition_valid(DaemonState prev, DaemonState next)
10481095
{
10491096
if (next == prev)
@@ -1107,6 +1154,22 @@ bool MDSMap::check_health(mds_rank_t standby_daemon_count)
11071154
return false;
11081155
}
11091156

1157+
bool MDSMap::is_data_pool(int64_t poolid) const noexcept {
1158+
auto p = std::find(data_pools.begin(), data_pools.end(), poolid);
1159+
if (p == data_pools.end())
1160+
return false;
1161+
return true;
1162+
}
1163+
1164+
const MDSMap::mds_info_t& MDSMap::get_mds_info_gid(mds_gid_t gid) const noexcept {
1165+
return mds_info.at(gid);
1166+
}
1167+
1168+
const MDSMap::mds_info_t& MDSMap::get_mds_info(mds_rank_t m) const noexcept {
1169+
ceph_assert(up.count(m) && mds_info.count(up.at(m)));
1170+
return mds_info.at(up.at(m));
1171+
}
1172+
11101173
mds_gid_t MDSMap::find_mds_gid_by_name(std::string_view s) const {
11111174
for (const auto& [gid, info] : mds_info) {
11121175
if (info.name == s) {
@@ -1132,6 +1195,18 @@ void MDSMap::get_up_mds_set(std::set<mds_rank_t>& s) const {
11321195
s.insert(p->first);
11331196
}
11341197

1198+
void MDSMap::add_data_pool(int64_t poolid) {
1199+
data_pools.push_back(poolid);
1200+
}
1201+
1202+
int MDSMap::remove_data_pool(int64_t poolid) {
1203+
std::vector<int64_t>::iterator p = std::find(data_pools.begin(), data_pools.end(), poolid);
1204+
if (p == data_pools.end())
1205+
return -ENOENT;
1206+
data_pools.erase(p);
1207+
return 0;
1208+
}
1209+
11351210
uint64_t MDSMap::get_up_features() const {
11361211
uint64_t features = 0;
11371212
bool first = true;
@@ -1182,6 +1257,23 @@ mds_gid_t MDSMap::get_standby_replay(mds_rank_t r) const {
11821257
return MDS_GID_NONE;
11831258
}
11841259

1260+
bool MDSMap::is_followable(mds_rank_t r) const {
1261+
if (auto it1 = up.find(r); it1 != up.end()) {
1262+
if (auto it2 = mds_info.find(it1->second); it2 != mds_info.end()) {
1263+
auto& info = it2->second;
1264+
if (!info.is_degraded() && !has_standby_replay(r)) {
1265+
return true;
1266+
}
1267+
}
1268+
}
1269+
return false;
1270+
}
1271+
1272+
bool MDSMap::is_laggy_gid(mds_gid_t gid) const {
1273+
auto it = mds_info.find(gid);
1274+
return it == mds_info.end() ? false : it->second.laggy();
1275+
}
1276+
11851277
bool MDSMap::is_degraded() const {
11861278
if (!failed.empty() || !damaged.empty())
11871279
return true;
@@ -1192,6 +1284,36 @@ bool MDSMap::is_degraded() const {
11921284
return false;
11931285
}
11941286

1287+
bool MDSMap::have_inst(mds_rank_t m) const {
1288+
return up.count(m);
1289+
}
1290+
1291+
entity_addrvec_t MDSMap::get_addrs(mds_rank_t m) const {
1292+
return mds_info.at(up.at(m)).get_addrs();
1293+
}
1294+
1295+
mds_rank_t MDSMap::get_rank_gid(mds_gid_t gid) const {
1296+
if (mds_info.count(gid)) {
1297+
return mds_info.at(gid).rank;
1298+
} else {
1299+
return MDS_RANK_NONE;
1300+
}
1301+
}
1302+
1303+
mds_gid_t MDSMap::get_incarnation(mds_rank_t m) const {
1304+
auto it = up.find(m);
1305+
if (it == up.end())
1306+
return MDS_GID_NONE;
1307+
return (mds_gid_t)get_inc_gid(it->second);
1308+
}
1309+
1310+
int MDSMap::get_inc_gid(mds_gid_t gid) const {
1311+
auto mds_info_entry = mds_info.find(gid);
1312+
if (mds_info_entry != mds_info.end())
1313+
return mds_info_entry->second.inc;
1314+
return -1;
1315+
}
1316+
11951317
void MDSMap::set_min_compat_client(ceph_release_t version)
11961318
{
11971319
vector<size_t> bits;

src/mds/MDSMap.h

Lines changed: 22 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -179,12 +179,10 @@ class MDSMap {
179179
static CompatSet get_compat_set_base(); // pre v0.20
180180
static CompatSet get_compat_set_v16_2_4(); // pre-v16.2.5 CompatSet in MDS beacon
181181

182-
static MDSMap create_null_mdsmap() {
183-
MDSMap null_map;
184-
/* Use the largest epoch so it's always bigger than whatever the MDS has. */
185-
null_map.epoch = std::numeric_limits<decltype(epoch)>::max();
186-
return null_map;
187-
}
182+
MDSMap() noexcept;
183+
~MDSMap() noexcept;
184+
185+
static MDSMap create_null_mdsmap();
188186

189187
bool get_inline_data_enabled() const { return inline_data_enabled; }
190188
void set_inline_data_enabled(bool enabled) { inline_data_enabled = enabled; }
@@ -355,25 +353,15 @@ class MDSMap {
355353
const std::vector<int64_t> &get_data_pools() const { return data_pools; }
356354
int64_t get_first_data_pool() const { return *data_pools.begin(); }
357355
int64_t get_metadata_pool() const { return metadata_pool; }
358-
bool is_data_pool(int64_t poolid) const {
359-
auto p = std::find(data_pools.begin(), data_pools.end(), poolid);
360-
if (p == data_pools.end())
361-
return false;
362-
return true;
363-
}
356+
bool is_data_pool(int64_t poolid) const noexcept;
364357

365358
bool pool_in_use(int64_t poolid) const {
366359
return get_enabled() && (is_data_pool(poolid) || metadata_pool == poolid);
367360
}
368361

369362
const auto& get_mds_info() const { return mds_info; }
370-
const auto& get_mds_info_gid(mds_gid_t gid) const {
371-
return mds_info.at(gid);
372-
}
373-
const mds_info_t& get_mds_info(mds_rank_t m) const {
374-
ceph_assert(up.count(m) && mds_info.count(up.at(m)));
375-
return mds_info.at(up.at(m));
376-
}
363+
const mds_info_t& get_mds_info_gid(mds_gid_t gid) const noexcept;
364+
const mds_info_t& get_mds_info(mds_rank_t m) const noexcept;
377365
mds_gid_t find_mds_gid_by_name(std::string_view s) const;
378366

379367
// counts
@@ -401,16 +389,8 @@ class MDSMap {
401389
}
402390
unsigned get_num_mds(int state) const;
403391
// data pools
404-
void add_data_pool(int64_t poolid) {
405-
data_pools.push_back(poolid);
406-
}
407-
int remove_data_pool(int64_t poolid) {
408-
std::vector<int64_t>::iterator p = std::find(data_pools.begin(), data_pools.end(), poolid);
409-
if (p == data_pools.end())
410-
return -ENOENT;
411-
data_pools.erase(p);
412-
return 0;
413-
}
392+
void add_data_pool(int64_t poolid);
393+
int remove_data_pool(int64_t poolid);
414394

415395
// sets
416396
void get_mds_set(std::set<mds_rank_t>& s) const {
@@ -503,32 +483,16 @@ class MDSMap {
503483
/**
504484
* Get MDS daemon status by GID
505485
*/
506-
auto get_state_gid(mds_gid_t gid) const {
507-
auto it = mds_info.find(gid);
508-
if (it == mds_info.end())
509-
return STATE_NULL;
510-
return it->second.state;
511-
}
486+
MDSMap::DaemonState get_state_gid(mds_gid_t gid) const noexcept;
512487

513488
/**
514489
* Get MDS rank state if the rank is up, else STATE_NULL
515490
*/
516-
auto get_state(mds_rank_t m) const {
517-
auto it = up.find(m);
518-
if (it == up.end())
519-
return STATE_NULL;
520-
return get_state_gid(it->second);
521-
}
491+
MDSMap::DaemonState get_state(mds_rank_t m) const noexcept;
522492

523-
auto get_gid(mds_rank_t r) const {
524-
return up.at(r);
525-
}
526-
const auto& get_info(mds_rank_t m) const {
527-
return mds_info.at(up.at(m));
528-
}
529-
const auto& get_info_gid(mds_gid_t gid) const {
530-
return mds_info.at(gid);
531-
}
493+
mds_gid_t get_gid(mds_rank_t r) const noexcept;
494+
const mds_info_t& get_info(mds_rank_t m) const noexcept;
495+
const mds_info_t& get_info_gid(mds_gid_t gid) const noexcept;
532496

533497
bool is_boot(mds_rank_t m) const { return get_state(m) == STATE_BOOT; }
534498
bool is_bootstrapping(mds_rank_t m) const {
@@ -555,22 +519,8 @@ class MDSMap {
555519
return get_standby_replay(r) != MDS_GID_NONE;
556520
}
557521

558-
bool is_followable(mds_rank_t r) const {
559-
if (auto it1 = up.find(r); it1 != up.end()) {
560-
if (auto it2 = mds_info.find(it1->second); it2 != mds_info.end()) {
561-
auto& info = it2->second;
562-
if (!info.is_degraded() && !has_standby_replay(r)) {
563-
return true;
564-
}
565-
}
566-
}
567-
return false;
568-
}
569-
570-
bool is_laggy_gid(mds_gid_t gid) const {
571-
auto it = mds_info.find(gid);
572-
return it == mds_info.end() ? false : it->second.laggy();
573-
}
522+
bool is_followable(mds_rank_t r) const;
523+
bool is_laggy_gid(mds_gid_t gid) const;
574524

575525
// degraded = some recovery in process. fixes active membership and
576526
// recovery_set.
@@ -605,42 +555,21 @@ class MDSMap {
605555
* an MDS daemon's entity_inst_t associated
606556
* with it.
607557
*/
608-
bool have_inst(mds_rank_t m) const {
609-
return up.count(m);
610-
}
558+
bool have_inst(mds_rank_t m) const;
611559

612560
/**
613561
* Get the MDS daemon entity_inst_t for a rank
614562
* known to be up.
615563
*/
616-
entity_addrvec_t get_addrs(mds_rank_t m) const {
617-
return mds_info.at(up.at(m)).get_addrs();
618-
}
564+
entity_addrvec_t get_addrs(mds_rank_t m) const;
619565

620-
mds_rank_t get_rank_gid(mds_gid_t gid) const {
621-
if (mds_info.count(gid)) {
622-
return mds_info.at(gid).rank;
623-
} else {
624-
return MDS_RANK_NONE;
625-
}
626-
}
566+
mds_rank_t get_rank_gid(mds_gid_t gid) const;
627567

628568
/**
629569
* Get MDS rank incarnation if the rank is up, else -1
630570
*/
631-
mds_gid_t get_incarnation(mds_rank_t m) const {
632-
auto it = up.find(m);
633-
if (it == up.end())
634-
return MDS_GID_NONE;
635-
return (mds_gid_t)get_inc_gid(it->second);
636-
}
637-
638-
int get_inc_gid(mds_gid_t gid) const {
639-
auto mds_info_entry = mds_info.find(gid);
640-
if (mds_info_entry != mds_info.end())
641-
return mds_info_entry->second.inc;
642-
return -1;
643-
}
571+
mds_gid_t get_incarnation(mds_rank_t m) const;
572+
int get_inc_gid(mds_gid_t gid) const;
644573
void encode(ceph::buffer::list& bl, uint64_t features) const;
645574
void decode(ceph::buffer::list::const_iterator& p);
646575
void decode(const ceph::buffer::list& bl) {
@@ -721,16 +650,7 @@ class MDSMap {
721650
bool inline_data_enabled = false;
722651

723652
private:
724-
inline static const std::map<int, std::string> flag_display = {
725-
{CEPH_MDSMAP_NOT_JOINABLE, "joinable"}, //inverse for user display
726-
{CEPH_MDSMAP_ALLOW_SNAPS, "allow_snaps"},
727-
{CEPH_MDSMAP_ALLOW_MULTIMDS_SNAPS, "allow_multimds_snaps"},
728-
{CEPH_MDSMAP_ALLOW_STANDBY_REPLAY, "allow_standby_replay"},
729-
{CEPH_MDSMAP_REFUSE_CLIENT_SESSION, "refuse_client_session"},
730-
{CEPH_MDSMAP_REFUSE_STANDBY_FOR_ANOTHER_FS, "refuse_standby_for_another_fs"},
731-
{CEPH_MDSMAP_BALANCE_AUTOMATE, "balance_automate"},
732-
{CEPH_MDSMAP_REFERENT_INODES, "allow_referent_inodes"}
733-
};
653+
static const std::map<int, std::string> flag_display;
734654
};
735655
WRITE_CLASS_ENCODER_FEATURES(MDSMap::mds_info_t)
736656
WRITE_CLASS_ENCODER_FEATURES(MDSMap)

0 commit comments

Comments
 (0)