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

Reply via email to