[ovs-dev] [PATCH] jsonrpc: Fix Python implementation of inactivity logic.

Gurucharan Shetty gshetty at nicira.com
Mon Sep 17 17:28:02 UTC 2012


On Fri, Sep 14, 2012 at 1:19 PM, Ben Pfaff <blp at nicira.com> wrote:

> When a JSON-RPC session receives bytes, or when it successfully sends
> queued bytes, then it should count that as activity.  However, the code
> here was reversed, in that it used the wrong check in each place.  That is,
> when it tried to receive data, it would check whether data had just been
> sent, and when it tried to send data, it would check whether data had just
> been received.  Neither one makes sense and doesn't work.
>
> Bug #13214.
> Reported-by: Luca Giraudo <lgiraudo at nicira.com>
> CC: James Schmidt <jschmidt at nicira.com>
> Signed-off-by: Ben Pfaff <blp at nicira.com>
>
Looks good to me.
Thanks,
Guru



> ---
>  python/ovs/jsonrpc.py |   28 ++++++++++++++--------------
>  1 files changed, 14 insertions(+), 14 deletions(-)
>
> diff --git a/python/ovs/jsonrpc.py b/python/ovs/jsonrpc.py
> index fa66aab..c1540eb 100644
> --- a/python/ovs/jsonrpc.py
> +++ b/python/ovs/jsonrpc.py
> @@ -449,14 +449,16 @@ class Session(object):
>                  self.pstream = None
>
>          if self.rpc:
> -            received_bytes = self.rpc.get_received_bytes()
> +            backlog = self.rpc.get_backlog()
>              self.rpc.run()
> -            if received_bytes != self.rpc.get_received_bytes():
> -                # Data was successfully received.
> +            if self.rpc.get_backlog() < backlog:
> +                # Data previously caught in a queue was successfully sent
> (or
> +                # there's an error, which we'll catch below).
>                  #
> -                # Previously we only counted receiving a full message as
> -                # activity, but with large messages or a slow connection
> that
> -                # policy could time out the session mid-message.
> +                # We don't count data that is successfully sent
> immediately as
> +                # activity, because there's a lot of queuing downstream
> from
> +                # us, which means that we can push a lot of data into a
> +                # connection that has stalled and won't ever recover.
>                  self.reconnect.activity(ovs.timeval.msec())
>
>              error = self.rpc.get_status()
> @@ -516,16 +518,14 @@ class Session(object):
>
>      def recv(self):
>          if self.rpc is not None:
> -            backlog = self.rpc.get_backlog()
> +            received_bytes = self.rpc.get_received_bytes()
>              error, msg = self.rpc.recv()
> -            if self.rpc.get_backlog() < backlog:
> -                # Data previously caught in a queue was successfully sent
> (or
> -                # there's an error, which we'll catch below).
> +            if received_bytes != self.rpc.get_received_bytes():
> +                # Data was successfully received.
>                  #
> -                # We don't count data that is successfully sent
> immediately as
> -                # activity, because there's a lot of queuing downstream
> from
> -                # us, which means that we can push a lot of data into a
> -                # connection that has stalled and won't ever recover.
> +                # Previously we only counted receiving a full message as
> +                # activity, but with large messages or a slow connection
> that
> +                # policy could time out the session mid-message.
>                  self.reconnect.activity(ovs.timeval.msec())
>
>              if not error:
> --
> 1.7.2.5
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openvswitch.org/pipermail/ovs-dev/attachments/20120917/e1929ccc/attachment-0003.html>


More information about the dev mailing list