Thanks Ilya! Em seg., 27 de mai. de 2024 às 10:28, Ilya Maximets <i.maxim...@ovn.org> escreveu:
> On 5/27/24 18:22, Roberto Bartzen Acosta via discuss wrote: > > Hello everyone! > > > > I found an issue during testing with the OVN-IC daemon. I noticed that > applications that interact with python-idl show an error when deleting > datapath_binding when the table index changes. > > > > We can see the error in the logs below: > > > > 2024-05-27 09:49:38.779 23596 ERROR ovsdbapp.backend.ovs_idl.connection > [-] Datapath_Binding(uuid=UUID('498e66a2-70bc-4587-a66f-0433baf82f60'), > tunnel_key=16711683, load_balancers=[], external_ids={}) not in list: > ValueError: > Datapath_Binding(uuid=UUID('498e66a2-70bc-4587-a66f-0433baf82f60'), > tunnel_key=16711683, load_balancers=[], external_ids={}) not in list > > 2024-05-27 09:49:38.779 23596 ERROR ovsdbapp.backend.ovs_idl.connection > Traceback (most recent call last): > > 2024-05-27 09:49:38.779 23596 ERROR ovsdbapp.backend.ovs_idl.connection > File > "/usr/lib/python3/dist-packages/ovsdbapp/backend/ovs_idl/connection.py", > line 110, in run > > 2024-05-27 09:49:38.779 23596 ERROR ovsdbapp.backend.ovs_idl.connection > self.idl.run() > > 2024-05-27 09:49:38.779 23596 ERROR ovsdbapp.backend.ovs_idl.connection > File "/usr/lib/python3/dist-packages/ovs/db/idl.py", line 465, in run > > 2024-05-27 09:49:38.779 23596 ERROR ovsdbapp.backend.ovs_idl.connection > self.__parse_update(msg.params[2], OVSDB_UPDATE3) > > 2024-05-27 09:49:38.779 23596 ERROR ovsdbapp.backend.ovs_idl.connection > File "/usr/lib/python3/dist-packages/ovs/db/idl.py", line 924, in > __parse_update > > 2024-05-27 09:49:38.779 23596 ERROR ovsdbapp.backend.ovs_idl.connection > self.__do_parse_update(update, version, self.tables) > > 2024-05-27 09:49:38.779 23596 ERROR ovsdbapp.backend.ovs_idl.connection > File "/usr/lib/python3/dist-packages/ovs/db/idl.py", line 964, in > __do_parse_update > > 2024-05-27 09:49:38.779 23596 ERROR ovsdbapp.backend.ovs_idl.connection > changes = self.__process_update2(table, uuid, row_update) > > 2024-05-27 09:49:38.779 23596 ERROR ovsdbapp.backend.ovs_idl.connection > File "/usr/lib/python3/dist-packages/ovs/db/idl.py", line 991, in > __process_update2 > > 2024-05-27 09:49:38.779 23596 ERROR ovsdbapp.backend.ovs_idl.connection > del table.rows[uuid] > > 2024-05-27 09:49:38.779 23596 ERROR ovsdbapp.backend.ovs_idl.connection > File "/usr/lib/python3/dist-packages/ovs/db/custom_index.py", line 102, in > __delitem__ > > 2024-05-27 09:49:38.779 23596 ERROR ovsdbapp.backend.ovs_idl.connection > index.remove(val) > > 2024-05-27 09:49:38.779 23596 ERROR ovsdbapp.backend.ovs_idl.connection > File "/usr/lib/python3/dist-packages/ovs/db/custom_index.py", line 66, in > remove > > 2024-05-27 09:49:38.779 23596 ERROR ovsdbapp.backend.ovs_idl.connection > self.values.remove(self.index_entry_from_row(row)) > > 2024-05-27 09:49:38.779 23596 ERROR ovsdbapp.backend.ovs_idl.connection > File "/usr/lib/python3/dist-packages/sortedcontainers/sortedlist.py", line > 2015, in remove > > 2024-05-27 09:49:38.779 23596 ERROR ovsdbapp.backend.ovs_idl.connection > raise ValueError('{0!r} not in list'.format(value)) > > 2024-05-27 09:49:38.779 23596 ERROR ovsdbapp.backend.ovs_idl.connection > ValueError: > Datapath_Binding(uuid=UUID('498e66a2-70bc-4587-a66f-0433baf82f60'), > tunnel_key=16711683, load_balancers=[], external_ids={}) not in list > > 2024-05-27 09:49:38.779 23596 ERROR ovsdbapp.backend.ovs_idl.connection > > > > > > The complete logs showing the creation, update of the tunnel_key and > deletion of the datapath_binding can be accessed at [1]. > > > > Basically the problem occurs because of the tunnel_key update when we > create a transit-switch. If the table did not have this index the problem > would not be observed. > > > > This issue affects applications such as: neutron-server, > neutron-ovn-metadata-agent, and everyone that monitors the Datapath_Binding > table via python-idl. > > > > I've already talked to Ilya Maximets in the openvswitch IRC channel and > the issue seems to be in the row updating process: python/ovs/db/idl.py. > > > Thanks, Roberto! I beleive the fix I shared on IRC is mostly correct > though > I didn't test it. I need to refine it a little and add a unit test for the > issue. With that I hope to post it for review somewhere soon. > Just to update on the patch you proposed, the deletion of the entry fails during the python-idl update execution. The content of the table row has already been updated just above in the __apply_diff and/or __row_update methods. If you request to delete the entry... you will delete an entry in use from what I understand. The code below triggers an error when updating tunnel_key (error that didn't happen before when updating rows): + del table.rows[uuid] + table.rows[uuid] = row So I suggest just updating the table reference with the already updated row. What do you think? $ git diff diff --git a/python/ovs/db/idl.py b/python/ovs/db/idl.py index a80da84e7..08c5acffb 100644 --- a/python/ovs/db/idl.py +++ b/python/ovs/db/idl.py @@ -1014,6 +1014,7 @@ class Idl(object): raise error.Error('Modify non-existing row') old_row = self.__apply_diff(table, row, row_update['modify']) + table.rows[uuid] = row return Notice(ROW_UPDATE, row, Row(self, table, uuid, old_row)) else: raise error.Error('<row-update> unknown operation', @@ -1062,6 +1063,7 @@ class Idl(object): if op == ROW_CREATE: table.rows[uuid] = row if changed: + table.rows[uuid] = row return Notice(op, row, Row.from_json(self, table, uuid, old)) return False > > CC: Terry. > > Best regards, Ilya Maximets. > > > > > Kind regards, > > Roberto > > > > > > [1] https://paste.openstack.org/show/bqLA7nxfk2C6loD5YlY1/ > > -- _‘Esta mensagem é direcionada apenas para os endereços constantes no cabeçalho inicial. Se você não está listado nos endereços constantes no cabeçalho, pedimos-lhe que desconsidere completamente o conteúdo dessa mensagem e cuja cópia, encaminhamento e/ou execução das ações citadas estão imediatamente anuladas e proibidas’._ * **‘Apesar do Magazine Luiza tomar todas as precauções razoáveis para assegurar que nenhum vírus esteja presente nesse e-mail, a empresa não poderá aceitar a responsabilidade por quaisquer perdas ou danos causados por esse e-mail ou por seus anexos’.*
_______________________________________________ discuss mailing list disc...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-discuss