On 9/1/21 6:15 PM, Terry Wilson wrote:
> This ports the C IDL change f50714b to the Python IDL:
>
> Until now the code here would happily try to send transactions to the
> database server even if the database connection was not in the correct
> state. In some cases this could lead to strange behavior, such as sending
> a database transaction for a database that the IDL had just learned did not
> exist on the server.
>
> Signed-off-by: Terry Wilson <[email protected]>
> ---
Hi Terry,
> python/ovs/db/idl.py | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/python/ovs/db/idl.py b/python/ovs/db/idl.py
> index ecae5e143..0be0064de 100644
> --- a/python/ovs/db/idl.py
> +++ b/python/ovs/db/idl.py
> @@ -1500,6 +1500,12 @@ class Transaction(object):
> the IDL's copy of the database. If the transaction commits
> successfully, then the database server will send an update and, thus,
> the IDL will be updated with the committed changes."""
> +
> + if self.idl.state != Idl.IDL_S_MONITORING:
> + self._status = Transaction.TRY_AGAIN
> + self.__disassemble()
> + return self._status
> +
> # The status can only change if we're the active transaction.
> # (Otherwise, our status will change only in Idl.run().)
> if self != self.idl.txn:
>
The C IDL actually checks the IDL state here, after it verified that
this is the active transaction. I think it makes sense to do the same
thing for the Python IDL, that is change the order to:
# The status can only change if we're the active transaction.
# (Otherwise, our status will change only in Idl.run().)
if self != self.idl.txn:
return self._status
if self.idl.state != Idl.IDL_S_MONITORING:
self._status = Transaction.TRY_AGAIN
self.__disassemble()
return self._status
Regards,
Dumitru
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev