From be62d6a86971abac57a1cc03c985ba1e97fd55cb Mon Sep 17 00:00:00 2001 From: Jian Wen Date: Mon, 14 Jan 2013 19:13:24 +0800 Subject: Handle compute node not available for live migration This patch handles exception.ComputeServiceUnavailable by restoring instance's vm_state and instance's task_state after live migration failure caused by unavailable source/dest compute node. Raises detailed HTTPBadRequest explanation for this exception. Fixes bug 973393 and bug 1051881 Change-Id: If825b61fad9c4e3030f2e6c5002907255eaf3661 --- nova/scheduler/manager.py | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'nova/scheduler/manager.py') diff --git a/nova/scheduler/manager.py b/nova/scheduler/manager.py index e6bf1a293..830d61852 100644 --- a/nova/scheduler/manager.py +++ b/nova/scheduler/manager.py @@ -24,6 +24,7 @@ Scheduler Service import sys from nova.compute import rpcapi as compute_rpcapi +from nova.compute import task_states from nova.compute import utils as compute_utils from nova.compute import vm_states from nova.conductor import api as conductor_api @@ -92,6 +93,16 @@ class SchedulerManager(manager.Manager): return self.driver.schedule_live_migration( context, instance, dest, block_migration, disk_over_commit) + except exception.ComputeServiceUnavailable as ex: + request_spec = {'instance_properties': { + 'uuid': instance['uuid'], }, + } + with excutils.save_and_reraise_exception(): + self._set_vm_state_and_notify('live_migration', + dict(vm_state=instance['vm_state'], + task_state=None, + expected_task_state=task_states.MIGRATING,), + context, ex, request_spec) except Exception as ex: with excutils.save_and_reraise_exception(): self._set_vm_state_and_notify('live_migration', -- cgit