Add async param to local conductor live_migrate_instance

A new async param was added to the RPC version of live_migrate_instance
in the conductor but it was missed on the local conductor API. This adds
that parameter and adds a unit test that uses the parameter.

Change-Id: I7c44a8fc72ba9afbb67269b0bc7ad59eb9b1580e
Closes-Bug: #1604475
This commit is contained in:
Andrew Laski 2016-07-19 14:26:53 -04:00
parent a147215196
commit a7f83fc6ce
2 changed files with 34 additions and 5 deletions

View File

@ -77,11 +77,15 @@ class LocalComputeTaskAPI(object):
def live_migrate_instance(self, context, instance, host_name,
block_migration, disk_over_commit,
request_spec=None):
request_spec=None, async=False):
scheduler_hint = {'host': host_name}
self._manager.live_migrate_instance(context, instance, scheduler_hint,
block_migration, disk_over_commit,
request_spec)
if async:
wrap = lambda *args: utils.spawn_n(*args)
else:
wrap = lambda *args: args[0](*args[1:])
wrap(self._manager.live_migrate_instance, context, instance,
scheduler_hint, block_migration, disk_over_commit, request_spec)
def build_instances(self, context, instances, image,
filter_properties, admin_password, injected_files,

View File

@ -1912,7 +1912,32 @@ class ConductorLocalComputeTaskAPITestCase(ConductorTaskAPITestCase):
'_build_live_migrate_task',
return_value=task) as mock_build_task:
self.conductor.live_migrate_instance(self.context, inst_obj,
'destination', 'block_migration', 'disk_over_commit')
'destination', 'block_migration', 'disk_over_commit',
async=False)
mock_build_task.assert_called_once_with(self.context, inst_obj,
'destination',
'block_migration',
'disk_over_commit',
migration, None)
task.execute.assert_called_once()
self.assertEqual('accepted', migration.status)
self.assertEqual('destination', migration.dest_compute)
self.assertEqual(inst_obj.host, migration.source_compute)
@mock.patch('nova.objects.Migration')
def test_live_migrate_async(self, migobj):
inst = fake_instance.fake_db_instance()
inst_obj = objects.Instance._from_db_object(
self.context, objects.Instance(), inst, [])
migration = migobj()
task = mock.MagicMock()
with mock.patch.object(self.conductor_manager,
'_build_live_migrate_task',
return_value=task) as mock_build_task:
self.conductor.live_migrate_instance(self.context, inst_obj,
'destination', 'block_migration', 'disk_over_commit',
async=True)
mock_build_task.assert_called_once_with(self.context, inst_obj,
'destination',
'block_migration',