summaryrefslogtreecommitdiffstats
path: root/nova/scheduler/manager.py
diff options
context:
space:
mode:
authorJian Wen <jian.wen@canonical.com>2013-01-14 19:13:24 +0800
committerJian Wen <jian.wen@canonical.com>2013-01-31 15:22:43 +0800
commitbe62d6a86971abac57a1cc03c985ba1e97fd55cb (patch)
tree4f0beece6fdf6bec93e18341322ed070d67ca203 /nova/scheduler/manager.py
parentb7e0c9dd588e5fad1cf4e3eb3f71828ca0122a55 (diff)
downloadnova-be62d6a86971abac57a1cc03c985ba1e97fd55cb.tar.gz
nova-be62d6a86971abac57a1cc03c985ba1e97fd55cb.tar.xz
nova-be62d6a86971abac57a1cc03c985ba1e97fd55cb.zip
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
Diffstat (limited to 'nova/scheduler/manager.py')
-rw-r--r--nova/scheduler/manager.py11
1 files changed, 11 insertions, 0 deletions
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',