From: Sage Weil Date: Thu, 4 Jan 2018 23:14:09 +0000 (-0600) Subject: mon/ConfigMap: some improvements X-Git-Tag: v13.0.2~78^2~115 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=3b0fc9537e3f7b6d750ca19e4b8d0ed3cd6cd31f;p=ceph.git mon/ConfigMap: some improvements Signed-off-by: Sage Weil --- diff --git a/src/mon/ConfigMap.cc b/src/mon/ConfigMap.cc index 35d433e64d89..8b6f5e090705 100644 --- a/src/mon/ConfigMap.cc +++ b/src/mon/ConfigMap.cc @@ -24,17 +24,22 @@ int MaskedOption::get_precision(const CrushWrapper *crush) return num_types + 1; } +void OptionMask::dump(Formatter *f) const +{ + if (location_type.size()) { + f->dump_string("location_type", location_type); + f->dump_string("location_value", location_value); + } + if (device_class.size()) { + f->dump_string("device_class", device_class); + } +} + void MaskedOption::dump(Formatter *f) const { f->dump_string("name", opt.name); f->dump_string("value", raw_value); - if (mask.location_type.size()) { - f->dump_string("location_type", mask.location_type); - f->dump_string("location_value", mask.location_value); - } - if (mask.device_class.size()) { - f->dump_string("device_class", mask.device_class); - } + mask.dump(f); } ostream& operator<<(ostream& out, const MaskedOption& o) @@ -80,21 +85,22 @@ void ConfigMap::generate_entity_map( const map& crush_location, const CrushWrapper *crush, const std::string& device_class, - std::map *out) + std::map *out, + std::map> *src) { // global, then by type, then by full name. - vector sections = { &global }; + vector> sections = { make_pair("global", &global) }; auto p = by_type.find(name.get_type_name()); if (p != by_type.end()) { - sections.push_back(&p->second); + sections.push_back(make_pair(name.get_type_name(), &p->second)); } auto q = by_id.find(name.to_str()); if (q != by_id.end()) { - sections.push_back(&q->second); + sections.push_back(make_pair(name.to_str(), &q->second)); } MaskedOption *prev = nullptr; for (auto s : sections) { - for (auto& i : s->options) { + for (auto& i : s.second->options) { auto& o = i.second; // match against crush location, class if (o.mask.device_class.size() && @@ -116,6 +122,9 @@ void ConfigMap::generate_entity_map( continue; } (*out)[i.first] = o.raw_value; + if (src) { + (*src)[i.first] = make_pair(s.first, o.mask); + } prev = &o; } } diff --git a/src/mon/ConfigMap.h b/src/mon/ConfigMap.h index 38b9296d391b..86c258419623 100644 --- a/src/mon/ConfigMap.h +++ b/src/mon/ConfigMap.h @@ -47,6 +47,7 @@ struct OptionMask { } return r; } + void dump(Formatter *f) const; }; struct MaskedOption { @@ -89,7 +90,8 @@ struct ConfigMap { const map& crush_location, const CrushWrapper *crush, const std::string& device_class, - std::map *out); + std::map *out, + std::map> *src=0); static bool parse_mask( const std::string& in,