Bug 1673690 - OSP14 Hackfest: OVN Neutron network MTU never get applied
Summary: OSP14 Hackfest: OVN Neutron network MTU never get applied
Keywords:
Status: CLOSED ERRATA
Alias: None
Product: Red Hat OpenStack
Classification: Red Hat
Component: python-networking-ovn
Version: 14.0 (Rocky)
Hardware: All
OS: Linux
medium
medium
Target Milestone: ---
: ---
Assignee: Kamil Sambor
QA Contact: Eran Kuris
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2019-02-07 19:11 UTC by Joe Antkowiak
Modified: 2019-11-06 16:50 UTC (History)
5 users (show)

Fixed In Version: python-networking-ovn-5.0.2-0.20190430191341.e673daf.el7ost
Doc Type: If docs needed, set a value
Doc Text:
Clone Of:
Environment:
Last Closed: 2019-11-06 16:50:27 UTC
Target Upstream Version:
Embargoed:


Attachments (Terms of Use)


Links
System ID Private Priority Status Summary Last Updated
Launchpad 1816449 0 None None None 2019-02-19 13:20:27 UTC
OpenStack gerrit 645483 0 None MERGED Propagate mtu to all subnets 2021-02-14 09:51:29 UTC
Red Hat Product Errata RHBA-2019:3750 0 None None None 2019-11-06 16:50:55 UTC

Description Joe Antkowiak 2019-02-07 19:11:50 UTC
Description of problem:
After completing an OVS>OVN migration, attempting to reduce the MTU on a new neutron tenant network (1442 to 1400), the new MTU never gets applied.

MTU was lowered by:

(overcloud) [stack@joea-director14 ~]$ openstack network show tenant2
+---------------------------+--------------------------------------+
| Field                     | Value                                |
+---------------------------+--------------------------------------+
| admin_state_up            | UP                                   |
| availability_zone_hints   |                                      |
| availability_zones        |                                      |
| created_at                | 2019-02-07T17:16:19Z                 |
| description               |                                      |
| dns_domain                |                                      |
| id                        | df1f839c-958e-4984-8bbf-52cdfcfde6be |
| ipv4_address_scope        | None                                 |
| ipv6_address_scope        | None                                 |
| is_default                | None                                 |
| is_vlan_transparent       | None                                 |
| mtu                       | 1442                                 |
| name                      | tenant2                              |
| port_security_enabled     | True                                 |
| project_id                | 093a314be2d24707a21fcb75a4bc65a6     |
| provider:network_type     | geneve                               |
| provider:physical_network | None                                 |
| provider:segmentation_id  | 32                                   |
| qos_policy_id             | None                                 |
| revision_number           | 7                                    |
| router:external           | Internal                             |
| segments                  | None                                 |
| shared                    | False                                |
| status                    | ACTIVE                               |
| subnets                   | 79957257-6aaa-4814-b36d-97b4098697f5 |
| tags                      |                                      |
| updated_at                | 2019-02-07T17:37:31Z                 |
+---------------------------+--------------------------------------+
(overcloud) [stack@joea-director14 ~]$ openstack network set --mtu 1400 tenant2                                                                                                                                  
(overcloud) [stack@joea-director14 ~]$ openstack network show tenant2
+---------------------------+--------------------------------------+
| Field                     | Value                                |
+---------------------------+--------------------------------------+
| admin_state_up            | UP                                   |
| availability_zone_hints   |                                      |
| availability_zones        |                                      |
| created_at                | 2019-02-07T17:16:19Z                 |
| description               |                                      |
| dns_domain                |                                      |
| id                        | df1f839c-958e-4984-8bbf-52cdfcfde6be |
| ipv4_address_scope        | None                                 |
| ipv6_address_scope        | None                                 |
| is_default                | None                                 |
| is_vlan_transparent       | None                                 |
| mtu                       | 1400                                 |
| name                      | tenant2                              |
| port_security_enabled     | True                                 |
| project_id                | 093a314be2d24707a21fcb75a4bc65a6     |
| provider:network_type     | geneve                               |
| provider:physical_network | None                                 |
| provider:segmentation_id  | 32                                   |
| qos_policy_id             | None                                 |
| revision_number           | 7                                    |
| router:external           | Internal                             |
| segments                  | None                                 |
| shared                    | False                                |
| status                    | ACTIVE                               |
| subnets                   | 79957257-6aaa-4814-b36d-97b4098697f5 |
| tags                      |                                      |
| updated_at                | 2019-02-07T17:37:31Z                 |
+---------------------------+--------------------------------------+
 

I tried restarting all ovn and neutron containers, as well as services running on the host OS on controllers and compute nodes, but nothing has made this update.

I've been verifying by restarting rhel7.6 instances on the tenant network, MTU received via DHCP has remained 1442.


Version-Release number of selected component (if applicable):

OSP14

How reproducible:

Easily

Steps to Reproduce:
1. Deploy OSP14 with OVS, perform OVS>OVN migration
2. Create new tenant networks (geneve) and start instances on this network
3. Modify neutron MTU for network down to 1400, restart controllers and compute nodes, start instances again, see that MTU from DHCP is still 1442.

Actual results:

MTU does not change

Expected results:

MTU should change -- instances should be informed of 1400 MTU after restart


Additional info:
OSP14 Hackfest

Comment 1 Daniel Alvarez Sanchez 2019-02-08 16:13:40 UTC
I confirm this is a bug :)

[centos@centos ~]$ openstack network set --mtu 1400 tenant1
[centos@centos ~]$ sudo ovn-nbctl list dhcp_options
_uuid               : 42089f8b-b1f7-4585-829e-4e90c82a292e
cidr                : "20.0.0.0/24"
external_ids        : {"neutron:revision_number"="0", subnet_id="4dbceb38-fa80-4af5-8916-643e7c8a8d1c"}
options             : {dns_server="{10.200.16.3, 10.200.16.2, 10.200.16.4}", lease_time="43200", mtu="1442", router="20.0.0.1", server_id="20.0.0.1", server_mac="fa:16:3e:c8:a5:64"}

Comment 2 Daniel Alvarez Sanchez 2019-02-08 16:22:09 UTC
It has nothing to do with

Comment 3 Daniel Alvarez Sanchez 2019-02-08 16:32:38 UTC
This has nothing to do with the migration, hence, changing the title of the BZ.

Currently networking-ovn won't honor any MTU changes to the network.
The reason this is happening is that networking-ovn maps subnets to OVN DHCP_Options rows (where we store the MTU). As, from API perspective, the MTU is applied per network, updating the network won't get all it subnets updated, hence the MTU change is not applied to the DHCP_Options table.

I could confirm it by just updating the subnet by changing the name for example:


[centos@centos ~]$ openstack network set --mtu 1400 tenant1
[centos@centos ~]$ sudo ovn-nbctl list dhcp_options
_uuid               : 42089f8b-b1f7-4585-829e-4e90c82a292e
cidr                : "20.0.0.0/24"
external_ids        : {"neutron:revision_number"="0", subnet_id="4dbceb38-fa80-4af5-8916-643e7c8a8d1c"}
options             : {dns_server="{10.200.16.3, 10.200.16.2, 10.200.16.4}", lease_time="43200", mtu="1442", router="20.0.0.1", server_id="20.0.0.1", server_mac="fa:16:3e:c8:a5:64"}

[centos@centos networking-ovn]$ sudo ovn-nbctl list dhcp_options
_uuid               : b29962c9-2a78-4ae7-b243-d5d516b02ec2
cidr                : "172.24.4.0/24"
external_ids        : {"neutron:revision_number"="0", subnet_id="5f7fa556-1d2b-4fca-b2fa-91202c3b3d74"}
options             : {dns_server="{10.200.16.3, 10.200.16.2, 10.200.16.4}", lease_time="43200", mtu="1442", router="172.24.4.1", server_id="172.24.4.1", server_mac="fa:16:3e:92:f1:81"}

[centos@centos networking-ovn]$ openstack subnet set --name subnet11 subnet1
_uuid               : 42089f8b-b1f7-4585-829e-4e90c82a292e
cidr                : "20.0.0.0/24"
external_ids        : {"neutron:revision_number"="1", subnet_id="4dbceb38-fa80-4af5-8916-643e7c8a8d1c"}
options             : {dns_server="{10.200.16.3, 10.200.16.2, 10.200.16.4}", lease_time="43200", mtu="1400", router="20.0.0.1", server_id="20.0.0.1", server_mac="fa:16:3e:c8:a5:64"}


The fix should be easy: when updating a network [0], if the MTU changed, update all subnets within that network as well.
And add testing coverage.

[0] https://github.com/openstack/networking-ovn/blob/0cf3e6643af5e45ae62ed26d009e892a20dabd7a/networking_ovn/common/ovn_client.py#L1376

Comment 4 Joe Antkowiak 2019-02-08 17:12:42 UTC
Thanks for looking at this.

I did poke at this issue a bit more after opening the bug, and I further observed that after restarting all controllers, computes, and instances, L2 transport for the tenant network is using the new lower MTU (1400), but DHCP option is still sending the original higher MTU (1442), so I wound up with packet loss at packets larger than 1400 bytes.

Comment 7 errata-xmlrpc 2019-11-06 16:50:27 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, 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-2019:3750


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