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 <sseshasa@redhat.com>
This commit is contained in:
Sridhar Seshasayee 2021-06-30 14:52:50 +05:30
parent 1fca4bdfd4
commit 9438e5a4b6
3 changed files with 16 additions and 0 deletions

View File

@ -1024,6 +1024,16 @@ void md_config_t::get_config_bl(
}
}
std::optional<std::string> 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
{

View File

@ -192,6 +192,9 @@ public:
/// get encoded map<string,string> 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<std::string> 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;

View File

@ -344,6 +344,9 @@ public:
const std::string& get_conf_path() const {
return config.get_conf_path();
}
std::optional<std::string> get_val_default(std::string_view key) {
return config.get_val_default(key);
}
};
}