[ovs-git] [openvswitch/ovs] 77ca5e: jsonrpc: Avoid disconnecting prematurely due to lo...

Ben Pfaff noreply at github.com
Mon Dec 21 23:15:47 UTC 2020


  Branch: refs/heads/branch-2.14
  Home:   https://github.com/openvswitch/ovs
  Commit: 77ca5edf90bb90f2700e2ccae4ddefd35df4bdad
      https://github.com/openvswitch/ovs/commit/77ca5edf90bb90f2700e2ccae4ddefd35df4bdad
  Author: Ben Pfaff <blp at ovn.org>
  Date:   2020-12-21 (Mon, 21 Dec 2020)

  Changed paths:
    M lib/jsonrpc.c
    M lib/reconnect.c
    M lib/reconnect.h
    M tests/test-reconnect.c

  Log Message:
  -----------
  jsonrpc: Avoid disconnecting prematurely due to long poll intervals.

Open vSwitch has a few different jsonrpc-based protocols that depend on
jsonrpc_session to make sure that the connection is up and working.
In turn, jsonrpc_session uses the "reconnect" state machine to send
probes if nothing is received.  This works fine in normal circumstances.
In unusual circumstances, though, it can happen that the program is
busy and doesn't even try to receive anything for a long time.  Then the
timer can time out without a good reason; if it had tried to receive
something, it would have.

There's a solution that the clients of jsonrpc_session could adopt.
Instead of first calling jsonrpc_session_run(), which is what calls into
"reconnect" to deal with timing out, and then calling into
jsonrpc_session_recv(), which is what tries to receive something, they
could use the opposite order.  That would make sure that the timeout
was always based on a recent attempt to receive something.  Great.

The actual code in OVS that uses jsonrpc_session, though, tends to use
the opposite order, and there are enough users and this is a subtle
enough issue that it could get flipped back around even if we fixed it
now.  So this commit takes a different approach.  Instead of fixing
this in the users of jsonrpc_session, we fix it in the users of
reconnect: make them tell when they've tried to receive something (or
disable this particular feature).

This commit fixes the problem that way.  It's kind of hard to reproduce
but I'm pretty sure that I've seen it a number of times in testing.

Signed-off-by: Ben Pfaff <blp at ovn.org>
Acked-by: Ilya Maximets <i.maximets at ovn.org>




More information about the git mailing list