Updating the external_ids of the Chassis table will trigger a re-computation of the flows by ovn-controller [0], this is not ideal since the external_ids column should be used by external systems using OVN and not something that OVN itself should care about. For example, in OpenStack, we do use this column extensively to map things related to what is running in each hypervisor (e.g, OVN metadata agent). At the moment, ovn-controller sets a few configurations options the external_ids column (ovn-bridge-mappings, ovn-chassis-mac-bindings, etc... [1]), I believe mostly of this configurations (if not all) are copied from the OVS database to the Chassis' external_ids column by ovn-controller, my suggestions would be to avoid this by creating another column in the Chassis table (e.g other_config) to hold these configurations and then we can omit alerts to the external_ids one. This needs more investigation but, if all configurations are coming from the OVS database this work can be done in a backwards compatible way by falling back to the old external_ids column in case the new column does not yet exist in the OVSDB. [0] https://github.com/ovn-org/ovn/blob/b78a27a9fbe57f6cc61574cb0f2b99723987a090/controller/ovn-controller.c#L1862 [1] http://www.openvswitch.org/support/dist-docs/ovn-controller.8.html
*** Bug 1824424 has been marked as a duplicate of this bug. ***
I've uplodade a potential fix for the problem at https://patchwork.ozlabs.org/project/openvswitch/patch/20200507101216.27575-1-lmartins@redhat.com/
test with following script: #!/bin/bash systemctl start openvswitch systemctl start ovn-northd ovn-nbctl set-connection ptcp:6641 ovn-sbctl set-connection ptcp:6642 ovs-vsctl set open . external_ids:system-id=hv1 external_ids:ovn-remote=tcp:127.0.0.1:6642 external_ids:ovn-encap-type=geneve external_ids:ovn-encap-ip=127.0.0.1 systemctl restart ovn-controller ovn-nbctl ls-add ls1 ovn-nbctl lsp-add ls1 ls1p1 ovn-nbctl lsp-set-addresses ls1p1 "00:00:00:01:01:02 192.168.1.1" ovn-nbctl lsp-add ls1 ls1p2 ovn-nbctl lsp-set-addresses ls1p2 "00:00:00:01:02:02 192.168.1.2" ovs-vsctl add-port br-int p1 -- set interface p1 type=internal ip netns add p1 ip link set p1 netns p1 ip netns exec p1 ip link set p1 address 00:00:00:01:01:02 ip netns exec p1 ip link set p1 up ip netns exec p1 ip addr add 192.168.1.1/24 dev p1 ovs-vsctl set interface p1 external_ids:iface-id=ls1p1 ovs-vsctl add-port br-int p2 -- set interface p2 type=internal ip netns add p2 ip link set p2 netns p2 ip netns exec p2 ip link set p2 address 00:00:00:01:02:02 ip netns exec p2 ip link set p2 up ip netns exec p2 ip addr add 192.168.1.2/24 dev p2 ovs-vsctl set interface p2 external_ids:iface-id=ls1p2 ovn-nbctl --wait=hv sync ovn-appctl -t ovn-controller coverage/read-counter lflow_run ovn-sbctl set chassis hv1 external_ids:foo=bar ovn-appctl -t ovn-controller coverage/read-counter lflow_run reproduced on ovn2.13.0-39: [root@dell-per740-42 bz1824220]# rpm -qa | grep -E "openvswitch|ovn" openvswitch2.13-2.13.0-45.el7fdp.x86_64 ovn2.13-central-2.13.0-39.el7fdp.x86_64 openvswitch-selinux-extra-policy-1.0-15.el7fdp.noarch kernel-kernel-networking-openvswitch-ovn-common-1.0-7.noarch ovn2.13-2.13.0-39.el7fdp.x86_64 ovn2.13-host-2.13.0-39.el7fdp.x86_64 + ip netns exec p2 ip addr add 192.168.1.2/24 dev p2 + ovs-vsctl set interface p2 external_ids:iface-id=ls1p2 + ovn-nbctl --wait=hv sync + ovn-appctl -t ovn-controller coverage/read-counter lflow_run 3 + ovn-sbctl set chassis hv1 external_ids:foo=bar + ovn-appctl -t ovn-controller coverage/read-counter lflow_run 4 <=== flow increases verified on ovn2.13-host-20.06.2-1.el7fdp.x86_64: + ip netns exec p2 ip link set p2 up + ip netns exec p2 ip addr add 192.168.1.2/24 dev p2 + ovs-vsctl set interface p2 external_ids:iface-id=ls1p2 + ovn-nbctl --wait=hv sync + ovn-appctl -t ovn-controller coverage/read-counter lflow_run 1 + ovn-sbctl set chassis hv1 external_ids:foo=bar + ovn-appctl -t ovn-controller coverage/read-counter lflow_run 1 <=== flow doesn't increase
also verified on rhel8 version: [root@dell-per740-12 bz1824220]# rpm -qa | grep -E "openvswitch|ovn" ovn2.13-20.06.2-1.el8fdp.x86_64 ovn2.13-host-20.06.2-1.el8fdp.x86_64 openvswitch2.13-2.13.0-54.el8fdp.x86_64 kernel-kernel-networking-openvswitch-ovn-common-1.0-7.noarch python3-openvswitch2.13-2.13.0-54.el8fdp.x86_64 ovn2.13-central-20.06.2-1.el8fdp.x86_64 openvswitch-selinux-extra-policy-1.0-23.el8fdp.noarch + ip netns exec p2 ip addr add 192.168.1.2/24 dev p2 + ovs-vsctl set interface p2 external_ids:iface-id=ls1p2 + ovn-nbctl --wait=hv sync + ovn-appctl -t ovn-controller coverage/read-counter lflow_run 1 + ovn-sbctl set chassis hv1 external_ids:foo=bar + ovn-appctl -t ovn-controller coverage/read-counter lflow_run 1 <== flow doesn't increase
Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory (ovn2.13 bug fix and enhancement update), and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. https://access.redhat.com/errata/RHBA-2020:3769