neutron/neutron/services/trunk
Nate Johnston 355f454747 Wait before deleting trunk bridges for DPDK vhu
DPDK vhostuser mode (DPDK/vhu) means that when an instance is powered
off the port is deleted, and when an instance is powered on a port is
created.  This means a reboot is functionally a super fast
delete-then-create.  Neutron trunking mode in combination with DPDK/vhu
implements a trunk bridge for each tenant, and the ports for the
instances are created as subports of that bridge.  The standard way a
trunk bridge works is that when all the subports are deleted, a thread
is spawned to delete the trunk bridge, because that is an expensive and
time-consuming operation.  That means that if the port in question is
the only port on the trunk on that compute node, this happens:

1. The port is deleted
2. A thread is spawned to delete the trunk
3. The port is recreated

If the trunk is deleted after #3 happens then the instance has no
networking and is inaccessible; this is the scenario that was dealt with
in a previous change [1].  But there continue to be issues with errors
"RowNotFound: Cannot find Bridge with name=tbr-XXXXXXXX-X".  What is
happening in this case is that the trunk is being deleted in the middle
of the execution of #3, so that it stops existing in the middle of the
port creation logic but before the port is actually recreated.

Since this is a timing issue between two different threads it's
difficult to stamp out entirely, but I think the best way to do it is to
add a slight delay in the trunk deletion thread, just a second or two.
That will give the port time to come back online and avoid the trunk
deletion entirely.

[1] https://review.opendev.org/623275

Related-Bug: #1869244
Change-Id: I36a98fe5da85da1f3a0315dd1a470f062de6f38b
(cherry picked from commit e37722c0f5)
2020-04-03 21:11:37 +00:00
..
drivers Wait before deleting trunk bridges for DPDK vhu 2020-04-03 21:11:37 +00:00
rpc Add retries to update trunk port 2020-01-14 09:15:35 +01:00
seg_types use plugin common utils from neutron-lib 2018-04-17 12:06:28 -06:00
__init__.py Revisit support for trunk segmentation types 2016-09-02 15:37:09 +00:00
callbacks.py use callback payloads for PRECOMMIT_UPDATE events 2018-03-13 11:38:19 -06:00
constants.py Inherit segmentation details for trunk subports if requested 2017-04-03 21:22:38 -07:00
exceptions.py Merge "Check MTU sanity of trunk port subports" 2016-09-05 16:36:27 +00:00
models.py Tag mechanism supports resources with standard attribute 2017-07-25 08:14:04 +09:00
plugin.py Ensure driver error preventing trunk port deletion is logged 2020-02-04 12:30:01 -05:00
rules.py use payloads for PORT BEFORE_DELETE callbacks 2019-01-30 11:30:40 -07:00
utils.py use is_extension_supported from neutron-lib 2018-03-12 09:28:52 -06:00