Reviewed: https://review.opendev.org/745746 Committed: https://git.openstack.org/cgit/openstack/ovsdbapp/commit/?id=3cf8a427c0a4dfc248e0778c3b1ee65671d1d07b Submitter: Zuul Branch: master
commit 3cf8a427c0a4dfc248e0778c3b1ee65671d1d07b Author: Terry Wilson <[email protected]> Date: Tue Aug 11 13:12:47 2020 -0500 Add lock when calling idl.run() python-ovs transparently handles DB reconnections during calls to Idl.run(). Since ovsdbapp uses a separate thread for the Connection (so it can handle responding to OVSDB keep-alive echo requests) and for processing RowEvent notifcations, it is possible that a thread could be trying to access OVSDB data at the same time that the Connection thread is updating it. Especially during a reconnect where the in-memory copy of the DB will be completely re-written, this causes a problem. Theoretically, an application that uses ovsdbapp shouldn't access anything in the backend code directly, but since there is now only one supported Backend, that restriction has slipped a bit. If all accesses were in Command objects, mostly there wouldn't be a problem as they would be handled in the Connection thread. But with both ReadOnlyCommands and use of lookup() and anything in idlutils, the main thread can access the in-memory db directly and potentially cause problems. The most common problematic method to be called outside of Command objects is lookup() and ReadOnlyCommands. This patch adds a lock around calls to idl.run() and lookup() and execute() for the ReadOnlyCommand case. row_by_value() is another target, but it is left untouched because it doesn't have access to the API instance and it is *mostly* called from inside Command objects. User code that doesn't will be easy to find because user code basically shouldn't use idlutils. Change-Id: I98c37771883103e1fb0468de9cf85364071993fa Closes-Bug: #1888878 ** Changed in: ovsdbapp Status: In Progress => Fix Released -- You received this bug notification because you are a member of Yahoo! Engineering Team, which is subscribed to neutron. https://bugs.launchpad.net/bugs/1888878 Title: Data not present in OVN IDL when requested Status in neutron: In Progress Status in ovsdbapp: Fix Released Bug description: During a test execution, we were expecting the NB "NB_Global" table to have the cfg values. After the test execution (and the error presented here), "NB_Global" table was consulted via cli command (ovn-nbctl) and it was correctly populated. Error: http://paste.openstack.org/show/796293/ Between the reconnection and the command (and the exception), there are is a time gap of only 36ms. Is it possible that the in-memory DB was still being populated? To manage notifications about this bug go to: https://bugs.launchpad.net/neutron/+bug/1888878/+subscriptions -- Mailing list: https://launchpad.net/~yahoo-eng-team Post to : [email protected] Unsubscribe : https://launchpad.net/~yahoo-eng-team More help : https://help.launchpad.net/ListHelp

