Public bug reported:

openstack relase: stable/wallaby

related bugs: https://bugs.launchpad.net/neutron/+bug/2058433
   https://bugs.launchpad.net/neutron/+bug/2035281

In bug(2058433), I encountered a multi-subnet issue, which caused
interconnection issues between multiple subnets. I solved it by adding
multiple fixed_ips to a router_gateway_port.

In bug(2035281), It fundamentally solved my problem, but since I'm in a
production environment, I can't update the source code.

ok, that's fine. But I found a new bug when I add/update/delete multiple
fixed_ips on router_gateway_port .

In the _update_lrouter_port function in ovn_client.py, it will find all
cidr networks through the _get_nets_and_ipv6_ra_confs_for_router_port
function, which will be updated to ovn lsp-route.

When I add fixed_ip multiple times to cause the port to be updated, the
route will be repeated. like below

```shell
docker exec -it ovn_nb_db ovn-nbctl lr-route-list 
c728637d-b8c4-4dd5-b897-28e18b89656a

# xx.xxx is a same prefix.
IPv4 Routes
            172.16.0.0/24                 10.0.0.10 dst-ip
                0.0.0.0/0            xx.xxx.177.129 dst-ip
                0.0.0.0/0            xx.xxx.177.129 dst-ip
                0.0.0.0/0            xx.xxx.203.193 dst-ip
                0.0.0.0/0            xx.xxx.203.193 dst-ip
                0.0.0.0/0            xx.xxx.203.193 dst-ip
                0.0.0.0/0             xx.xxx.203.65 dst-ip
                0.0.0.0/0             xx.xxx.203.65 dst-ip
                0.0.0.0/0             xx.xxx.203.65 dst-ip
                0.0.0.0/0              xx.xxx.234.1 dst-ip
                0.0.0.0/0              xx.xxx.234.1 dst-ip

```

But it won't make any difference

ok, when i delete a fixed_ip on router_gateway_port, it still have a
route.

When I add multiple fixed_ips, it will turn into emcp mode when routing,
and a route will be randomly selected from my several gateways. So when
I delete a fixed_ip but the route still exists, it will not be able to
find the corresponding gateway in ecmp mode.

I think this is because there is only a method in the code for adding,
not updating or deleting. Therefore, it will lead to repeated addition
or inability to delete

in function self._nb_idl.update_lrouter_port, It is

```
        for col, val in self.columns.items():
            if col == 'gateway_chassis':
                col, val = _add_gateway_chassis(self.api, txn, self.name,
                                                val)
            setattr(lrouter_port, col, val)
```

** Affects: neutron
     Importance: Undecided
         Status: New


** Tags: ovn

** Tags added: ovn

** Description changed:

  openstack relase: stable/wallaby
  
- related bugs: https://bugs.launchpad.net/neutron/+bug/2058433 
-    https://bugs.launchpad.net/neutron/+bug/2035281
+ related bugs: https://bugs.launchpad.net/neutron/+bug/2058433
+    https://bugs.launchpad.net/neutron/+bug/2035281
  
  In bug(2058433), I encountered a multi-subnet issue, which caused
  interconnection issues between multiple subnets. I solved it by adding
  multiple fixed_ips to a router_gateway_port.
  
  In bug(2035281), It fundamentally solved my problem, but since I'm in a
  production environment, I can't update the source code.
  
  ok, that's fine. But I found a new bug when I added multiple fixed_ips
  on router_gateway_port .
  
  In the _update_lrouter_port function in ovn_client.py, it will find all
  cidr networks through the _get_nets_and_ipv6_ra_confs_for_router_port
- function, which will be updated to ovn lsp_router.
+ function, which will be updated to ovn lsp-route.
  
  When I add fixed_ip multiple times to cause the port to be updated, the
  route will be repeated. like below
  
  ```shell
  docker exec -it ovn_nb_db ovn-nbctl lr-route-list 
c728637d-b8c4-4dd5-b897-28e18b89656a
  
- # xx.xxx is a same prefix. 
+ # xx.xxx is a same prefix.
  IPv4 Routes
-             172.16.0.0/24                 10.0.0.10 dst-ip
-                 0.0.0.0/0            xx.xxx.177.129 dst-ip
-                 0.0.0.0/0            xx.xxx.177.129 dst-ip
-                 0.0.0.0/0            xx.xxx.203.193 dst-ip
-                 0.0.0.0/0            xx.xxx.203.193 dst-ip
-                 0.0.0.0/0            xx.xxx.203.193 dst-ip
-                 0.0.0.0/0             xx.xxx.203.65 dst-ip
-                 0.0.0.0/0             xx.xxx.203.65 dst-ip
-                 0.0.0.0/0             xx.xxx.203.65 dst-ip
-                 0.0.0.0/0              xx.xxx.234.1 dst-ip
-                 0.0.0.0/0              xx.xxx.234.1 dst-ip
+             172.16.0.0/24                 10.0.0.10 dst-ip
+                 0.0.0.0/0            xx.xxx.177.129 dst-ip
+                 0.0.0.0/0            xx.xxx.177.129 dst-ip
+                 0.0.0.0/0            xx.xxx.203.193 dst-ip
+                 0.0.0.0/0            xx.xxx.203.193 dst-ip
+                 0.0.0.0/0            xx.xxx.203.193 dst-ip
+                 0.0.0.0/0             xx.xxx.203.65 dst-ip
+                 0.0.0.0/0             xx.xxx.203.65 dst-ip
+                 0.0.0.0/0             xx.xxx.203.65 dst-ip
+                 0.0.0.0/0              xx.xxx.234.1 dst-ip
+                 0.0.0.0/0              xx.xxx.234.1 dst-ip
  
  ```
  
  But it won't make any difference
  
  ok, when i delete a fixed_ip on router_gateway_port, it still have a
  route.
  
  When I add multiple fixed_ips, it will turn into emcp mode when routing,
  and a route will be randomly selected from my several gateways. So when
  I delete a fixed_ip but the route still exists, it will not be able to
  find the corresponding gateway in ecmp mode.
  
- 
- I think this is because there is only a method in the code for adding, not 
updating or deleting. Therefore, it will lead to repeated addition or inability 
to delete
- 
+ I think this is because there is only a method in the code for adding,
+ not updating or deleting. Therefore, it will lead to repeated addition
+ or inability to delete
  
  in function self._nb_idl.update_lrouter_port, It is
  
  ```
-         for col, val in self.columns.items():
-             if col == 'gateway_chassis':
-                 col, val = _add_gateway_chassis(self.api, txn, self.name,
-                                                 val)
-             setattr(lrouter_port, col, val)
+         for col, val in self.columns.items():
+             if col == 'gateway_chassis':
+                 col, val = _add_gateway_chassis(self.api, txn, self.name,
+                                                 val)
+             setattr(lrouter_port, col, val)
  ```

** Description changed:

  openstack relase: stable/wallaby
  
  related bugs: https://bugs.launchpad.net/neutron/+bug/2058433
     https://bugs.launchpad.net/neutron/+bug/2035281
  
  In bug(2058433), I encountered a multi-subnet issue, which caused
  interconnection issues between multiple subnets. I solved it by adding
  multiple fixed_ips to a router_gateway_port.
  
  In bug(2035281), It fundamentally solved my problem, but since I'm in a
  production environment, I can't update the source code.
  
- ok, that's fine. But I found a new bug when I added multiple fixed_ips
- on router_gateway_port .
+ ok, that's fine. But I found a new bug when I add/update/delete multiple
+ fixed_ips on router_gateway_port .
  
  In the _update_lrouter_port function in ovn_client.py, it will find all
  cidr networks through the _get_nets_and_ipv6_ra_confs_for_router_port
  function, which will be updated to ovn lsp-route.
  
  When I add fixed_ip multiple times to cause the port to be updated, the
  route will be repeated. like below
  
  ```shell
  docker exec -it ovn_nb_db ovn-nbctl lr-route-list 
c728637d-b8c4-4dd5-b897-28e18b89656a
  
  # xx.xxx is a same prefix.
  IPv4 Routes
              172.16.0.0/24                 10.0.0.10 dst-ip
                  0.0.0.0/0            xx.xxx.177.129 dst-ip
                  0.0.0.0/0            xx.xxx.177.129 dst-ip
                  0.0.0.0/0            xx.xxx.203.193 dst-ip
                  0.0.0.0/0            xx.xxx.203.193 dst-ip
                  0.0.0.0/0            xx.xxx.203.193 dst-ip
                  0.0.0.0/0             xx.xxx.203.65 dst-ip
                  0.0.0.0/0             xx.xxx.203.65 dst-ip
                  0.0.0.0/0             xx.xxx.203.65 dst-ip
                  0.0.0.0/0              xx.xxx.234.1 dst-ip
                  0.0.0.0/0              xx.xxx.234.1 dst-ip
  
  ```
  
  But it won't make any difference
  
  ok, when i delete a fixed_ip on router_gateway_port, it still have a
  route.
  
  When I add multiple fixed_ips, it will turn into emcp mode when routing,
  and a route will be randomly selected from my several gateways. So when
  I delete a fixed_ip but the route still exists, it will not be able to
  find the corresponding gateway in ecmp mode.
  
  I think this is because there is only a method in the code for adding,
  not updating or deleting. Therefore, it will lead to repeated addition
  or inability to delete
  
  in function self._nb_idl.update_lrouter_port, It is
  
  ```
          for col, val in self.columns.items():
              if col == 'gateway_chassis':
                  col, val = _add_gateway_chassis(self.api, txn, self.name,
                                                  val)
              setattr(lrouter_port, col, val)
  ```

-- 
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to neutron.
https://bugs.launchpad.net/bugs/2097747

Title:
  neutron not update ovn routers

Status in neutron:
  New

Bug description:
  openstack relase: stable/wallaby

  related bugs: https://bugs.launchpad.net/neutron/+bug/2058433
     https://bugs.launchpad.net/neutron/+bug/2035281

  In bug(2058433), I encountered a multi-subnet issue, which caused
  interconnection issues between multiple subnets. I solved it by adding
  multiple fixed_ips to a router_gateway_port.

  In bug(2035281), It fundamentally solved my problem, but since I'm in
  a production environment, I can't update the source code.

  ok, that's fine. But I found a new bug when I add/update/delete
  multiple fixed_ips on router_gateway_port .

  In the _update_lrouter_port function in ovn_client.py, it will find
  all cidr networks through the
  _get_nets_and_ipv6_ra_confs_for_router_port function, which will be
  updated to ovn lsp-route.

  When I add fixed_ip multiple times to cause the port to be updated,
  the route will be repeated. like below

  ```shell
  docker exec -it ovn_nb_db ovn-nbctl lr-route-list 
c728637d-b8c4-4dd5-b897-28e18b89656a

  # xx.xxx is a same prefix.
  IPv4 Routes
              172.16.0.0/24                 10.0.0.10 dst-ip
                  0.0.0.0/0            xx.xxx.177.129 dst-ip
                  0.0.0.0/0            xx.xxx.177.129 dst-ip
                  0.0.0.0/0            xx.xxx.203.193 dst-ip
                  0.0.0.0/0            xx.xxx.203.193 dst-ip
                  0.0.0.0/0            xx.xxx.203.193 dst-ip
                  0.0.0.0/0             xx.xxx.203.65 dst-ip
                  0.0.0.0/0             xx.xxx.203.65 dst-ip
                  0.0.0.0/0             xx.xxx.203.65 dst-ip
                  0.0.0.0/0              xx.xxx.234.1 dst-ip
                  0.0.0.0/0              xx.xxx.234.1 dst-ip

  ```

  But it won't make any difference

  ok, when i delete a fixed_ip on router_gateway_port, it still have a
  route.

  When I add multiple fixed_ips, it will turn into emcp mode when
  routing, and a route will be randomly selected from my several
  gateways. So when I delete a fixed_ip but the route still exists, it
  will not be able to find the corresponding gateway in ecmp mode.

  I think this is because there is only a method in the code for adding,
  not updating or deleting. Therefore, it will lead to repeated addition
  or inability to delete

  in function self._nb_idl.update_lrouter_port, It is

  ```
          for col, val in self.columns.items():
              if col == 'gateway_chassis':
                  col, val = _add_gateway_chassis(self.api, txn, self.name,
                                                  val)
              setattr(lrouter_port, col, val)
  ```

To manage notifications about this bug go to:
https://bugs.launchpad.net/neutron/+bug/2097747/+subscriptions


-- 
Mailing list: https://launchpad.net/~yahoo-eng-team
Post to     : yahoo-eng-team@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yahoo-eng-team
More help   : https://help.launchpad.net/ListHelp

Reply via email to