f->close_section();
}
-void ConfigMap::generate_entity_map(
+std::map<std::string,std::string>
+ConfigMap::generate_entity_map(
const EntityName& name,
const map<std::string,std::string>& crush_location,
const CrushWrapper *crush,
const std::string& device_class,
- std::map<std::string,std::string> *out,
std::map<std::string,pair<std::string,const MaskedOption*>> *src)
{
// global, then by type, then by full name.
if (q != by_id.end()) {
sections.push_back(make_pair(name.to_str(), &q->second));
}
+ std::map<std::string,std::string,std::less<>> out;
MaskedOption *prev = nullptr;
for (auto s : sections) {
for (auto& i : s.second->options) {
prev->get_precision(crush) < o.get_precision(crush)) {
continue;
}
- (*out)[i.first] = o.raw_value;
+ out[i.first] = o.raw_value;
if (src) {
(*src)[i.first] = make_pair(s.first, &o);
}
prev = &o;
}
}
+ return out;
}
bool ConfigMap::parse_mask(
by_id.clear();
}
void dump(Formatter *f) const;
- void generate_entity_map(
+ std::map<std::string,std::string> generate_entity_map(
const EntityName& name,
const map<std::string,std::string>& crush_location,
const CrushWrapper *crush,
const std::string& device_class,
- std::map<std::string,std::string> *out,
std::map<std::string,pair<std::string,const MaskedOption*>> *src=0);
static bool parse_mask(
<< " class " << device_class << dendl;
}
- std::map<std::string,std::string> config;
std::map<std::string,pair<std::string,const MaskedOption*>> src;
- config_map.generate_entity_map(
+ auto config = config_map.generate_entity_map(
entity,
crush_location,
mon->osdmon()->osdmap.crush.get(),
device_class,
- &config, &src);
+ &src);
if (cmd_getval(g_ceph_context, cmdmap, "key", name)) {
// get a single value
const OSDMap& osdmap = mon->osdmon()->osdmap;
map<string,string> crush_location;
osdmap.crush->get_full_location(m->host, &crush_location);
- map<string,string> out;
- config_map.generate_entity_map(
+ auto out = config_map.generate_entity_map(
m->name,
crush_location,
osdmap.crush.get(),
- m->device_class,
- &out);
+ m->device_class);
dout(20) << " config is " << out << dendl;
m->get_connection()->send_message(new MConfig(out));
}
const OSDMap& osdmap = mon->osdmon()->osdmap;
map<string,string> crush_location;
osdmap.crush->get_full_location(g_conf()->host, &crush_location);
- map<string,string> out;
- config_map.generate_entity_map(
+ auto out = config_map.generate_entity_map(
g_conf()->name,
crush_location,
osdmap.crush.get(),
- string(), // no device class
- &out);
+ string{}); // no device class
g_conf().set_mon_vals(g_ceph_context, out, nullptr);
}
}
dout(20) << __func__ << " " << s->entity_name << " crush " << crush_location
<< " device_class " << device_class << dendl;
- map<string,string> out;
- config_map.generate_entity_map(
+ auto out = config_map.generate_entity_map(
s->entity_name,
crush_location,
osdmap.crush.get(),
- device_class,
- &out);
+ device_class);
if (out == s->last_config && s->any_config) {
dout(20) << __func__ << " no change, " << out << dendl;
}
dout(20) << __func__ << " " << out << dendl;
- s->last_config = out;
+ s->last_config = std::move(out);
s->any_config = true;
return true;
}