Remove empty service name
Before refreshing the service names and states for a group, the empty
service name should be removed if it exists. An empty service name may
exist where upon startup, a particular service was not found for a
member or members of a group.
Change-Id: I15d224231bb9db0823866393ec1776f793a3c126
Signed-off-by: Matthew Barth <msbarth@us.ibm.com>
diff --git a/control/zone.cpp b/control/zone.cpp
index 5fe9b01..784004e 100644
--- a/control/zone.cpp
+++ b/control/zone.cpp
@@ -120,6 +120,32 @@
}
}
+void Zone::removeService(const Group* group,
+ const std::string& name)
+{
+ try
+ {
+ auto& sNames = _services.at(*group);
+ auto it = std::find_if(
+ sNames.begin(),
+ sNames.end(),
+ [&name](auto const& entry)
+ {
+ return name == std::get<namePos>(entry);
+ }
+ );
+ if (it != std::end(sNames))
+ {
+ // Remove service name from group
+ sNames.erase(it);
+ }
+ }
+ catch (const std::out_of_range& oore)
+ {
+ // No services for group found
+ }
+}
+
void Zone::setServiceOwner(const Group* group,
const std::string& name,
const bool hasOwner)
@@ -152,7 +178,8 @@
void Zone::setServices(const Group* group)
{
- // TODO Remove empty service name if exists
+ // Remove the empty service name if exists
+ removeService(group, "");
for (auto it = group->begin(); it != group->end(); ++it)
{
std::string name;
diff --git a/control/zone.hpp b/control/zone.hpp
index 9565933..dbf4378 100644
--- a/control/zone.hpp
+++ b/control/zone.hpp
@@ -140,6 +140,15 @@
};
/**
+ * @brief Remove a service associated to a group
+ *
+ * @param[in] group - Group associated with service
+ * @param[in] name - Service name to remove
+ */
+ void removeService(const Group* group,
+ const std::string& name);
+
+ /**
* @brief Set or update a service name owner in use
*
* @param[in] group - Group associated with service