From f8dfdd405deb4280f97b59f9b9520b5575f5901d Mon Sep 17 00:00:00 2001 From: Dantali0n Date: Fri, 8 Feb 2019 11:03:37 +0100 Subject: [PATCH] function get_sd return 0 early if len(hosts) is 0 Prevent workload_stabilization strategy from failing in a network with 0 hosts. Change-Id: I9f1a9524923c14d958eb50a70dad379a6021b884 Closes-Bug: #1815059 --- .../strategy/strategies/workload_stabilization.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/watcher/decision_engine/strategy/strategies/workload_stabilization.py b/watcher/decision_engine/strategy/strategies/workload_stabilization.py index dcdaf6dca..5da554ad8 100644 --- a/watcher/decision_engine/strategy/strategies/workload_stabilization.py +++ b/watcher/decision_engine/strategy/strategies/workload_stabilization.py @@ -334,14 +334,17 @@ class WorkloadStabilization(base.WorkloadStabilizationBaseStrategy): def get_sd(self, hosts, meter_name): """Get standard deviation among hosts by specified meter""" mean = 0 - variaton = 0 + variation = 0 + num_hosts = len(hosts) + if num_hosts == 0: + return 0 for host_id in hosts: mean += hosts[host_id][meter_name] - mean /= len(hosts) + mean /= num_hosts for host_id in hosts: - variaton += (hosts[host_id][meter_name] - mean) ** 2 - variaton /= len(hosts) - sd = math.sqrt(variaton) + variation += (hosts[host_id][meter_name] - mean) ** 2 + variation /= num_hosts + sd = math.sqrt(variation) return sd def calculate_weighted_sd(self, sd_case):