}
void md_config_t::diff(
+ const md_config_t *other,
+ map<string, pair<string, string> > *diff,
+ set<string> *unknown)
+{
+ diff_helper(other, diff, unknown, "");
+}
+void md_config_t::diff(
+ const md_config_t *other,
+ map<string, pair<string, string> > *diff,
+ set<string> *unknown, const string& ceph_setting = string(""))
+{
+ diff_helper(other, diff, unknown, ceph_setting);
+}
+
+void md_config_t::diff_helper(
const md_config_t *other,
map<string,pair<string,string> > *diff,
- set<string> *unknown)
+ set<string> *unknown, const string& ceph_setting=string(""))
{
Mutex::Locker l(lock);
+ bool ceph_param_search = !ceph_setting.empty();
char local_buf[4096];
char other_buf[4096];
for (auto& opt: *config_options) {
+ if (ceph_param_search) {
+ if (ceph_setting != opt.name) {
+ continue;
+ }
+ }
memset(local_buf, 0, sizeof(local_buf));
memset(other_buf, 0, sizeof(other_buf));
char *other_val = other_buf;
int err = other->get_val(opt.name, &other_val, sizeof(other_buf));
if (err < 0) {
+ if (ceph_param_search) {
+ continue;
+ }
if (err == -ENOENT) {
unknown->insert(opt.name);
}
if (strcmp(local_val, other_val))
diff->insert(make_pair(opt.name, make_pair(local_val, other_val)));
- }
-}
-
-void md_config_t::diff_setting(const md_config_t *other,
- map<string, pair<string, string>> *diff,
- const string& ceph_setting, bool show_unchanged)
-{
- Mutex::Locker l(lock);
-
- char local_buf[4096];
- char other_buf[4096];
- for (int i = 0; i < NUM_CONFIG_OPTIONS; i++) {
- config_option *opt = &config_optionsp[i];
- std::string ceph_setting_name(opt->name);
- if (ceph_setting != opt->name) {
- continue;
- }
- memset(local_buf, 0, sizeof(local_buf));
- memset(other_buf, 0, sizeof(other_buf));
-
- char *other_val = other_buf;
- int err = other->get_val(opt->name, &other_val, sizeof(other_buf));
- if (err < 0) {
- continue;
- }
-
- char *local_val = local_buf;
- err = _get_val(opt->name, &local_val, sizeof(local_buf));
- if (err != 0) {
- continue;
- }
- if (strcmp(local_val, other_val)) {
- diff->insert(make_pair(ceph_setting, make_pair(local_val, other_val)));
- }
else {
- if (show_unchanged) {
- diff->insert(make_pair(ceph_setting, make_pair(local_val, other_val)));
+ if (ceph_param_search) {
+ diff->insert(make_pair(opt.name, make_pair(local_val, other_val)));
+ break;
}
- }
- break;
- }
-}
+ }
+ }
+}
void md_config_t::complain_about_parse_errors(CephContext *cct)
{
/// dump all config values to a formatter
void show_config(Formatter *f);
- /// obtain a diff between our config values and another md_config_t values
+ /// obtain a diff between our config values and another md_config_t values
void diff(const md_config_t *other,
map<string,pair<string,string> > *diff, set<string> *unknown);
- /// obtain a diff between config values and another md_config_t
+ /// obtain a diff between config values and another md_config_t
/// values for a specific setting.
- void diff_setting(const md_config_t*,
- std::map<std::string, std::pair<std::string, std::string>>*,
- const std::string&, bool show_unchanged = false);
+ void diff(const md_config_t *other,
+ map<string,pair<string,string>> *diff, set<string> *unknown,
+ const string& ceph_setting);
/// print/log warnings/errors from parsing the config
void complain_about_parse_errors(CephContext *cct);
bool expand_meta(std::string &val,
std::ostream *oss) const;
+
+ void diff_helper(const md_config_t *other,
+ map<string, pair<string, string>> *diff,
+ set<string> *unknown, const string &ceph_setting);
+
public: // for global_init
bool early_expand_meta(std::string &val,
std::ostream *oss) const {