The FDP team is no longer accepting new bugs in Bugzilla. Please report your issues under FDP project in Jira. Thanks.
Bug 1824220 - ovn-controller should avoid flow re-computation on updates to the Chassis' external_ids column
Summary: ovn-controller should avoid flow re-computation on updates to the Chassis' ex...
Keywords:
Status: CLOSED ERRATA
Alias: None
Product: Red Hat Enterprise Linux Fast Datapath
Classification: Red Hat
Component: ovn2.13
Version: RHEL 8.0
Hardware: Unspecified
OS: Unspecified
high
high
Target Milestone: ---
: ---
Assignee: Lucas Alvares Gomes
QA Contact: Jianlin Shi
URL:
Whiteboard:
: 1824424 (view as bug list)
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2020-04-15 15:12 UTC by Lucas Alvares Gomes
Modified: 2020-09-16 16:01 UTC (History)
7 users (show)

Fixed In Version: 20.
Doc Type: If docs needed, set a value
Doc Text:
Clone Of:
Environment:
Last Closed: 2020-09-16 16:01:23 UTC
Target Upstream Version:
Embargoed:


Attachments (Terms of Use)


Links
System ID Private Priority Status Summary Last Updated
Red Hat Product Errata RHBA-2020:3769 0 None None None 2020-09-16 16:01:39 UTC

Description Lucas Alvares Gomes 2020-04-15 15:12:11 UTC
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

Comment 1 Lucas Alvares Gomes 2020-04-16 08:38:42 UTC
*** Bug 1824424 has been marked as a duplicate of this bug. ***

Comment 2 Lucas Alvares Gomes 2020-05-07 10:33:07 UTC
I've uplodade a potential fix for the problem at https://patchwork.ozlabs.org/project/openvswitch/patch/20200507101216.27575-1-lmartins@redhat.com/

Comment 7 Jianlin Shi 2020-08-26 06:04:43 UTC
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

Comment 8 Jianlin Shi 2020-08-26 06:06:31 UTC
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

Comment 10 errata-xmlrpc 2020-09-16 16:01:23 UTC
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


Note You need to log in before you can comment on or make changes to this bug.