neutron/neutron/services
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
..
auto_allocate Fix pep8 E128 warnings in non-test code 2019-03-12 21:22:33 +00:00
externaldns Fix all pep8 E129 errors 2018-05-03 13:44:04 +09:00
flavors Implement filter validation 2018-07-19 04:13:43 +00:00
l3_router use api def ALIAS in _supported_extension_aliases 2019-02-15 11:26:28 -07:00
logapi remove neutron.common.rpc 2019-02-06 11:05:55 -07:00
loki use sqla functions from neutron-lib 2018-07-25 21:04:20 +00:00
metering Retry creating iptables managers and adding metering rules 2019-11-06 14:11:38 +00:00
network_ip_availability Fix pep8 E128 warnings in non-test code 2019-03-12 21:22:33 +00:00
network_segment_range Fix error 500 during segment range creation 2019-04-09 06:48:54 +00:00
placement_report Locate RP-tree parent by hypervisor name 2019-12-23 12:11:14 +01:00
portforwarding Add dependency for service plugin 2019-02-16 00:17:53 +08:00
qos Refactor qos_plugin._extend_port_resource_request 2019-07-05 16:39:11 +00:00
rbac Neutron RBAC API and network support 2015-08-20 20:00:17 -07:00
revisions Merge "Fix _find_related_obj() RuntimeError output" 2019-03-02 06:41:04 +00:00
segments Fix pep8 E128 warnings in non-test code 2019-03-12 21:22:33 +00:00
tag Fix pep8 E128 warnings in non-test code 2019-03-12 21:22:33 +00:00
timestamp remove the neutron.db._model_query module 2019-01-25 08:55:25 -07:00
trunk Wait before deleting trunk bridges for DPDK vhu 2020-04-03 21:11:37 +00:00
__init__.py Empty files should not contain copyright or license 2014-10-20 00:50:32 +00:00
provider_configuration.py Merge "Select service_provider on the basis of service_module" 2018-11-15 12:47:09 +00:00
service_base.py Make code follow log translation guideline 2017-08-14 02:01:48 +00:00