On Fri, Sep 14, 2012 at 1:19 PM, Ben Pfaff <b...@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 <lgira...@nicira.com> > CC: James Schmidt <jschm...@nicira.com> > Signed-off-by: Ben Pfaff <b...@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@openvswitch.org > http://openvswitch.org/mailman/listinfo/dev >
_______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev