[ovs-dev] [PATCH v5] python: Send notifications after the transaction ends

Flavio Fernandes flavio at flaviof.com
Fri Mar 12 14:47:13 UTC 2021


Tested-by: Flavio Fernandes <flavio at flaviof.com>

Used this change against Openstack's OVN Zuul :

     https://review.opendev.org/c/openstack/neutron/+/778595 <https://review.opendev.org/c/openstack/neutron/+/778595>




> On Mar 4, 2021, at 11:18 AM, Terry Wilson <twilson at redhat.com> wrote:
> 
> The Python IDL notification mechanism was sending a notification
> for each processed update in a transaction as it was processed.
> This causes issues with multi-row changes that contain references
> to each other.
> 
> For example, if a Logical_Router_Port is created along with a
> Gateway_Chassis, and the LRP.gateway_chassis set to that GC, then
> when the notify() passes the CREATE event for the LRP, the GC will
> not yet have been processed, so __getattr__ when _uuid_to_row fails
> to find the GC, will return the default value for LRP.gateway_chassis
> which is [].
> 
> This patch has the process_update methods return the notifications
> that would be produced when a row changes, so they can be queued
> and sent after all rows have been processed.
> 
> Fixes: d7d417fcddf9 ("Allow subclasses of Idl to define a notification hook")
> Signed-off-by: Terry Wilson <twilson at redhat.com>
> ---
> python/ovs/db/idl.py | 39 ++++++++++++++++++++++++---------------
> tests/ovsdb-idl.at   | 22 ++++++++++++++++++++++
> tests/test-ovsdb.py  |  7 +++++--
> 3 files changed, 51 insertions(+), 17 deletions(-)
> <snip>



More information about the dev mailing list