*bl = defaults_bl;
}
-void md_config_t::get_config_bl(bufferlist *bl)
+void md_config_t::get_config_bl(
+ uint64_t have_version,
+ bufferlist *bl,
+ uint64_t *got_version)
{
Mutex::Locker l(lock);
if (values_bl.length() == 0) {
encode(n, values_bl);
values_bl.claim_append(bl);
encode(ignored_mon_values, values_bl);
+ ++values_bl_version;
+ }
+ if (have_version != values_bl_version) {
+ *bl = values_bl;
+ *got_version = values_bl_version;
}
- *bl = values_bl;
}
int md_config_t::get_val(const std::string &key, char **buf, int len) const
/// encoded, cached copy of of values + ignored_mon_values
bufferlist values_bl;
+ /// version for values_bl; increments each time there is a change
+ uint64_t values_bl_version = 0;
+
/// encoded copy of defaults (map<string,string>)
bufferlist defaults_bl;
int rm_val(const std::string& key);
/// get encoded map<string,map<int32_t,string>> of entire config
- void get_config_bl(bufferlist *bl);
+ void get_config_bl(uint64_t have_version,
+ bufferlist *bl,
+ uint64_t *got_version);
/// get encoded map<string,string> of compiled-in defaults
void get_defaults_bl(bufferlist *bl);
open->service_daemon = service_daemon;
open->daemon_metadata = daemon_metadata;
}
- cct->_conf->get_config_bl(&open->config_bl);
+ cct->_conf->get_config_bl(0, &open->config_bl, &last_config_bl_version);
cct->_conf->get_defaults_bl(&open->config_defaults_bl);
session->con->send_message(open);
}
report->osd_health_metrics = std::move(osd_health_metrics);
- cct->_conf->get_config_bl(&report->config_bl);
+ cct->_conf->get_config_bl(last_config_bl_version, &report->config_bl,
+ &last_config_bl_version);
session->con->send_message(report);
}
utime_t last_connect_attempt;
+ uint64_t last_config_bl_version = 0;
+
Context *report_callback = nullptr;
Context *connect_retry_callback = nullptr;