mgr: get config defaults on session open

Leave them encoded until they are used, since usually we won't use them.
This is about 50k currently.

Signed-off-by: Sage Weil <sage@redhat.com>
This commit is contained in:
Sage Weil 2018-01-05 17:44:56 -06:00
parent ed77b096ec
commit 86cf85e0a2
4 changed files with 14 additions and 0 deletions

View File

@ -34,6 +34,9 @@ public:
// encode map<string,map<int32_t,string>> of current config
bufferlist config_bl;
// encode map<string,string> of compiled-in defaults
bufferlist config_defaults_bl;
void decode_payload() override
{
bufferlist::iterator p = payload.begin();
@ -48,6 +51,7 @@ public:
}
if (header.version >= 3) {
::decode(config_bl, p);
::decode(config_defaults_bl, p);
}
}
@ -61,6 +65,7 @@ public:
encode(daemon_status, payload);
}
::encode(config_bl, payload);
::encode(config_defaults_bl, payload);
}
const char *get_type_name() const override { return "mgropen"; }

View File

@ -395,6 +395,10 @@ bool DaemonServer::handle_open(MMgrOpen *m)
::decode(daemon->config, p);
dout(20) << " got config " << daemon->config << dendl;
}
daemon->config_defaults_bl = m->config_defaults_bl;
daemon->config_defaults.clear();
dout(20) << " got config_defaults_bl " << daemon->config_defaults_bl.length()
<< " bytes" << dendl;
}
if (m->get_connection()->get_peer_type() != entity_name_t::TYPE_CLIENT &&

View File

@ -109,6 +109,10 @@ class DaemonState
// running config
std::map<std::string,std::map<int32_t,std::string>> config;
// compiled-in config defaults (rarely used, so we leave them encoded!)
bufferlist config_defaults_bl;
std::map<std::string,std::string> config_defaults;
// The perf counters received in MMgrReport messages
DaemonPerfCounters perf_counters;

View File

@ -175,6 +175,7 @@ void MgrClient::_send_open()
open->daemon_metadata = daemon_metadata;
}
cct->_conf->get_config_bl(&open->config_bl);
cct->_conf->get_defaults_bl(&open->config_defaults_bl);
session->con->send_message(open);
}
}