summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--nova/scheduler/manager.py5
-rw-r--r--nova/tests/scheduler/test_scheduler.py30
2 files changed, 34 insertions, 1 deletions
diff --git a/nova/scheduler/manager.py b/nova/scheduler/manager.py
index ca7cd956f..52ef71e62 100644
--- a/nova/scheduler/manager.py
+++ b/nova/scheduler/manager.py
@@ -123,10 +123,13 @@ class SchedulerManager(manager.Manager):
expected_task_state=task_states.MIGRATING,),
context, ex, request_spec)
except Exception as ex:
+ request_spec = {'instance_properties': {
+ 'uuid': instance['uuid'], },
+ }
with excutils.save_and_reraise_exception():
self._set_vm_state_and_notify('live_migration',
{'vm_state': vm_states.ERROR},
- context, ex, {})
+ context, ex, request_spec)
def run_instance(self, context, request_spec, admin_password,
injected_files, requested_networks, is_first_time,
diff --git a/nova/tests/scheduler/test_scheduler.py b/nova/tests/scheduler/test_scheduler.py
index f4f607647..84a6a023f 100644
--- a/nova/tests/scheduler/test_scheduler.py
+++ b/nova/tests/scheduler/test_scheduler.py
@@ -277,6 +277,36 @@ class SchedulerManagerTestCase(test.TestCase):
self.context, inst, dest, block_migration,
disk_over_commit)
+ def test_live_migration_set_vmstate_error(self):
+ inst = {"uuid": "fake-instance-id",
+ "vm_state": vm_states.ACTIVE, }
+
+ dest = 'fake_host'
+ block_migration = False
+ disk_over_commit = False
+
+ self._mox_schedule_method_helper('schedule_live_migration')
+ self.mox.StubOutWithMock(compute_utils, 'add_instance_fault_from_exc')
+ self.mox.StubOutWithMock(db, 'instance_update_and_get_original')
+
+ self.manager.driver.schedule_live_migration(self.context,
+ inst, dest, block_migration, disk_over_commit).AndRaise(
+ ValueError)
+ db.instance_update_and_get_original(self.context, inst["uuid"],
+ {"vm_state": vm_states.ERROR,
+ }).AndReturn((inst, inst))
+ compute_utils.add_instance_fault_from_exc(self.context,
+ mox.IsA(conductor_api.LocalAPI), inst,
+ mox.IsA(ValueError),
+ mox.IgnoreArg())
+
+ self.mox.ReplayAll()
+ self.stub_out_client_exceptions()
+ self.assertRaises(ValueError,
+ self.manager.live_migration,
+ self.context, inst, dest, block_migration,
+ disk_over_commit)
+
def test_prep_resize_no_valid_host_back_in_active_state(self):
fake_instance_uuid = 'fake-instance-id'
fake_instance = {'uuid': fake_instance_uuid}