From ea7e6a7c940f8ced5d704fd1767213c2cc85006a Mon Sep 17 00:00:00 2001 From: Hidekazu Nakamura Date: Wed, 9 Nov 2016 14:11:46 +0900 Subject: [PATCH] Fix workload stabilization strategy to ignore disabled hosts Change-Id: Ib5244da196111fac03b1ac4b756a59ad15deb778 Closes-Bug: #1640102 --- .../strategy/strategies/workload_stabilization.py | 12 +++++++++--- .../strategies/test_workload_stabilization.py | 5 +++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/watcher/decision_engine/strategy/strategies/workload_stabilization.py b/watcher/decision_engine/strategy/strategies/workload_stabilization.py index 26bf264c4..5fb09d37f 100644 --- a/watcher/decision_engine/strategy/strategies/workload_stabilization.py +++ b/watcher/decision_engine/strategy/strategies/workload_stabilization.py @@ -218,10 +218,16 @@ class WorkloadStabilization(base.WorkloadStabilizationBaseStrategy): return normalized_hosts + def get_available_nodes(self): + return {node_uuid: node for node_uuid, node in + self.compute_model.get_all_compute_nodes().items() + if node.state == element.ServiceState.ONLINE.value and + node.status == element.ServiceState.ENABLED.value} + def get_hosts_load(self): - """Get load of every host by gathering instances load""" + """Get load of every available host by gathering instances load""" hosts_load = {} - for node_id in self.compute_model.get_all_compute_nodes(): + for node_id in self.get_available_nodes(): hosts_load[node_id] = {} host_vcpus = self.compute_model.get_resource_by_uuid( element.ResourceType.cpu_cores).get_capacity( @@ -320,7 +326,7 @@ class WorkloadStabilization(base.WorkloadStabilizationBaseStrategy): yield nodes instance_host_map = [] - nodes = list(self.compute_model.get_all_compute_nodes()) + nodes = list(self.get_available_nodes()) for source_hp_id in nodes: c_nodes = copy.copy(nodes) c_nodes.remove(source_hp_id) diff --git a/watcher/tests/decision_engine/strategy/strategies/test_workload_stabilization.py b/watcher/tests/decision_engine/strategy/strategies/test_workload_stabilization.py index 8c0da5bdc..35c8fa194 100644 --- a/watcher/tests/decision_engine/strategy/strategies/test_workload_stabilization.py +++ b/watcher/tests/decision_engine/strategy/strategies/test_workload_stabilization.py @@ -112,6 +112,11 @@ class TestWorkloadStabilization(base.TestCase): normalized_hosts, self.strategy.normalize_hosts_load(fake_hosts)) + def test_get_available_nodes(self): + self.m_model.return_value = self.fake_cluster. \ + generate_scenario_9_with_3_active_plus_1_disabled_nodes() + self.assertEqual(3, len(self.strategy.get_available_nodes())) + def test_get_hosts_load(self): self.m_model.return_value = self.fake_cluster.generate_scenario_1() self.assertEqual(self.strategy.get_hosts_load(),