From 4c9e142b7715abd29d6bffe7bec435cbd0d88aa4 Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Sun, 25 Aug 2019 12:06:51 +0800 Subject: [PATCH] osd: use scoped enum for pg_pool_t::pg_autoscale_mode for better readability Signed-off-by: Kefu Chai --- src/mon/OSDMonitor.cc | 16 +++++++++------- src/osd/OSDMap.cc | 10 +++++++--- src/osd/osd_types.cc | 6 +++--- src/osd/osd_types.h | 30 ++++++++++++++++-------------- 4 files changed, 35 insertions(+), 27 deletions(-) diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 7bbc305dce6..1289ec1a039 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -7780,10 +7780,12 @@ int OSDMonitor::prepare_new_pool(string& name, pi->expected_num_objects = expected_num_objects; pi->object_hash = CEPH_STR_HASH_RJENKINS; - { - auto m = pg_pool_t::get_pg_autoscale_mode_by_name( - g_conf().get_val("osd_pool_default_pg_autoscale_mode")); - pi->pg_autoscale_mode = m >= 0 ? m : 0; + if (auto m = pg_pool_t::get_pg_autoscale_mode_by_name( + g_conf().get_val("osd_pool_default_pg_autoscale_mode")); + m != pg_pool_t::pg_autoscale_mode_t::UNKNOWN) { + pi->pg_autoscale_mode = m; + } else { + pi->pg_autoscale_mode = pg_pool_t::pg_autoscale_mode_t::OFF; } auto max = g_conf().get_val("mon_osd_max_initial_pgs"); pi->set_pg_num( @@ -8112,8 +8114,8 @@ int OSDMonitor::prepare_command_pool_set(const cmdmap_t& cmdmap, p.set_pgp_num_target(n); } } else if (var == "pg_autoscale_mode") { - n = pg_pool_t::get_pg_autoscale_mode_by_name(val); - if (n < 0) { + auto m = pg_pool_t::get_pg_autoscale_mode_by_name(val); + if (m == pg_pool_t::pg_autoscale_mode_t::UNKNOWN) { ss << "specified invalid mode " << val; return -EINVAL; } @@ -8121,7 +8123,7 @@ int OSDMonitor::prepare_command_pool_set(const cmdmap_t& cmdmap, ss << "must set require_osd_release to nautilus or later before setting pg_autoscale_mode"; return -EINVAL; } - p.pg_autoscale_mode = n; + p.pg_autoscale_mode = m; } else if (var == "crush_rule") { int id = osdmap.crush->get_rule_id(val); if (id == -ENOENT) { diff --git a/src/osd/OSDMap.cc b/src/osd/OSDMap.cc index 3982dae9827..4e0b7adc609 100644 --- a/src/osd/OSDMap.cc +++ b/src/osd/OSDMap.cc @@ -4133,9 +4133,13 @@ int OSDMap::build_simple_optioned(CephContext *cct, epoch_t e, uuid_d &fsid, pools[pool].last_change = epoch; pools[pool].application_metadata.insert( {pg_pool_t::APPLICATION_NAME_RBD, {}}); - auto m = pg_pool_t::get_pg_autoscale_mode_by_name( - cct->_conf.get_val("osd_pool_default_pg_autoscale_mode")); - pools[pool].pg_autoscale_mode = m >= 0 ? m : 0; + if (auto m = pg_pool_t::get_pg_autoscale_mode_by_name( + cct->_conf.get_val("osd_pool_default_pg_autoscale_mode")); + m != pg_pool_t::pg_autoscale_mode_t::UNKNOWN) { + pools[pool].pg_autoscale_mode = m; + } else { + pools[pool].pg_autoscale_mode = pg_pool_t::pg_autoscale_mode_t::OFF; + } pool_name[pool] = plname; name_pool[plname] = pool; } diff --git a/src/osd/osd_types.cc b/src/osd/osd_types.cc index e2bcb31e314..90e3bde2ffc 100644 --- a/src/osd/osd_types.cc +++ b/src/osd/osd_types.cc @@ -2064,7 +2064,7 @@ void pg_pool_t::decode(ceph::buffer::list::const_iterator& bl) pgp_num_target = pgp_num; pg_num_pending = pg_num; last_force_op_resend = last_force_op_resend_prenautilus; - pg_autoscale_mode = PG_AUTOSCALE_MODE_WARN; // default to warn on upgrade + pg_autoscale_mode = pg_autoscale_mode_t::WARN; // default to warn on upgrade } DECODE_FINISH(bl); calc_pg_masks(); @@ -2147,7 +2147,7 @@ ostream& operator<<(ostream& out, const pg_pool_t& p) if (p.get_type_name() == "erasure") { out << " profile " << p.erasure_code_profile; } - out << " size " << p.get_size() + out << " size " << p.get_size() << " min_size " << p.get_min_size() << " crush_rule " << p.get_crush_rule() << " object_hash " << p.get_object_hash_name() @@ -2162,7 +2162,7 @@ ostream& operator<<(ostream& out, const pg_pool_t& p) if (p.get_pg_num_pending() != p.get_pg_num()) { out << " pg_num_pending " << p.get_pg_num_pending(); } - if (p.pg_autoscale_mode) { + if (p.pg_autoscale_mode != pg_pool_t::pg_autoscale_mode_t::UNKNOWN) { out << " autoscale_mode " << p.get_pg_autoscale_mode_name(p.pg_autoscale_mode); } out << " last_change " << p.get_last_change(); diff --git a/src/osd/osd_types.h b/src/osd/osd_types.h index 8a4241a88fc..14edf5df8fa 100644 --- a/src/osd/osd_types.h +++ b/src/osd/osd_types.h @@ -1323,30 +1323,31 @@ struct pg_pool_t { } } - enum { - PG_AUTOSCALE_MODE_OFF = 0, - PG_AUTOSCALE_MODE_WARN = 1, - PG_AUTOSCALE_MODE_ON = 2, + enum class pg_autoscale_mode_t : uint8_t { + OFF = 0, + WARN = 1, + ON = 2, + UNKNOWN = UINT8_MAX, }; - static const char *get_pg_autoscale_mode_name(int m) { + static const char *get_pg_autoscale_mode_name(pg_autoscale_mode_t m) { switch (m) { - case PG_AUTOSCALE_MODE_OFF: return "off"; - case PG_AUTOSCALE_MODE_ON: return "on"; - case PG_AUTOSCALE_MODE_WARN: return "warn"; + case pg_autoscale_mode_t::OFF: return "off"; + case pg_autoscale_mode_t::ON: return "on"; + case pg_autoscale_mode_t::WARN: return "warn"; default: return "???"; } } - static int get_pg_autoscale_mode_by_name(const std::string& m) { + static pg_autoscale_mode_t get_pg_autoscale_mode_by_name(const std::string& m) { if (m == "off") { - return PG_AUTOSCALE_MODE_OFF; + return pg_autoscale_mode_t::OFF; } if (m == "warn") { - return PG_AUTOSCALE_MODE_WARN; + return pg_autoscale_mode_t::WARN; } if (m == "on") { - return PG_AUTOSCALE_MODE_ON; + return pg_autoscale_mode_t::ON; } - return -1; + return pg_autoscale_mode_t::UNKNOWN; } utime_t create_time; @@ -1355,7 +1356,8 @@ struct pg_pool_t { __u8 size = 0, min_size = 0; ///< number of osds in each pg __u8 crush_rule = 0; ///< crush placement rule __u8 object_hash = 0; ///< hash mapping object name to ps - __u8 pg_autoscale_mode; ///< PG_AUTOSCALE_MODE_ + pg_autoscale_mode_t pg_autoscale_mode; + private: __u32 pg_num = 0, pgp_num = 0; ///< number of pgs __u32 pg_num_pending = 0; ///< pg_num we are about to merge down to -- 2.39.5