[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