rconn: Treat draining a message from the send queue as activity.
authorBen Pfaff <blp@nicira.com>
Mon, 6 Aug 2012 22:03:32 +0000 (15:03 -0700)
committerBen Pfaff <blp@nicira.com>
Mon, 6 Aug 2012 22:03:32 +0000 (15:03 -0700)
commit133f2dc95454bc3052efdb58e4e26dce4860285e
treef346c6985af1fb0fd1b947636567aa2451e577fc
parentca0f217af8f43eb919a2905e2d7ddb55daada482
rconn: Treat draining a message from the send queue as activity.

Until now, the rconn module has used messages received from the
controller as the sole means to determine that the connection is up.
This can interact badly with the OVS connection manager in ofproto,
which stops reading and processing messages from the receive queue
when there is a backlog in the send queue for a given connection
(because reading and processes messages is the main cause of messages
getting pushed onto the send queue).  So, if a send queue backlog
lasts more than twice the inactivity probe interval, then the
connection drops, whether the controller is sending messages or not.
Dumping a large flow table can trigger this behavior if the controller
becomes temporarily busy or if the network between OVS and a
controller is slow.  The problem can easily repeat itself, since upon
reconnection the controller will generally dump the flow table.

This commit fixes the problem by expanding the definition of
"activity" to include successfully sending an OpenFlow message that
was previously queued.

Bug #12789.
Reported-by: Natasha Gude <natasha@nicira.com>
Signed-off-by: Ben Pfaff <blp@nicira.com>
lib/rconn.c