From 2ec8bc10cd93f5fbcf8893857bfe872e8bea0d70 Mon Sep 17 00:00:00 2001
From: licanwei
Date: Fri, 13 Jan 2017 11:17:36 +0800
Subject: [PATCH] resolve KeyError exception
In the optimize solution stage when launching audit
based vm_workload_consolidation strategy.
The instance map in node should change when migration
action was removed. Otherwise a KeyError exception
will be thrown.
Change-Id: I054b6b12922892a02d155b4ddc001b19890d32c5
Closes-Bug: #1656157
---
.../strategies/vm_workload_consolidation.py | 24 +++++++++----------
1 file changed, 11 insertions(+), 13 deletions(-)
diff --git a/watcher/decision_engine/strategy/strategies/vm_workload_consolidation.py b/watcher/decision_engine/strategy/strategies/vm_workload_consolidation.py
index 82bb9f80a..bfe811f35 100644
--- a/watcher/decision_engine/strategy/strategies/vm_workload_consolidation.py
+++ b/watcher/decision_engine/strategy/strategies/vm_workload_consolidation.py
@@ -171,16 +171,14 @@ class VMWorkloadConsolidation(base.ServerConsolidationBaseStrategy):
destination_node_state_str = self.get_state_str(destination_node.state)
if destination_node_state_str == element.ServiceState.DISABLED.value:
self.add_action_enable_compute_node(destination_node)
- model.mapping.unmap(source_node, instance)
- model.mapping.map(destination_node, instance)
-
- params = {'migration_type': migration_type,
- 'source_node': source_node.uuid,
- 'destination_node': destination_node.uuid}
- self.solution.add_action(action_type='migrate',
- resource_id=instance.uuid,
- input_parameters=params)
- self.number_of_migrations += 1
+ if model.migrate_instance(instance, source_node, destination_node):
+ params = {'migration_type': migration_type,
+ 'source_node': source_node.uuid,
+ 'destination_node': destination_node.uuid}
+ self.solution.add_action(action_type='migrate',
+ resource_id=instance.uuid,
+ input_parameters=params)
+ self.number_of_migrations += 1
def disable_unused_nodes(self, model):
"""Generate actions for disablity of unused nodes.
@@ -404,9 +402,9 @@ class VMWorkloadConsolidation(base.ServerConsolidationBaseStrategy):
for a in actions:
self.solution.actions.remove(a)
self.number_of_migrations -= 1
- if src_uuid != dst_uuid:
- src_node = model.get_node_by_uuid(src_uuid)
- dst_node = model.get_node_by_uuid(dst_uuid)
+ src_node = model.get_node_by_uuid(src_uuid)
+ dst_node = model.get_node_by_uuid(dst_uuid)
+ if model.migrate_instance(instance_uuid, dst_node, src_node):
self.add_migration(
instance_uuid, src_node, dst_node, model)