summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Barth <msbarth@us.ibm.com>2017-11-06 13:34:32 -0600
committerMatthew Barth <msbarth@us.ibm.com>2017-11-17 13:14:11 -0600
commit55dea64300f44adc5146da3764ab52d39b546518 (patch)
tree08f2f855f52ddd896981a76acc0bfa9f6f1126a7
parent480787c118fb511a8fe23a19f97bcf24b564c11e (diff)
downloadphosphor-fan-presence-55dea64300f44adc5146da3764ab52d39b546518.tar.gz
phosphor-fan-presence-55dea64300f44adc5146da3764ab52d39b546518.zip
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>
-rw-r--r--control/zone.cpp29
-rw-r--r--control/zone.hpp9
2 files changed, 37 insertions, 1 deletions
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::setActiveAllow(const Group* group, bool isActiveAllow)
}
}
+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::setServiceOwner(const Group* group,
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 @@ class Zone
};
/**
+ * @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
OpenPOWER on IntegriCloud