From: Sridhar Seshasayee Date: Wed, 30 Jun 2021 09:22:50 +0000 (+0530) Subject: common/config: Add methods to return the default value of a config option X-Git-Tag: v16.2.7~110^2~6 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=12b6d42770032b6c53737368cad2f0427c56c1ed;p=ceph.git common/config: Add methods to return the default value of a config option Add wrapper method "get_val_default()" to the ConfigProxy class that takes the config option key to search. This method in-turn calls another method with the same name added to md_config_t class that does the actual work of searching for the config option. If the option is valid, _get_val_default() is used to get the default value. Otherwise, the wrapper method returns std::nullopt. Fixes: https://tracker.ceph.com/issues/51464 Signed-off-by: Sridhar Seshasayee (cherry picked from commit 9438e5a4b6b16e7ca3276c94c05ec73541690c10) --- diff --git a/src/common/config.cc b/src/common/config.cc index 491685867667..e15c99e7d09e 100644 --- a/src/common/config.cc +++ b/src/common/config.cc @@ -1029,6 +1029,16 @@ void md_config_t::get_config_bl( } } +std::optional md_config_t::get_val_default(std::string_view key) +{ + std::string val; + const Option *opt = find_option(key); + if (opt && (conf_stringify(_get_val_default(*opt), &val) == 0)) { + return std::make_optional(std::move(val)); + } + return std::nullopt; +} + int md_config_t::get_val(const ConfigValues& values, const std::string_view key, char **buf, int len) const { diff --git a/src/common/config.h b/src/common/config.h index ef7d5b34fdc6..989f5029e127 100644 --- a/src/common/config.h +++ b/src/common/config.h @@ -191,6 +191,9 @@ public: /// get encoded map of compiled-in defaults void get_defaults_bl(const ConfigValues& values, ceph::buffer::list *bl); + /// Get the default value of a configuration option + std::optional get_val_default(std::string_view key); + // Get a configuration value. // No metavariables will be returned (they will have already been expanded) int get_val(const ConfigValues& values, const std::string_view key, char **buf, int len) const; diff --git a/src/common/config_proxy.h b/src/common/config_proxy.h index cb30a2d7f1fa..e43a7c6dd67c 100644 --- a/src/common/config_proxy.h +++ b/src/common/config_proxy.h @@ -344,6 +344,9 @@ public: const std::string& get_conf_path() const { return config.get_conf_path(); } + std::optional get_val_default(std::string_view key) { + return config.get_val_default(key); + } }; }