});
// cull missing daemons, populate new ones
+ std::set<std::string> types;
for (auto& [type, service] : pending_service_map.services) {
+ types.insert(type);
+
std::set<std::string> names;
for (auto& q : service.daemons) {
names.insert(q.first);
}
daemon_state.cull(type, names);
}
+ daemon_state.cull_services(types);
}
void DaemonServer::got_mgr_map()
}
}
+ for (auto &i : victims) {
+ DaemonKey daemon_key{svc_name, i};
+ dout(4) << "Removing data for " << daemon_key << dendl;
+ _erase(daemon_key);
+ }
+}
+
+void DaemonStateIndex::cull_services(const std::set<std::string>& types_exist)
+{
+ std::set<DaemonKey> victims;
+
+ std::unique_lock l{lock};
+ for (auto it = all.begin(); it != all.end(); ++it) {
+ const auto& daemon_key = it->first;
+ if (it->second->service_daemon &&
+ types_exist.count(daemon_key.type) == 0) {
+ victims.insert(daemon_key);
+ }
+ }
+
for (auto &i : victims) {
dout(4) << "Removing data for " << i << dendl;
- _erase({svc_name, i});
+ _erase(i);
}
}
*/
void cull(const std::string& svc_name,
const std::set<std::string>& names_exist);
+ void cull_services(const std::set<std::string>& types_exist);
};
#endif