Use migrate_data.block_migration instead of block_migration
Since nova can calculate block_migration we might end up with a case where block_migration is None while migrate_data.block_migration is True. Both drivers that support block live migration, Libvirt and Xenapi, use migrate_data.block_migration already, so we should switch to use it everywhere, instead of in drivers only. Change-Id: Iaa8aea3cb58ed0864a6a38d4a163649f52e32c5c Closes-Bug: #1552303
This commit is contained in:
parent
59a07f00ad
commit
4378b4fa43
nova
compute
tests/unit
virt/libvirt
@ -5258,7 +5258,8 @@ class ComputeManager(manager.Manager):
|
||||
migrate_data)
|
||||
|
||||
try:
|
||||
if block_migration:
|
||||
if ('block_migration' in migrate_data and
|
||||
migrate_data.block_migration):
|
||||
block_device_info = self._get_instance_block_device_info(
|
||||
context, instance)
|
||||
disk = self.driver.get_instance_disk_info(
|
||||
@ -5372,7 +5373,7 @@ class ComputeManager(manager.Manager):
|
||||
self._notify_about_instance_usage(
|
||||
context, instance, 'live.migration.abort.end')
|
||||
|
||||
def _live_migration_cleanup_flags(self, block_migration, migrate_data):
|
||||
def _live_migration_cleanup_flags(self, migrate_data):
|
||||
"""Determine whether disks or instance path need to be cleaned up after
|
||||
live migration (at source on success, at destination on rollback)
|
||||
|
||||
@ -5383,22 +5384,26 @@ class ComputeManager(manager.Manager):
|
||||
newly created instance-xxx dir on the destination as a part of its
|
||||
rollback process
|
||||
|
||||
:param block_migration: if true, it was a block migration
|
||||
:param migrate_data: implementation specific data
|
||||
:returns: (bool, bool) -- do_cleanup, destroy_disks
|
||||
"""
|
||||
# NOTE(angdraug): block migration wouldn't have been allowed if either
|
||||
# block storage or instance path were shared
|
||||
is_shared_block_storage = not block_migration
|
||||
is_shared_instance_path = not block_migration
|
||||
# NOTE(pkoniszewski): block migration specific params are set inside
|
||||
# migrate_data objects for drivers that expose block live migration
|
||||
# information (i.e. Libvirt and Xenapi). For other drivers cleanup is
|
||||
# not needed.
|
||||
is_shared_block_storage = True
|
||||
is_shared_instance_path = True
|
||||
if isinstance(migrate_data, migrate_data_obj.LibvirtLiveMigrateData):
|
||||
is_shared_block_storage = migrate_data.is_shared_block_storage
|
||||
is_shared_instance_path = migrate_data.is_shared_instance_path
|
||||
elif isinstance(migrate_data, migrate_data_obj.XenapiLiveMigrateData):
|
||||
is_shared_block_storage = not migrate_data.block_migration
|
||||
is_shared_instance_path = not migrate_data.block_migration
|
||||
|
||||
# No instance booting at source host, but instance dir
|
||||
# must be deleted for preparing next block migration
|
||||
# must be deleted for preparing next live migration w/o shared storage
|
||||
do_cleanup = block_migration or not is_shared_instance_path
|
||||
do_cleanup = not is_shared_instance_path
|
||||
destroy_disks = not is_shared_block_storage
|
||||
|
||||
return (do_cleanup, destroy_disks)
|
||||
@ -5482,7 +5487,7 @@ class ComputeManager(manager.Manager):
|
||||
instance, block_migration, dest)
|
||||
|
||||
do_cleanup, destroy_disks = self._live_migration_cleanup_flags(
|
||||
block_migration, migrate_data)
|
||||
migrate_data)
|
||||
|
||||
if do_cleanup:
|
||||
LOG.debug('Calling driver.cleanup from _post_live_migration',
|
||||
@ -5649,7 +5654,7 @@ class ComputeManager(manager.Manager):
|
||||
"live_migration._rollback.start")
|
||||
|
||||
do_cleanup, destroy_disks = self._live_migration_cleanup_flags(
|
||||
block_migration, migrate_data)
|
||||
migrate_data)
|
||||
|
||||
if do_cleanup:
|
||||
self.compute_rpcapi.rollback_live_migration_at_destination(
|
||||
|
@ -5545,7 +5545,8 @@ class ComputeTestCase(BaseTestCase):
|
||||
'source_type': 'volume',
|
||||
'destination_type': 'volume'}))
|
||||
]
|
||||
migrate_data = migrate_data_obj.LiveMigrateData()
|
||||
migrate_data = migrate_data_obj.XenapiLiveMigrateData(
|
||||
block_migration=True)
|
||||
|
||||
# creating mocks
|
||||
self.mox.StubOutWithMock(self.compute.driver,
|
||||
|
@ -4503,7 +4503,7 @@ class ComputeManagerMigrationTestCase(test.NoDBTestCase):
|
||||
compute._rollback_live_migration(self.context,
|
||||
mock.MagicMock(),
|
||||
'foo', False, {})
|
||||
self.assertIsInstance(mock_lmcf.call_args_list[0][0][1],
|
||||
self.assertIsInstance(mock_lmcf.call_args_list[0][0][0],
|
||||
migrate_data_obj.LiveMigrateData)
|
||||
|
||||
_test()
|
||||
@ -4744,7 +4744,7 @@ class ComputeManagerMigrationTestCase(test.NoDBTestCase):
|
||||
is_shared_block_storage=False,
|
||||
is_shared_instance_path=False)
|
||||
do_cleanup, destroy_disks = self.compute._live_migration_cleanup_flags(
|
||||
True, migrate_data)
|
||||
migrate_data)
|
||||
self.assertTrue(do_cleanup)
|
||||
self.assertTrue(destroy_disks)
|
||||
|
||||
@ -4753,7 +4753,7 @@ class ComputeManagerMigrationTestCase(test.NoDBTestCase):
|
||||
is_shared_block_storage=True,
|
||||
is_shared_instance_path=False)
|
||||
do_cleanup, destroy_disks = self.compute._live_migration_cleanup_flags(
|
||||
False, migrate_data)
|
||||
migrate_data)
|
||||
self.assertTrue(do_cleanup)
|
||||
self.assertFalse(destroy_disks)
|
||||
|
||||
@ -4762,7 +4762,7 @@ class ComputeManagerMigrationTestCase(test.NoDBTestCase):
|
||||
is_shared_block_storage=False,
|
||||
is_shared_instance_path=True)
|
||||
do_cleanup, destroy_disks = self.compute._live_migration_cleanup_flags(
|
||||
False, migrate_data)
|
||||
migrate_data)
|
||||
self.assertFalse(do_cleanup)
|
||||
self.assertTrue(destroy_disks)
|
||||
|
||||
@ -4771,27 +4771,27 @@ class ComputeManagerMigrationTestCase(test.NoDBTestCase):
|
||||
is_shared_block_storage=True,
|
||||
is_shared_instance_path=True)
|
||||
do_cleanup, destroy_disks = self.compute._live_migration_cleanup_flags(
|
||||
False, migrate_data)
|
||||
migrate_data)
|
||||
self.assertFalse(do_cleanup)
|
||||
self.assertFalse(destroy_disks)
|
||||
|
||||
def test_live_migration_cleanup_flags_block_migrate_xenapi(self):
|
||||
migrate_data = objects.XenapiLiveMigrateData(block_migration=True)
|
||||
do_cleanup, destroy_disks = self.compute._live_migration_cleanup_flags(
|
||||
True, migrate_data)
|
||||
migrate_data)
|
||||
self.assertTrue(do_cleanup)
|
||||
self.assertTrue(destroy_disks)
|
||||
|
||||
def test_live_migration_cleanup_flags_live_migrate_xenapi(self):
|
||||
migrate_data = objects.XenapiLiveMigrateData(block_migration=False)
|
||||
do_cleanup, destroy_disks = self.compute._live_migration_cleanup_flags(
|
||||
False, migrate_data)
|
||||
migrate_data)
|
||||
self.assertFalse(do_cleanup)
|
||||
self.assertFalse(destroy_disks)
|
||||
|
||||
def test_live_migration_cleanup_flags_live_migrate(self):
|
||||
do_cleanup, destroy_disks = self.compute._live_migration_cleanup_flags(
|
||||
False, {})
|
||||
{})
|
||||
self.assertFalse(do_cleanup)
|
||||
self.assertFalse(destroy_disks)
|
||||
|
||||
|
@ -6889,7 +6889,8 @@ class LibvirtConnTestCase(test.NoDBTestCase):
|
||||
graphics_listen_addr_spice='10.0.0.2',
|
||||
serial_listen_addr='127.0.0.1',
|
||||
target_connect_addr=None,
|
||||
bdms=[])
|
||||
bdms=[],
|
||||
block_migration=False)
|
||||
self.mox.ReplayAll()
|
||||
self.assertRaises(fakelibvirt.libvirtError,
|
||||
drvr._live_migration_operation,
|
||||
@ -6926,7 +6927,8 @@ class LibvirtConnTestCase(test.NoDBTestCase):
|
||||
migrate_data = objects.LibvirtLiveMigrateData(
|
||||
serial_listen_addr='',
|
||||
target_connect_addr=None,
|
||||
bdms=[bdm])
|
||||
bdms=[bdm],
|
||||
block_migration=False)
|
||||
|
||||
drvr = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)
|
||||
test_mock = mock.MagicMock()
|
||||
@ -6977,7 +6979,8 @@ class LibvirtConnTestCase(test.NoDBTestCase):
|
||||
migrate_data = objects.LibvirtLiveMigrateData(
|
||||
serial_listen_addr='',
|
||||
target_connect_addr='127.0.0.2',
|
||||
bdms=[bdm])
|
||||
bdms=[bdm],
|
||||
block_migration=False)
|
||||
|
||||
drvr = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)
|
||||
test_mock = mock.MagicMock()
|
||||
@ -7186,7 +7189,8 @@ class LibvirtConnTestCase(test.NoDBTestCase):
|
||||
graphics_listen_addr_spice='10.0.0.2',
|
||||
serial_listen_addr='9.0.0.12',
|
||||
target_connect_addr=None,
|
||||
bdms=[])
|
||||
bdms=[],
|
||||
block_migration=False)
|
||||
dom = fakelibvirt.virDomain
|
||||
drvr = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)
|
||||
self.assertRaises(fakelibvirt.libvirtError,
|
||||
@ -7208,7 +7212,8 @@ class LibvirtConnTestCase(test.NoDBTestCase):
|
||||
CONF.set_override("enabled", True, "serial_console")
|
||||
dom = fakelibvirt.virDomain
|
||||
migrate_data = objects.LibvirtLiveMigrateData(
|
||||
serial_listen_addr='', target_connect_addr=None)
|
||||
serial_listen_addr='', target_connect_addr=None,
|
||||
block_migration=False)
|
||||
|
||||
drvr = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)
|
||||
self.assertRaises(exception.MigrationError,
|
||||
@ -7244,7 +7249,8 @@ class LibvirtConnTestCase(test.NoDBTestCase):
|
||||
graphics_listen_addr_spice='0.0.0.0',
|
||||
serial_listen_addr='127.0.0.1',
|
||||
target_connect_addr=None,
|
||||
bdms=[])
|
||||
bdms=[],
|
||||
block_migration=False)
|
||||
self.mox.ReplayAll()
|
||||
self.assertRaises(fakelibvirt.libvirtError,
|
||||
drvr._live_migration_operation,
|
||||
@ -7275,7 +7281,8 @@ class LibvirtConnTestCase(test.NoDBTestCase):
|
||||
migrate_data = objects.LibvirtLiveMigrateData(
|
||||
serial_listen_addr='',
|
||||
target_connect_addr=None,
|
||||
bdms=[])
|
||||
bdms=[],
|
||||
block_migration=False)
|
||||
self.mox.ReplayAll()
|
||||
self.assertRaises(fakelibvirt.libvirtError,
|
||||
drvr._live_migration_operation,
|
||||
@ -7305,7 +7312,8 @@ class LibvirtConnTestCase(test.NoDBTestCase):
|
||||
graphics_listen_addr_spice='0.0.0.0',
|
||||
serial_listen_addr='127.0.0.1',
|
||||
target_connect_addr=None,
|
||||
bdms=[])
|
||||
bdms=[],
|
||||
block_migration=False)
|
||||
|
||||
dom = fakelibvirt.virDomain
|
||||
drvr = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)
|
||||
@ -7337,7 +7345,8 @@ class LibvirtConnTestCase(test.NoDBTestCase):
|
||||
graphics_listen_addr_vnc='1.2.3.4',
|
||||
graphics_listen_addr_spice='1.2.3.4',
|
||||
serial_listen_addr='127.0.0.1',
|
||||
target_connect_addr=None)
|
||||
target_connect_addr=None,
|
||||
block_migration=False)
|
||||
self.mox.ReplayAll()
|
||||
drvr = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)
|
||||
self.assertRaises(exception.MigrationError,
|
||||
@ -7384,7 +7393,8 @@ class LibvirtConnTestCase(test.NoDBTestCase):
|
||||
graphics_listen_addr_spice='127.0.0.1',
|
||||
serial_listen_addr='127.0.0.1',
|
||||
target_connect_addr=None,
|
||||
bdms=[])
|
||||
bdms=[],
|
||||
block_migration=False)
|
||||
self.mox.ReplayAll()
|
||||
self.assertRaises(fakelibvirt.libvirtError,
|
||||
drvr._live_migration_operation,
|
||||
@ -7431,7 +7441,8 @@ class LibvirtConnTestCase(test.NoDBTestCase):
|
||||
graphics_listen_addr_spice='127.0.0.1',
|
||||
serial_listen_addr='127.0.0.1',
|
||||
target_connect_addr=None,
|
||||
bdms=[])
|
||||
bdms=[],
|
||||
block_migration=False)
|
||||
drvr = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)
|
||||
|
||||
self.mox.StubOutWithMock(
|
||||
@ -8019,7 +8030,7 @@ class LibvirtConnTestCase(test.NoDBTestCase):
|
||||
dom = fakelibvirt.Domain(drvr._get_connection(),
|
||||
"<domain><name>demo</name></domain>", True)
|
||||
guest = libvirt_guest.Guest(dom)
|
||||
migrate_data = {}
|
||||
migrate_data = objects.LibvirtLiveMigrateData(block_migration=True)
|
||||
disks_to_copy = (['/some/path/one', '/test/path/two'],
|
||||
['vda', 'vdb'])
|
||||
mock_copy_disk_path.return_value = disks_to_copy
|
||||
|
@ -663,7 +663,7 @@ class _VirtDriverTestCase(_FakeDriverBackendTestCase):
|
||||
fake_context = context.RequestContext('fake', 'fake')
|
||||
migration = objects.Migration(context=fake_context, id=1)
|
||||
migrate_data = objects.LibvirtLiveMigrateData(
|
||||
migration=migration, bdms=[])
|
||||
migration=migration, bdms=[], block_migration=False)
|
||||
self.connection.live_migration(self.ctxt, instance_ref, 'otherhost',
|
||||
lambda *a: None, lambda *a: None,
|
||||
migrate_data=migrate_data)
|
||||
|
@ -5968,7 +5968,7 @@ class LibvirtDriver(driver.ComputeDriver):
|
||||
guest = libvirt_guest.Guest(dom)
|
||||
|
||||
try:
|
||||
if block_migration:
|
||||
if migrate_data.block_migration:
|
||||
migration_flags = self._block_migration_flags
|
||||
else:
|
||||
migration_flags = self._live_migration_flags
|
||||
@ -6460,7 +6460,7 @@ class LibvirtDriver(driver.ComputeDriver):
|
||||
|
||||
disk_paths = []
|
||||
device_names = []
|
||||
if block_migration:
|
||||
if migrate_data.block_migration:
|
||||
disk_paths, device_names = self._live_migration_copy_disk_paths(
|
||||
context, instance, guest)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user