driver.pre_live_migration migrate_data is always an object
The driver function pre_live_migration() has only 1 caller: ComputeManager.pre_live_migration(), which always passes a LiveMigrateData object to the driver. This is easy to prove as ComputeManager.pre_live_migration() explicitly checks if migrate_data is an object, and assigns it the return value of LiveMigrateData.detect_implementation() if not. detect_implementation() can only return a subclass of LiveMigrateData. It will raise an exception if it is passed None. This change removes handling of the case where migrate_data is None or otherwise not a LiveMigrateData object from all driver implementations of pre_live_migration(). Change-Id: I9d46019e06dc2b59f7b2ddf7c57c333809cbc94b
This commit is contained in:
parent
b292bf3441
commit
824c8a31ff
|
@ -5148,7 +5148,7 @@ class ComputeManager(manager.Manager):
|
|||
:param context: security context
|
||||
:param instance: dict of instance data
|
||||
:param block_migration: if true, prepare for block migration
|
||||
:param migrate_data: if not None, it is a dict which holds data
|
||||
:param migrate_data: A dict or LiveMigrateData object holding data
|
||||
required for live migration without shared
|
||||
storage.
|
||||
|
||||
|
|
|
@ -68,6 +68,7 @@ from nova.network import model as network_model
|
|||
from nova import objects
|
||||
from nova.objects import block_device as block_device_obj
|
||||
from nova.objects import fields
|
||||
from nova.objects import migrate_data as migrate_data_obj
|
||||
from nova.objects import virtual_interface as obj_vif
|
||||
from nova.pci import manager as pci_manager
|
||||
from nova.pci import utils as pci_utils
|
||||
|
@ -9324,12 +9325,12 @@ class LibvirtConnTestCase(test.NoDBTestCase):
|
|||
drvr.plug_vifs(mox.IsA(instance), nw_info)
|
||||
|
||||
self.mox.ReplayAll()
|
||||
migrate_data = {
|
||||
"block_migration": False,
|
||||
"instance_relative_path": "foo",
|
||||
"is_shared_block_storage": False,
|
||||
"is_shared_instance_path": False,
|
||||
}
|
||||
migrate_data = migrate_data_obj.LibvirtLiveMigrateData(
|
||||
block_migration=False,
|
||||
instance_relative_path='foo',
|
||||
is_shared_block_storage=False,
|
||||
is_shared_instance_path=False,
|
||||
)
|
||||
result = drvr.pre_live_migration(
|
||||
c, instance, vol, nw_info, None,
|
||||
migrate_data=migrate_data)
|
||||
|
@ -9397,12 +9398,14 @@ class LibvirtConnTestCase(test.NoDBTestCase):
|
|||
instance = objects.Instance(**self.test_instance)
|
||||
instance.config_drive = 'True'
|
||||
|
||||
migrate_data = migrate_data_obj.LibvirtLiveMigrateData(
|
||||
is_shared_instance_path=False,
|
||||
is_shared_block_storage=False,
|
||||
block_migration=False,
|
||||
instance_relative_path='foo',
|
||||
)
|
||||
res_data = drvr.pre_live_migration(
|
||||
self.context, instance, vol, [], None,
|
||||
{'is_shared_instance_path': False,
|
||||
'is_shared_block_storage': False,
|
||||
'block_migration': False,
|
||||
'instance_relative_path': 'foo'})
|
||||
self.context, instance, vol, [], None, migrate_data)
|
||||
res_data = res_data.to_legacy_dict(pre_migration_result=True)
|
||||
block_device_info_get_mapping.assert_called_once_with(
|
||||
{'block_device_mapping': [
|
||||
|
@ -9456,16 +9459,17 @@ class LibvirtConnTestCase(test.NoDBTestCase):
|
|||
self.mox.StubOutWithMock(drvr, 'plug_vifs')
|
||||
drvr.plug_vifs(mox.IsA(inst_ref), nw_info)
|
||||
self.mox.ReplayAll()
|
||||
migrate_data = {'is_shared_instance_path': False,
|
||||
'is_shared_block_storage': False,
|
||||
'is_volume_backed': True,
|
||||
'block_migration': False,
|
||||
'instance_relative_path': inst_ref['name'],
|
||||
'disk_over_commit': False,
|
||||
'disk_available_mb': 123,
|
||||
'image_type': 'qcow2',
|
||||
'filename': 'foo',
|
||||
}
|
||||
migrate_data = migrate_data_obj.LibvirtLiveMigrateData(
|
||||
is_shared_instance_path=False,
|
||||
is_shared_block_storage=False,
|
||||
is_volume_backed=True,
|
||||
block_migration=False,
|
||||
instance_relative_path=inst_ref['name'],
|
||||
disk_over_commit=False,
|
||||
disk_available_mb=123,
|
||||
image_type='qcow2',
|
||||
filename='foo',
|
||||
)
|
||||
ret = drvr.pre_live_migration(c, inst_ref, vol, nw_info, None,
|
||||
migrate_data)
|
||||
target_ret = {
|
||||
|
@ -9504,10 +9508,16 @@ class LibvirtConnTestCase(test.NoDBTestCase):
|
|||
self.stubs.Set(eventlet.greenthread, 'sleep',
|
||||
lambda x: eventlet.sleep(0))
|
||||
disk_info_json = jsonutils.dumps({})
|
||||
migrate_data = migrate_data_obj.LibvirtLiveMigrateData(
|
||||
is_shared_block_storage=True,
|
||||
is_shared_instance_path=True,
|
||||
block_migration=False,
|
||||
)
|
||||
self.assertRaises(processutils.ProcessExecutionError,
|
||||
drvr.pre_live_migration,
|
||||
self.context, instance, block_device_info=None,
|
||||
network_info=[], disk_info=disk_info_json)
|
||||
network_info=[], disk_info=disk_info_json,
|
||||
migrate_data=migrate_data)
|
||||
|
||||
def test_pre_live_migration_plug_vifs_retry_works(self):
|
||||
self.flags(live_migration_retry_count=3)
|
||||
|
@ -9526,8 +9536,14 @@ class LibvirtConnTestCase(test.NoDBTestCase):
|
|||
self.stubs.Set(eventlet.greenthread, 'sleep',
|
||||
lambda x: eventlet.sleep(0))
|
||||
disk_info_json = jsonutils.dumps({})
|
||||
migrate_data = migrate_data_obj.LibvirtLiveMigrateData(
|
||||
is_shared_block_storage=True,
|
||||
is_shared_instance_path=True,
|
||||
block_migration=False,
|
||||
)
|
||||
drvr.pre_live_migration(self.context, instance, block_device_info=None,
|
||||
network_info=[], disk_info=disk_info_json)
|
||||
network_info=[], disk_info=disk_info_json,
|
||||
migrate_data=migrate_data)
|
||||
|
||||
def test_pre_live_migration_image_not_created_with_shared_storage(self):
|
||||
migrate_data_set = [{'is_shared_block_storage': False,
|
||||
|
@ -9558,6 +9574,10 @@ class LibvirtConnTestCase(test.NoDBTestCase):
|
|||
'image_type': 'qcow2',
|
||||
'block_migration': True}]
|
||||
|
||||
def _to_obj(d):
|
||||
return migrate_data_obj.LibvirtLiveMigrateData(**d)
|
||||
migrate_data_set = map(_to_obj, migrate_data_set)
|
||||
|
||||
drvr = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)
|
||||
instance = objects.Instance(**self.test_instance)
|
||||
# creating mocks
|
||||
|
@ -9584,10 +9604,12 @@ class LibvirtConnTestCase(test.NoDBTestCase):
|
|||
objects.LibvirtLiveMigrateData)
|
||||
|
||||
def test_pre_live_migration_with_not_shared_instance_path(self):
|
||||
migrate_data = {'is_shared_block_storage': False,
|
||||
'is_shared_instance_path': False,
|
||||
'block_migration': False,
|
||||
'instance_relative_path': 'foo'}
|
||||
migrate_data = migrate_data_obj.LibvirtLiveMigrateData(
|
||||
is_shared_block_storage=False,
|
||||
is_shared_instance_path=False,
|
||||
block_migration=False,
|
||||
instance_relative_path='foo',
|
||||
)
|
||||
|
||||
drvr = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)
|
||||
instance = objects.Instance(**self.test_instance)
|
||||
|
@ -9622,10 +9644,12 @@ class LibvirtConnTestCase(test.NoDBTestCase):
|
|||
|
||||
def test_pre_live_migration_recreate_disk_info(self):
|
||||
|
||||
migrate_data = {'is_shared_block_storage': False,
|
||||
'is_shared_instance_path': False,
|
||||
'block_migration': True,
|
||||
'instance_relative_path': '/some/path/'}
|
||||
migrate_data = migrate_data_obj.LibvirtLiveMigrateData(
|
||||
is_shared_block_storage=False,
|
||||
is_shared_instance_path=False,
|
||||
block_migration=True,
|
||||
instance_relative_path='/some/path/',
|
||||
)
|
||||
disk_info = [{'disk_size': 5368709120, 'type': 'raw',
|
||||
'virt_disk_size': 5368709120,
|
||||
'path': '/some/path/disk',
|
||||
|
@ -9662,7 +9686,12 @@ class LibvirtConnTestCase(test.NoDBTestCase):
|
|||
drvr = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)
|
||||
drvr._supported_perf_events = ['cmt']
|
||||
|
||||
migrate_data = {}
|
||||
migrate_data = migrate_data_obj.LibvirtLiveMigrateData(
|
||||
is_shared_block_storage=False,
|
||||
is_shared_instance_path=False,
|
||||
block_migration=False,
|
||||
instance_relative_path='foo',
|
||||
)
|
||||
|
||||
instance = objects.Instance(**self.test_instance)
|
||||
|
||||
|
|
|
@ -2232,10 +2232,11 @@ class VMwareAPIVMTestCase(test.NoDBTestCase):
|
|||
self.assertEqual(2, len(ds_util._DS_DC_MAPPING))
|
||||
|
||||
def test_pre_live_migration(self):
|
||||
migrate_data = objects.migrate_data.LiveMigrateData()
|
||||
self.assertRaises(NotImplementedError,
|
||||
self.conn.pre_live_migration, self.context,
|
||||
'fake_instance', 'fake_block_device_info',
|
||||
'fake_network_info', 'fake_disk_info')
|
||||
'fake_network_info', 'fake_disk_info', migrate_data)
|
||||
|
||||
def test_live_migration(self):
|
||||
self.assertRaises(NotImplementedError,
|
||||
|
|
|
@ -1417,11 +1417,6 @@ class LiveMigrateTestCase(VMOpsTestBase):
|
|||
self.assertEqual(result.sr_uuid_map, sr_uuid_map)
|
||||
mock_connect.assert_called_once_with("bdi")
|
||||
|
||||
def test_pre_live_migration_raises_with_no_data(self):
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
self.vmops.pre_live_migration,
|
||||
None, None, "bdi", None, None, None)
|
||||
|
||||
|
||||
class LiveMigrateFakeVersionTestCase(VMOpsTestBase):
|
||||
@mock.patch.object(vmops.VMOps, '_pv_device_reported')
|
||||
|
|
|
@ -791,7 +791,7 @@ class ComputeDriver(object):
|
|||
raise NotImplementedError()
|
||||
|
||||
def pre_live_migration(self, context, instance, block_device_info,
|
||||
network_info, disk_info, migrate_data=None):
|
||||
network_info, disk_info, migrate_data):
|
||||
"""Prepare an instance for live migration
|
||||
|
||||
:param context: security context
|
||||
|
|
|
@ -502,7 +502,7 @@ class FakeDriver(driver.ComputeDriver):
|
|||
return
|
||||
|
||||
def pre_live_migration(self, context, instance, block_device_info,
|
||||
network_info, disk_info, migrate_data=None):
|
||||
network_info, disk_info, migrate_data):
|
||||
return
|
||||
|
||||
def unfilter_instance(self, instance, network_info):
|
||||
|
|
|
@ -236,7 +236,7 @@ class HyperVDriver(driver.ComputeDriver):
|
|||
self.destroy(context, instance, network_info, block_device_info)
|
||||
|
||||
def pre_live_migration(self, context, instance, block_device_info,
|
||||
network_info, disk_info, migrate_data=None):
|
||||
network_info, disk_info, migrate_data):
|
||||
self._livemigrationops.pre_live_migration(context, instance,
|
||||
block_device_info,
|
||||
network_info)
|
||||
|
|
|
@ -6367,25 +6367,16 @@ class LibvirtDriver(driver.ComputeDriver):
|
|||
shutil.rmtree(instance_dir)
|
||||
|
||||
def pre_live_migration(self, context, instance, block_device_info,
|
||||
network_info, disk_info, migrate_data=None):
|
||||
network_info, disk_info, migrate_data):
|
||||
"""Preparation live migration."""
|
||||
if disk_info is not None:
|
||||
disk_info = jsonutils.loads(disk_info)
|
||||
|
||||
# Steps for volume backed instance live migration w/o shared storage.
|
||||
is_shared_block_storage = True
|
||||
is_shared_instance_path = True
|
||||
is_block_migration = True
|
||||
if migrate_data:
|
||||
if not isinstance(migrate_data, migrate_data_obj.LiveMigrateData):
|
||||
obj = objects.LibvirtLiveMigrateData()
|
||||
obj.from_legacy_dict(migrate_data)
|
||||
migrate_data = obj
|
||||
LOG.debug('migrate_data in pre_live_migration: %s', migrate_data,
|
||||
instance=instance)
|
||||
is_shared_block_storage = migrate_data.is_shared_block_storage
|
||||
is_shared_instance_path = migrate_data.is_shared_instance_path
|
||||
is_block_migration = migrate_data.block_migration
|
||||
LOG.debug('migrate_data in pre_live_migration: %s', migrate_data,
|
||||
instance=instance)
|
||||
is_shared_block_storage = migrate_data.is_shared_block_storage
|
||||
is_shared_instance_path = migrate_data.is_shared_instance_path
|
||||
is_block_migration = migrate_data.block_migration
|
||||
|
||||
if not is_shared_instance_path:
|
||||
instance_dir = libvirt_utils.get_instance_path_at_destination(
|
||||
|
|
|
@ -538,7 +538,7 @@ class XenAPIDriver(driver.ComputeDriver):
|
|||
block_device_info)
|
||||
|
||||
def pre_live_migration(self, context, instance, block_device_info,
|
||||
network_info, disk_info, migrate_data=None):
|
||||
network_info, disk_info, migrate_data):
|
||||
"""Preparation live migration.
|
||||
|
||||
:param block_device_info:
|
||||
|
|
|
@ -2375,10 +2375,6 @@ class VMOps(object):
|
|||
|
||||
def pre_live_migration(self, context, instance, block_device_info,
|
||||
network_info, disk_info, migrate_data):
|
||||
if migrate_data is None:
|
||||
raise exception.InvalidParameterValue(
|
||||
'XenAPI requires migrate data')
|
||||
|
||||
migrate_data.sr_uuid_map = self.connect_block_device_volumes(
|
||||
block_device_info)
|
||||
return migrate_data
|
||||
|
|
Loading…
Reference in New Issue