Bug 2142591 - ValueError when a router is removed without disconnecting its external interface
Summary: ValueError when a router is removed without disconnecting its external interface
Keywords:
Status: CLOSED ERRATA
Alias: None
Product: Red Hat OpenStack
Classification: Red Hat
Component: ovn-bgp-agent
Version: 17.1 (Wallaby)
Hardware: Unspecified
OS: Unspecified
medium
high
Target Milestone: beta
: 17.1
Assignee: Luis Tomas Bolivar
QA Contact: Eduardo Olivares
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2022-11-14 14:16 UTC by Eduardo Olivares
Modified: 2023-08-16 01:12 UTC (History)
3 users (show)

Fixed In Version: ovn-bgp-agent-0.3.1-1.20221117171123.5388639.el9ost
Doc Type: No Doc Update
Doc Text:
Clone Of:
Environment:
Last Closed: 2023-08-16 01:12:28 UTC
Target Upstream Version:
Embargoed:


Attachments (Terms of Use)


Links
System ID Private Priority Status Summary Last Updated
OpenStack gerrit 864284 0 None NEW Ensure cleanup upon router removal without gateway unset 2022-11-17 06:39:56 UTC
Red Hat Issue Tracker OSP-20153 0 None None None 2022-11-14 14:23:07 UTC
Red Hat Product Errata RHEA-2023:4577 0 None None None 2023-08-16 01:12:52 UTC

Description Eduardo Olivares 2022-11-14 14:16:39 UTC
Description of problem:
The following commands are used to remove routers created during BGP tests:
for r in $(openstack router list -c ID -f value)
do
  for sn in $(openstack router show -c interfaces_info -f json $r | jq -r -c '.[\"interfaces_info\"] | .[][\"subnet_id\"]')
  do
    openstack router remove subnet $r $sn
  done
done
openstack router list -c ID -f value | xargs openstack router delete

The routers are successfully deleted, but the ovn-bgp-agent throws the following exception:
2022-11-10T14:40:18.925755643+00:00 stdout F 2022-11-10 14:40:18.925 99396 DEBUG ovsdbapp.backend.ovs_idl.event [-] Matched DELETE: SubnetRouterDetachedEvent(events=('delete',), table='Port_Binding', conditions=None, old_conditions=None) to row=Port_Binding(mac=['fa:16:3e:52:13:d2 172.24.100.204/24 2001:db8::f816:3eff:fe52:13d2/64'], nat_addresses=[], type=patch, virtual_parent=[], up=[False], options={}, parent_port=[], ha_chassis_group=[], external_ids={'neutron:network_name': 'neutron-86ed3f19-ff19-4b6c-8fe4-a90510d1116d', 'neutron:revision_number': '12', 'neutron:router_name': '89f647d5-82a0-4f50-9b8a-8fc6a5ae0765', 'neutron:subnet_ids': 'ded59e53-a860-45b7-af10-1f85f7e994af b2318df1-f8da-4ba8-939b-addd8c8bd61b'}, tag=[], encap=[], chassis=[], datapath=<ovs.db.data.Atom object at 0x7f5c502d7fd0>, gateway_chassis=[], tunnel_key=1, logical_port=lrp-03723ac6-40a0-4ba9-9c8e-d99057e79b6a, requested_chassis=[]) old= matches /usr/lib/python3.9/site-packages/ovsdbapp/backend/ovs_idl/event.py:43^[[00m
2022-11-10T14:40:18.926299573+00:00 stdout F 2022-11-10 14:40:18.926 99396 DEBUG ovsdbapp.backend.ovs_idl.event [-] Matched DELETE: TenantPortDeletedEvent(events=('update', 'delete'), table='Port_Binding', conditions=None, old_conditions=None) to row=Port_Binding(mac=['fa:16:3e:52:13:d2 172.24.100.204/24 2001:db8::f816:3eff:fe52:13d2/64'], nat_addresses=[], type=patch, virtual_parent=[], up=[False], options={}, parent_port=[], ha_chassis_group=[], external_ids={'neutron:network_name': 'neutron-86ed3f19-ff19-4b6c-8fe4-a90510d1116d', 'neutron:revision_number': '12', 'neutron:router_name': '89f647d5-82a0-4f50-9b8a-8fc6a5ae0765', 'neutron:subnet_ids': 'ded59e53-a860-45b7-af10-1f85f7e994af b2318df1-f8da-4ba8-939b-addd8c8bd61b'}, tag=[], encap=[], chassis=[], datapath=<ovs.db.data.Atom object at 0x7f5c502d7070>, gateway_chassis=[], tunnel_key=1, logical_port=lrp-03723ac6-40a0-4ba9-9c8e-d99057e79b6a, requested_chassis=[]) old= matches /usr/lib/python3.9/site-packages/ovsdbapp/backend/ovs_idl/event.py:43^[[00m
2022-11-10T14:40:18.926895483+00:00 stdout F 2022-11-10 14:40:18.926 99396 DEBUG ovsdbapp.backend.ovs_idl.event [-] Matched DELETE: TenantPortDeletedEvent(events=('update', 'delete'), table='Port_Binding', conditions=None, old_conditions=None) to row=Port_Binding(mac=['fa:16:3e:52:13:d2 172.24.100.204/24 2001:db8::f816:3eff:fe52:13d2/64'], nat_addresses=[], type=chassisredirect, virtual_parent=[], up=[True], options={'distributed-port': 'lrp-03723ac6-40a0-4ba9-9c8e-d99057e79b6a', 'always-redirect': 'true'}, parent_port=[], external_ids={'neutron:network_name': 'neutron-86ed3f19-ff19-4b6c-8fe4-a90510d1116d', 'neutron:revision_number': '12', 'neutron:router_name': '89f647d5-82a0-4f50-9b8a-8fc6a5ae0765', 'neutron:subnet_ids': 'ded59e53-a860-45b7-af10-1f85f7e994af b2318df1-f8da-4ba8-939b-addd8c8bd61b'}, tag=[], encap=[], chassis=[<ovs.db.idl.Row object at 0x7f5c515d3340>], datapath=<ovs.db.data.Atom object at 0x7f5c502d7d00>, gateway_chassis=[], tunnel_key=2, logical_port=cr-lrp-03723ac6-40a0-4ba9-9c8e-d99057e79b6a, requested_chassis=[]) old= matches /usr/lib/python3.9/site-packages/ovsdbapp/backend/ovs_idl/event.py:43^[[00m
2022-11-10T14:40:18.927299472+00:00 stdout F 2022-11-10 14:40:18.927 99396 DEBUG oslo_concurrency.lockutils [-] Lock "bgp" acquired by "ovn_bgp_agent.drivers.openstack.ovn_bgp_driver.OVNBGPDriver.withdraw_subnet" :: waited 0.000s inner /usr/lib/python3.9/site-packages/oslo_concurrency/lockutils.py:355^[[00m
2022-11-10T14:40:18.929277381+00:00 stdout F 2022-11-10 14:40:18.928 99396 ERROR ovsdbapp.backend.ovs_idl.command [-] Error executing command (DbFindCommand): ValueError: Column type and condition operand do not match
2022-11-10T14:40:18.929277381+00:00 stdout F 2022-11-10 14:40:18.928 99396 ERROR ovsdbapp.backend.ovs_idl.command Traceback (most recent call last):
2022-11-10T14:40:18.929277381+00:00 stdout F 2022-11-10 14:40:18.928 99396 ERROR ovsdbapp.backend.ovs_idl.command   File "/usr/lib/python3.9/site-packages/ovsdbapp/backend/ovs_idl/command.py", line 39, in execute
2022-11-10T14:40:18.929277381+00:00 stdout F 2022-11-10 14:40:18.928 99396 ERROR ovsdbapp.backend.ovs_idl.command     self.run_idl(None)
2022-11-10T14:40:18.929277381+00:00 stdout F 2022-11-10 14:40:18.928 99396 ERROR ovsdbapp.backend.ovs_idl.command   File "/usr/lib/python3.9/site-packages/ovsdbapp/backend/ovs_idl/command.py", line 314, in run_idl
2022-11-10T14:40:18.929277381+00:00 stdout F 2022-11-10 14:40:18.928 99396 ERROR ovsdbapp.backend.ovs_idl.command     self.result = [
2022-11-10T14:40:18.929277381+00:00 stdout F 2022-11-10 14:40:18.928 99396 ERROR ovsdbapp.backend.ovs_idl.command   File "/usr/lib/python3.9/site-packages/ovsdbapp/backend/ovs_idl/command.py", line 319, in <listcomp>
2022-11-10T14:40:18.929277381+00:00 stdout F 2022-11-10 14:40:18.928 99396 ERROR ovsdbapp.backend.ovs_idl.command     for r in rows if idlutils.row_match(r, self.conditions)
2022-11-10T14:40:18.929277381+00:00 stdout F 2022-11-10 14:40:18.928 99396 ERROR ovsdbapp.backend.ovs_idl.command   File "/usr/lib/python3.9/site-packages/ovsdbapp/backend/ovs_idl/idlutils.py", line 412, in row_match
2022-11-10T14:40:18.929277381+00:00 stdout F 2022-11-10 14:40:18.928 99396 ERROR ovsdbapp.backend.ovs_idl.command     return all(condition_match(row, cond) for cond in conditions)
2022-11-10T14:40:18.929277381+00:00 stdout F 2022-11-10 14:40:18.928 99396 ERROR ovsdbapp.backend.ovs_idl.command   File "/usr/lib/python3.9/site-packages/ovsdbapp/backend/ovs_idl/idlutils.py", line 412, in <genexpr>
2022-11-10T14:40:18.929277381+00:00 stdout F 2022-11-10 14:40:18.928 99396 ERROR ovsdbapp.backend.ovs_idl.command     return all(condition_match(row, cond) for cond in conditions)
2022-11-10T14:40:18.929277381+00:00 stdout F 2022-11-10 14:40:18.928 99396 ERROR ovsdbapp.backend.ovs_idl.command   File "/usr/lib/python3.9/site-packages/ovsdbapp/backend/ovs_idl/idlutils.py", line 359, in condition_match
2022-11-10T14:40:18.929277381+00:00 stdout F 2022-11-10 14:40:18.928 99396 ERROR ovsdbapp.backend.ovs_idl.command     raise ValueError(
2022-11-10T14:40:18.929277381+00:00 stdout F 2022-11-10 14:40:18.928 99396 ERROR ovsdbapp.backend.ovs_idl.command ValueError: Column type and condition operand do not match
2022-11-10T14:40:18.929277381+00:00 stdout F 2022-11-10 14:40:18.928 99396 ERROR ovsdbapp.backend.ovs_idl.command ^[[00m
2022-11-10T14:40:18.929389279+00:00 stdout F 2022-11-10 14:40:18.929 99396 DEBUG oslo_concurrency.lockutils [-] Lock "bgp" released by "ovn_bgp_agent.drivers.openstack.ovn_bgp_driver.OVNBGPDriver.withdraw_subnet" :: held 0.002s inner /usr/lib/python3.9/site-packages/oslo_concurrency/lockutils.py:367^[[00m
2022-11-10T14:40:18.929843581+00:00 stdout F 2022-11-10 14:40:18.929 99396 ERROR ovsdbapp.event [-] Unexpected exception in notify_loop: ValueError: Column type and condition operand do not match
2022-11-10T14:40:18.929843581+00:00 stdout F 2022-11-10 14:40:18.929 99396 ERROR ovsdbapp.event Traceback (most recent call last):
2022-11-10T14:40:18.929843581+00:00 stdout F 2022-11-10 14:40:18.929 99396 ERROR ovsdbapp.event   File "/usr/lib/python3.9/site-packages/ovsdbapp/event.py", line 159, in notify_loop
2022-11-10T14:40:18.929843581+00:00 stdout F 2022-11-10 14:40:18.929 99396 ERROR ovsdbapp.event     match.run(event, row, updates)
2022-11-10T14:40:18.929843581+00:00 stdout F 2022-11-10 14:40:18.929 99396 ERROR ovsdbapp.event   File "/usr/lib/python3.9/site-packages/ovn_bgp_agent/drivers/openstack/watchers/bgp_watcher.py", line 206, in run
2022-11-10T14:40:18.929843581+00:00 stdout F 2022-11-10 14:40:18.929 99396 ERROR ovsdbapp.event     self.agent.withdraw_subnet(ip_address, row)
2022-11-10T14:40:18.929843581+00:00 stdout F 2022-11-10 14:40:18.929 99396 ERROR ovsdbapp.event   File "/usr/lib/python3.9/site-packages/oslo_concurrency/lockutils.py", line 360, in inner
2022-11-10T14:40:18.929843581+00:00 stdout F 2022-11-10 14:40:18.929 99396 ERROR ovsdbapp.event     return f(*args, **kwargs)
2022-11-10T14:40:18.929843581+00:00 stdout F 2022-11-10 14:40:18.929 99396 ERROR ovsdbapp.event   File "/usr/lib/python3.9/site-packages/ovn_bgp_agent/drivers/openstack/ovn_bgp_driver.py", line 889, in withdraw_subnet
2022-11-10T14:40:18.929843581+00:00 stdout F 2022-11-10 14:40:18.929 99396 ERROR ovsdbapp.event     cr_lrp = self.sb_idl.is_router_gateway_on_chassis(row.datapath,
2022-11-10T14:40:18.929843581+00:00 stdout F 2022-11-10 14:40:18.929 99396 ERROR ovsdbapp.event   File "/usr/lib/python3.9/site-packages/ovn_bgp_agent/drivers/openstack/utils/ovn.py", line 210, in is_router_gateway_on_chassis
2022-11-10T14:40:18.929843581+00:00 stdout F 2022-11-10 14:40:18.929 99396 ERROR ovsdbapp.event     port_info = self.get_ports_on_datapath(
2022-11-10T14:40:18.929843581+00:00 stdout F 2022-11-10 14:40:18.929 99396 ERROR ovsdbapp.event   File "/usr/lib/python3.9/site-packages/ovn_bgp_agent/drivers/openstack/utils/ovn.py", line 130, in get_ports_on_datapath
2022-11-10T14:40:18.929843581+00:00 stdout F 2022-11-10 14:40:18.929 99396 ERROR ovsdbapp.event     return cmd.execute(check_error=True)
2022-11-10T14:40:18.929843581+00:00 stdout F 2022-11-10 14:40:18.929 99396 ERROR ovsdbapp.event   File "/usr/lib/python3.9/site-packages/ovsdbapp/backend/ovs_idl/command.py", line 39, in execute
2022-11-10T14:40:18.929843581+00:00 stdout F 2022-11-10 14:40:18.929 99396 ERROR ovsdbapp.event     self.run_idl(None)
2022-11-10T14:40:18.929843581+00:00 stdout F 2022-11-10 14:40:18.929 99396 ERROR ovsdbapp.event   File "/usr/lib/python3.9/site-packages/ovsdbapp/backend/ovs_idl/command.py", line 314, in run_idl
2022-11-10T14:40:18.929843581+00:00 stdout F 2022-11-10 14:40:18.929 99396 ERROR ovsdbapp.event     self.result = [
2022-11-10T14:40:18.929843581+00:00 stdout F 2022-11-10 14:40:18.929 99396 ERROR ovsdbapp.event   File "/usr/lib/python3.9/site-packages/ovsdbapp/backend/ovs_idl/command.py", line 319, in <listcomp>
2022-11-10T14:40:18.929843581+00:00 stdout F 2022-11-10 14:40:18.929 99396 ERROR ovsdbapp.event     for r in rows if idlutils.row_match(r, self.conditions)
2022-11-10T14:40:18.929843581+00:00 stdout F 2022-11-10 14:40:18.929 99396 ERROR ovsdbapp.event   File "/usr/lib/python3.9/site-packages/ovsdbapp/backend/ovs_idl/idlutils.py", line 412, in row_match
2022-11-10T14:40:18.929843581+00:00 stdout F 2022-11-10 14:40:18.929 99396 ERROR ovsdbapp.event     return all(condition_match(row, cond) for cond in conditions)
2022-11-10T14:40:18.929843581+00:00 stdout F 2022-11-10 14:40:18.929 99396 ERROR ovsdbapp.event   File "/usr/lib/python3.9/site-packages/ovsdbapp/backend/ovs_idl/idlutils.py", line 412, in <genexpr>
2022-11-10T14:40:18.929843581+00:00 stdout F 2022-11-10 14:40:18.929 99396 ERROR ovsdbapp.event     return all(condition_match(row, cond) for cond in conditions)
2022-11-10T14:40:18.929843581+00:00 stdout F 2022-11-10 14:40:18.929 99396 ERROR ovsdbapp.event   File "/usr/lib/python3.9/site-packages/ovsdbapp/backend/ovs_idl/idlutils.py", line 359, in condition_match
2022-11-10T14:40:18.929843581+00:00 stdout F 2022-11-10 14:40:18.929 99396 ERROR ovsdbapp.event     raise ValueError(
2022-11-10T14:40:18.929843581+00:00 stdout F 2022-11-10 14:40:18.929 99396 ERROR ovsdbapp.event ValueError: Column type and condition operand do not match



That exception is not raised if the router is disconnected from the external network before deleting it.

Comment 1 Luis Tomas Bolivar 2022-11-14 14:27:09 UTC
Fix: https://review.opendev.org/c/x/ovn-bgp-agent/+/864284

Comment 15 errata-xmlrpc 2023-08-16 01:12:28 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 (Release of components for Red Hat OpenStack Platform 17.1 (Wallaby)), 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/RHEA-2023:4577


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