Merge "Handle unbound vif plug errors on compute restart" into stable/queens

This commit is contained in:
Zuul 2019-01-26 12:37:55 +00:00 committed by Gerrit Code Review
commit 9cc0a58cf1
3 changed files with 28 additions and 5 deletions

View File

@ -962,11 +962,11 @@ class ComputeManager(manager.Manager):
LOG.debug(e, instance=instance)
except exception.VirtualInterfacePlugException:
# NOTE(mriedem): If we get here, it could be because the vif_type
# in the cache is "binding_failed". The only way to fix that is to
# try and bind the ports again, which would be expensive here on
# host startup. We could add a check to _heal_instance_info_cache
# to handle this, but probably only if the instance task_state is
# None.
# in the cache is "binding_failed" or "unbound". The only way to
# fix this is to try and bind the ports again, which would be
# expensive here on host startup. We could add a check to
# _heal_instance_info_cache to handle this, but probably only if
# the instance task_state is None.
LOG.exception('Virtual interface plugging failed for instance. '
'The port binding:host_id may need to be manually '
'updated.', instance=instance)

View File

@ -482,6 +482,18 @@ def _nova_to_osvif_vif_binding_failed(vif):
raise NotImplementedError()
# VIF_TYPE_UNBOUND = 'unbound'
def _nova_to_osvif_vif_unbound(vif):
"""Special handler for the "unbound" vif type.
The "unbound" vif type indicates a port has not been hooked up to backend
network driver (OVS, linux bridge, ...). We raise NotImplementedError to
indicate to the caller that we cannot handle this type of vif rather than
the generic "Unsupported VIF type" error in nova_to_osvif_vif.
"""
raise NotImplementedError()
def nova_to_osvif_vif(vif):
"""Convert a Nova VIF model to an os-vif object

View File

@ -1004,6 +1004,17 @@ class OSVIFUtilTestCase(test.NoDBTestCase):
subnets=[]),)
self.assertIsNone(os_vif_util.nova_to_osvif_vif(vif))
def test_nova_to_osvif_vif_unbound(self):
vif = model.VIF(
id="dc065497-3c8d-4f44-8fb4-e1d33c16a536",
type="unbound",
address="22:52:25:62:e2:aa",
network=model.Network(
id="b82c1929-051e-481d-8110-4669916c7915",
label="Demo Net",
subnets=[]),)
self.assertIsNone(os_vif_util.nova_to_osvif_vif(vif))
def test_nova_to_osvif_vhostuser_vrouter(self):
vif = model.VIF(
id="dc065497-3c8d-4f44-8fb4-e1d33c16a536",