Merge "only wait for plugtime events in pre-live-migration"
This commit is contained in:
commit
ce49cda424
|
@ -8057,12 +8057,12 @@ class ComputeManager(manager.Manager):
|
|||
LOG.error(msg, msg_args)
|
||||
|
||||
@staticmethod
|
||||
def _get_neutron_events_for_live_migration(instance):
|
||||
def _get_neutron_events_for_live_migration(instance, migration):
|
||||
# We don't generate events if CONF.vif_plugging_timeout=0
|
||||
# meaning that the operator disabled using them.
|
||||
if CONF.vif_plugging_timeout:
|
||||
return [('network-vif-plugged', vif['id'])
|
||||
for vif in instance.get_network_info()]
|
||||
return (instance.get_network_info()
|
||||
.get_live_migration_plug_time_events())
|
||||
else:
|
||||
return []
|
||||
|
||||
|
@ -8133,7 +8133,8 @@ class ComputeManager(manager.Manager):
|
|||
"""
|
||||
pass
|
||||
|
||||
events = self._get_neutron_events_for_live_migration(instance)
|
||||
events = self._get_neutron_events_for_live_migration(
|
||||
instance, migration)
|
||||
try:
|
||||
if ('block_migration' in migrate_data and
|
||||
migrate_data.block_migration):
|
||||
|
|
|
@ -468,6 +468,14 @@ class VIF(Model):
|
|||
return (self.is_hybrid_plug_enabled() and not
|
||||
migration.is_same_host())
|
||||
|
||||
@property
|
||||
def has_live_migration_plug_time_event(self):
|
||||
"""Returns whether this VIF's network-vif-plugged external event will
|
||||
be sent by Neutron at "plugtime" - in other words, as soon as neutron
|
||||
completes configuring the network backend.
|
||||
"""
|
||||
return self.is_hybrid_plug_enabled()
|
||||
|
||||
def is_hybrid_plug_enabled(self):
|
||||
return self['details'].get(VIF_DETAILS_OVS_HYBRID_PLUG, False)
|
||||
|
||||
|
@ -529,15 +537,22 @@ class NetworkInfo(list):
|
|||
return jsonutils.dumps(self)
|
||||
|
||||
def get_bind_time_events(self, migration):
|
||||
"""Returns whether any of our VIFs have "bind-time" events. See
|
||||
has_bind_time_event() docstring for more details.
|
||||
"""Returns a list of external events for any VIFs that have
|
||||
"bind-time" events during cold migration.
|
||||
"""
|
||||
return [('network-vif-plugged', vif['id'])
|
||||
for vif in self if vif.has_bind_time_event(migration)]
|
||||
|
||||
def get_live_migration_plug_time_events(self):
|
||||
"""Returns a list of external events for any VIFs that have
|
||||
"plug-time" events during live migration.
|
||||
"""
|
||||
return [('network-vif-plugged', vif['id'])
|
||||
for vif in self if vif.has_live_migration_plug_time_event]
|
||||
|
||||
def get_plug_time_events(self, migration):
|
||||
"""Complementary to get_bind_time_events(), any event that does not
|
||||
fall in that category is a plug-time event.
|
||||
"""Returns a list of external events for any VIFs that have
|
||||
"plug-time" events during cold migration.
|
||||
"""
|
||||
return [('network-vif-plugged', vif['id'])
|
||||
for vif in self if not vif.has_bind_time_event(migration)]
|
||||
|
|
|
@ -9254,24 +9254,41 @@ class ComputeManagerMigrationTestCase(test.NoDBTestCase,
|
|||
"""Tests the various ways that _get_neutron_events_for_live_migration
|
||||
will return an empty list.
|
||||
"""
|
||||
migration = mock.Mock()
|
||||
migration.is_same_host = lambda: False
|
||||
self.assertFalse(migration.is_same_host())
|
||||
|
||||
# 1. no timeout
|
||||
self.flags(vif_plugging_timeout=0)
|
||||
|
||||
with mock.patch.object(self.instance, 'get_network_info') as nw_info:
|
||||
nw_info.return_value = network_model.NetworkInfo(
|
||||
[network_model.VIF(uuids.port1)])
|
||||
[network_model.VIF(uuids.port1, details={
|
||||
network_model.VIF_DETAILS_OVS_HYBRID_PLUG: True})])
|
||||
self.assertTrue(nw_info.return_value[0].is_hybrid_plug_enabled())
|
||||
self.assertEqual(
|
||||
[], self.compute._get_neutron_events_for_live_migration(
|
||||
self.instance))
|
||||
self.instance, migration))
|
||||
|
||||
# 2. no VIFs
|
||||
self.flags(vif_plugging_timeout=300)
|
||||
|
||||
with mock.patch.object(self.instance, 'get_network_info') as nw_info:
|
||||
nw_info.return_value = []
|
||||
nw_info.return_value = network_model.NetworkInfo([])
|
||||
self.assertEqual(
|
||||
[], self.compute._get_neutron_events_for_live_migration(
|
||||
self.instance))
|
||||
self.instance, migration))
|
||||
|
||||
# 3. no plug time events
|
||||
with mock.patch.object(self.instance, 'get_network_info') as nw_info:
|
||||
nw_info.return_value = network_model.NetworkInfo(
|
||||
[network_model.VIF(
|
||||
uuids.port1, details={
|
||||
network_model.VIF_DETAILS_OVS_HYBRID_PLUG: False})])
|
||||
self.assertFalse(nw_info.return_value[0].is_hybrid_plug_enabled())
|
||||
self.assertEqual(
|
||||
[], self.compute._get_neutron_events_for_live_migration(
|
||||
self.instance, migration))
|
||||
|
||||
@mock.patch('nova.compute.rpcapi.ComputeAPI.pre_live_migration')
|
||||
@mock.patch('nova.compute.manager.ComputeManager._post_live_migration')
|
||||
|
@ -9286,9 +9303,11 @@ class ComputeManagerMigrationTestCase(test.NoDBTestCase,
|
|||
wait_for_vif_plugged=True)
|
||||
mock_get_bdms.return_value = objects.BlockDeviceMappingList(objects=[])
|
||||
mock_pre_live_mig.return_value = migrate_data
|
||||
details = {network_model.VIF_DETAILS_OVS_HYBRID_PLUG: True}
|
||||
self.instance.info_cache = objects.InstanceInfoCache(
|
||||
network_info=network_model.NetworkInfo([
|
||||
network_model.VIF(uuids.port1), network_model.VIF(uuids.port2)
|
||||
network_model.VIF(uuids.port1, details=details),
|
||||
network_model.VIF(uuids.port2, details=details)
|
||||
]))
|
||||
self.compute._waiting_live_migrations[self.instance.uuid] = (
|
||||
self.migration, mock.MagicMock()
|
||||
|
@ -9318,11 +9337,12 @@ class ComputeManagerMigrationTestCase(test.NoDBTestCase,
|
|||
of not waiting.
|
||||
"""
|
||||
migrate_data = objects.LibvirtLiveMigrateData()
|
||||
details = {network_model.VIF_DETAILS_OVS_HYBRID_PLUG: True}
|
||||
mock_get_bdms.return_value = objects.BlockDeviceMappingList(objects=[])
|
||||
mock_pre_live_mig.return_value = migrate_data
|
||||
self.instance.info_cache = objects.InstanceInfoCache(
|
||||
network_info=network_model.NetworkInfo([
|
||||
network_model.VIF(uuids.port1)]))
|
||||
network_model.VIF(uuids.port1, details=details)]))
|
||||
self.compute._waiting_live_migrations[self.instance.uuid] = (
|
||||
self.migration, mock.MagicMock()
|
||||
)
|
||||
|
@ -9466,9 +9486,11 @@ class ComputeManagerMigrationTestCase(test.NoDBTestCase,
|
|||
mock_get_bdms.return_value = source_bdms
|
||||
migrate_data = objects.LibvirtLiveMigrateData(
|
||||
wait_for_vif_plugged=True)
|
||||
details = {network_model.VIF_DETAILS_OVS_HYBRID_PLUG: True}
|
||||
self.instance.info_cache = objects.InstanceInfoCache(
|
||||
network_info=network_model.NetworkInfo([
|
||||
network_model.VIF(uuids.port1), network_model.VIF(uuids.port2)
|
||||
network_model.VIF(uuids.port1, details=details),
|
||||
network_model.VIF(uuids.port2, details=details)
|
||||
]))
|
||||
self.compute._waiting_live_migrations = {}
|
||||
fake_migration = objects.Migration(
|
||||
|
|
Loading…
Reference in New Issue