Add debug logs to OVSInterfaceDriver.plug_new

DVR lifecycle functional tests fail frequently with exceptions
like this: "Network interface * not found in namespace *"
The reproduction locally is hard if possible, so by adding
extra log messages I hope we can have more clue where to find
the possible root cause of this issue.

Change-Id: I2c6acf3c29f3d1e7574240376f7bcb46c98579c6
Related-Bug: #1995031
This commit is contained in:
elajkat 2023-01-10 10:51:17 +01:00
parent 1374b01cfb
commit de0918cea3
2 changed files with 11 additions and 0 deletions

View File

@ -401,6 +401,9 @@ class OVSInterfaceDriver(LinuxInterfaceDriver):
root_dev.disable_ipv6() root_dev.disable_ipv6()
else: else:
ns_dev = ip.device(device_name) ns_dev = ip.device(device_name)
if not ns_dev:
LOG.warning("Device %s is not ready in namespace %s!",
device_name, namespace)
internal = not self.conf.ovs_use_veth internal = not self.conf.ovs_use_veth
self._ovs_add_port(bridge, tap_name, port_id, mac_address, self._ovs_add_port(bridge, tap_name, port_id, mac_address,
@ -429,6 +432,13 @@ class OVSInterfaceDriver(LinuxInterfaceDriver):
with excutils.save_and_reraise_exception(): with excutils.save_and_reraise_exception():
ovs = ovs_lib.OVSBridge(bridge) ovs = ovs_lib.OVSBridge(bridge)
ovs.delete_port(tap_name) ovs.delete_port(tap_name)
except Exception as exc:
LOG.warning("Failed to plug interface %s to bridge %s in "
"namespace %s due to unknown reason: %s",
device_name, bridge, namespace, str(exc))
with excutils.save_and_reraise_exception():
ovs = ovs_lib.OVSBridge(bridge)
ovs.delete_port(tap_name)
# NOTE(ihrachys): the order here is significant: we must set MTU after # NOTE(ihrachys): the order here is significant: we must set MTU after
# the device is moved into a namespace, otherwise OVS bridge does not # the device is moved into a namespace, otherwise OVS bridge does not

View File

@ -461,6 +461,7 @@ class TestOVSInterfaceDriver(TestBase):
expected = [ expected = [
mock.call(), mock.call(),
mock.call().device('tap0'), mock.call().device('tap0'),
mock.ANY,
mock.call().device().link.set_address('aa:bb:cc:dd:ee:ff'), mock.call().device().link.set_address('aa:bb:cc:dd:ee:ff'),
mock.call().device().link.set_address('aa:bb:cc:dd:ee:ff')] mock.call().device().link.set_address('aa:bb:cc:dd:ee:ff')]
if namespace: if namespace: