neutron/neutron/tests/unit/plugins/ml2
Rodolfo Alonso Hernandez ab8ad6f06d [OVS] Handle added/removed ports in the same polling iteration
The OVS agent processes the port events in a polling loop. It could
happen (and more frequently in a loaded OVS agent) that the "removed"
and "added" events can happen in the same polling iteration. Because
of this, the same port is detected as "removed" and "added".

When the virtual machine is restarted, the port event sequence is
"removed" and then "added". When both events are captured in the same
iteration, the port is already present in the bridge and the port is
discharted from the "removed" list.

Because the port was removed first and the added, the QoS policies do
not apply anymore (QoS and Queue registers, OF rules). If the QoS
policy does not change, the QoS agent driver will detect it and won't
call the QoS driver methods (based on the OVS agent QoS cache, storing
port and QoS rules). This will lead to an unconfigured port.

This patch solves this issue by detecting this double event and
registering it as "removed_and_added". When the "added" port is
handled, the QoS deletion method is called first (if needed) to remove
the unneded artifacts (OVS registers, OF rules) and remove the QoS
cache (port/QoS policy). Then the QoS policy is applied again on the
port.

NOTE: this is going to be quite difficult to be tested in a fullstack
test.

Conflicts:
      neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py

Change-Id: I51eef168fa8c18a3e4cee57c9ff86046ea9203fd
Closes-Bug: #1845161
(cherry picked from commit 50ffa5173d)
(cherry picked from commit 3eceb6d2ae)
(cherry picked from commit 6376391b45)
2020-02-10 17:44:33 +00:00
..
drivers [OVS] Handle added/removed ports in the same polling iteration 2020-02-10 17:44:33 +00:00
extensions Stop mocking keystoneauth internals 2018-06-02 11:25:20 +00:00
__init__.py Reorganize unit test tree 2015-04-06 23:28:31 +00:00
_test_mech_agent.py fix same mechanism driver called twice bug 2018-02-01 18:51:39 +08:00
base.py use service type constants from neutron_lib plugins 2017-06-27 15:16:05 -06:00
test_agent_scheduler.py Move db agent schedulers test to a more appropriate place 2015-08-24 15:14:13 +03:00
test_db.py Update get_port_binding_host for multiple bindings 2018-07-14 16:42:09 -05:00
test_driver_context.py Use objects instead of SQLA deep copies in PortContext 2017-06-20 01:34:10 -07:00
test_ext_portsecurity.py Refactoring config options for ml2 config opts 2017-09-08 15:34:49 -04:00
test_extension_driver_api.py Refactoring config options for ml2 config opts 2017-09-08 15:34:49 -04:00
test_managers.py Fix ml2 hierarchical port binding driver check error. 2018-07-20 05:57:05 +00:00
test_ovo_rpc.py Stop loading OVOServerRpcInterface in ML2 testcase 2017-04-18 01:27:37 -07:00
test_plugin.py ML2 plugin: extract and postpone limit in port query 2019-09-06 11:18:27 +00:00
test_port_binding.py use get_port_binding_by_status_and_host from lib 2018-07-30 07:10:23 -06:00
test_rpc.py Check for agent restarted after checking for DVR port 2019-08-08 13:03:05 +00:00
test_security_group.py use core resource api defs from lib 2017-11-08 09:48:50 -07:00
test_tracked_resources.py use core resource api defs from lib 2017-11-08 09:48:50 -07:00