libceph: reset connection retry on successfully negotiation
authorSage Weil <sage@inktank.com>
Mon, 30 Jul 2012 23:22:05 +0000 (16:22 -0700)
committerSage Weil <sage@inktank.com>
Tue, 31 Jul 2012 01:15:34 +0000 (18:15 -0700)
We exponentially back off when we encounter connection errors.  If several
errors accumulate, we will eventually wait ages before even trying to
reconnect.

Fix this by resetting the backoff counter after a successful negotiation/
connection with the remote node.  Fixes ceph issue #2802.

Signed-off-by: Sage Weil <sage@inktank.com>
Reviewed-by: Yehuda Sadeh <yehuda@inktank.com>
Reviewed-by: Alex Elder <elder@inktank.com>
net/ceph/messenger.c

index a4779988c8475f6de52bbf2c269a50672bab66e8..07204f19e856c3acef4ea1252fcdc70ec86f3cdd 100644 (file)
@@ -1629,6 +1629,8 @@ static int process_connect(struct ceph_connection *con)
                if (con->in_reply.flags & CEPH_MSG_CONNECT_LOSSY)
                        set_bit(LOSSYTX, &con->flags);
 
+               con->delay = 0;      /* reset backoff memory */
+
                prepare_read_tag(con);
                break;