Hi,

I would like to report a bug found during kolla OpenStack deployment in ml2 drive ovs 2.17 package. The bug has been introudeced with the following commit: 46d44cf3be0dbf4a44cebea3b279b3d16a326796 , python: idl: Add monitor_cond_since support.
https://github.com/openvswitch/ovs/commit/46d44cf3be0dbf4a44cebea3b279b3d16a326796

2022-03-18 14:32:05.754 24 ERROR neutron.plugins.ml2.drivers.ovn.mech_driver.ovsdb.impl_idl_ovn     while idl_.change_seqno == seqno and not idl_.run(): 2022-03-18 14:32:05.754 24 ERROR neutron.plugins.ml2.drivers.ovn.mech_driver.ovsdb.impl_idl_ovn   File "/usr/lib/python3/dist-packages/ovs/db/idl.py", line 410, in run 2022-03-18 14:32:05.754 24 ERROR neutron.plugins.ml2.drivers.ovn.mech_driver.ovsdb.impl_idl_ovn     self.restart_fsm() 2022-03-18 14:32:05.754 24 ERROR neutron.plugins.ml2.drivers.ovn.mech_driver.ovsdb.impl_idl_ovn   File "/usr/lib/python3/dist-packages/ovs/db/idl.py", line 372, in restart_fsm 2022-03-18 14:32:05.754 24 ERROR neutron.plugins.ml2.drivers.ovn.mech_driver.ovsdb.impl_idl_ovn     self.sync_conditions() 2022-03-18 14:32:05.754 24 ERROR neutron.plugins.ml2.drivers.ovn.mech_driver.ovsdb.impl_idl_ovn   File "/usr/lib/python3/dist-packages/ovs/db/idl.py", line 361, in sync_conditions 2022-03-18 14:32:05.754 24 ERROR neutron.plugins.ml2.drivers.ovn.mech_driver.ovsdb.impl_idl_ovn     table.condition.request() 2022-03-18 14:32:05.754 24 ERROR neutron.plugins.ml2.drivers.ovn.mech_driver.ovsdb.impl_idl_ovn AttributeError: 'list' object has no attribute 'request'


The new code to check sync_condition is not checking whether the table structure is nested and assume flat and call request function. Which throws attribute error. When I add some exta debugging code so I can find a workaround I've been able to confirm it with the following snippet:

|/usr/lib/python3/dist-packages/ovs/db/idl.py |    ack_all = self.last_id == str(uuid.UUID(int=0))
        for table in self.tables.values():
*            print("DEBUG")**
**            if isinstance(table.condition, list):**
**                print(self.tables)**
**                print(table)**
**                continue*
            if ack_all:
                table.condition.request()
                table.condition.ack()
            else:
                if table.condition.reset():
                    self.last_id = str(uuid.UUID(int=0))
                self.cond_changed = True


The output is as follow:

|||{'Logical_Router_Static_Route': <ovs.db.schema.TableSchema object at 0x7ff09ca08ac0>, 'Meter_Band': <ovs.db.schema.TableSchema object at 0x7ff09ca08f10>, 'NB_Global': <ovs.db.schema.TableSchema object at 0x7ff09ca08a30>, 'ACL': <ovs.db.schema.TableSchema object at 0x7ff09ca08a90>, 'Copp': <ovs.db.schema.TableSchema object at 0x7ff09c9d0220>, 'Logical_Switch': <ovs.db.schema.TableSchema object at 0x7ff09c9d0f70>, 'Load_Balancer_Group': <ovs.db.schema.TableSchema object at 0x7ff09c9d4d00>, 'Meter': <ovs.db.schema.TableSchema object at 0x7ff09c9d4730>, 'Address_Set': <ovs.db.schema.TableSchema object at 0x7ff09c9d79a0>, 'HA_Chassis_Group': <ovs.db.schema.TableSchema object at 0x7ff09c9d7070>, 'QoS': <ovs.db.schema.TableSchema object at 0x7ff09c9d7a90>, 'NAT': <ovs.db.schema.TableSchema object at 0x7ff09c9db730>, 'BFD': <ovs.db.schema.TableSchema object at 0x7ff09c9db070>, 'Load_Balancer': <ovs.db.schema.TableSchema object at 0x7ff09c9db2b0>, 'DNS': <ovs.db.schema.TableSchema object at 0x7ff09c9de670>, 'Connection': <ovs.db.schema.TableSchema object at 0x7ff09c9ded00>, 'Forwarding_Group': <ovs.db.schema.TableSchema object at 0x7ff09c9e00d0>, 'SSL': <ovs.db.schema.TableSchema object at 0x7ff09c9e02e0>, 'Load_Balancer_Health_Check': <ovs.db.schema.TableSchema object at 0x7ff09c9e0cd0>, 'Gateway_Chassis': <ovs.db.schema.TableSchema object at 0x7ff09c9e4610>, 'HA_Chassis': <ovs.db.schema.TableSchema object at 0x7ff09c9e4d90>, 'Logical_Router_Port': <ovs.db.schema.TableSchema object at 0x7ff09c9e4bb0>, 'Logical_Router_Policy': <ovs.db.schema.TableSchema object at 0x7ff09c9e8820>, 'Logical_Router': <ovs.db.schema.TableSchema object at 0x7ff09c9e85b0>, 'Port_Group': <ovs.db.schema.TableSchema object at 0x7ff09c9e8220>, 'DHCP_Options': <ovs.db.schema.TableSchema object at 0x7ff09c9eb1f0>, 'Logical_Switch_Port': <ovs.db.schema.TableSchema object at 0x7ff09c9eb700>} ||<ovs.db.schema.TableSchema object at 0x7ff09c9eb1f0> | Object 0x7ff09c9eb1f0 points to DHCP_Options. I'm not a network guy so hard to say why it happens, when downgraded it to 2.16 the error is gone.

Thanks,
Mirek
_______________________________________________
discuss mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-discuss

Reply via email to