ovsdb/jsonrpc-server: ovsdb-server closes accepted connections immediately.
authorMehak Mahajan <mmahajan@nicira.com>
Thu, 4 Oct 2012 19:33:05 +0000 (12:33 -0700)
committerMehak Mahajan <mmahajan@nicira.com>
Thu, 4 Oct 2012 23:49:29 +0000 (16:49 -0700)
commite879d33e8398219d5c9af8fd565c97303f126809
tree50d0b813cf2b96c6c1f4e08adea69350ea90cc2c
parent4210c33bdbf4c05bf38e1eebd930c88eca203412
ovsdb/jsonrpc-server: ovsdb-server closes accepted connections immediately.

2012-09-14T05:38:26Z|00001|jsonrpc|WARN|tcp:127.0.0.1:6634: receive error: Con
ovsdb-client: transaction failed (Connection reset by peer)
NOTE: This occurs intermittently depending on how ovsdb-server runs.
      Running ovsdb-client on a remote machine increases the possibility.

This is because ovsdb-server closes newly accepted tcp connection.
The following changesets caused it. struct jsonrpc_session::dscp isn't set
based on listening socket's dscp value.
- ovsdb-server creates passive connection and listens on it.
- ovsdb-server accepts connection by ovsdb_jsonrpc_server_run().
  The accepted socket inherits from the listening sockets.
  ovsdb_jsonrpc_server_run() creates json session, but leaves dscp of
  struct jsonrpc_session zero.
- On calling reconfigure_from_db(), it resets dscp value to
  all jsonrpc sessions. Eventually jsonrpc_session_set_dscp() is called.
  Then jsonrpc_session_force_reconnect() closes the connection.

With this patch,
- struct jsonrpc_session::dscp is correctly set based on
  listening sockets dscp value.
- dscp of listening socket is changed dynamically by setsockopt.
  This leaves a window where accepted socket may have old dscp.
  But it is ignored for now because it would complicates codes
  too much.

The related change sets:
0442efd9b1a88d923b56eab6b72b6be8231a49f7
  Reapplying the dscp changes: No need to restart DB/OVS on changing
  dscp value.
59efa47adf3234ec51541405726d033173851285
  Revert DSCP update changes.
b2e18db292cd4962af3248f11e9f17e6eaf9c033
  No need to restart DB / OVS on changing dscp value.
f125905cdd3dc0339ad968c0a70128807884b400
  Allow configuring DSCP on controller and manager connections.

Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
Signed-off-by: Mehak Mahajan <mmahajan@nicira.com>
lib/jsonrpc.c
lib/jsonrpc.h
ovsdb/jsonrpc-server.c
tests/ovsdb-server.at