From 1315b9f2463b59b8dae440e62657be91363e29c7 Mon Sep 17 00:00:00 2001 From: antirez Date: Thu, 11 Apr 2013 19:12:29 +0200 Subject: Cluster: restore PING sent time on reconnections. --- src/cluster.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/cluster.c b/src/cluster.c index 39e040c09..24c933740 100644 --- a/src/cluster.c +++ b/src/cluster.c @@ -1529,6 +1529,7 @@ void clusterCron(void) { if (node->flags & (REDIS_NODE_MYSELF|REDIS_NODE_NOADDR)) continue; if (node->link == NULL) { int fd; + time_t old_ping_sent; clusterLink *link; fd = anetTcpNonBlockConnect(server.neterr, node->ip, @@ -1544,8 +1545,15 @@ void clusterCron(void) { * If the node is flagged as MEET, we send a MEET message instead * of a PING one, to force the receiver to add us in its node * table. */ + old_ping_sent = node->ping_sent; clusterSendPing(link, node->flags & REDIS_NODE_MEET ? CLUSTERMSG_TYPE_MEET : CLUSTERMSG_TYPE_PING); + if (old_ping_sent) { + /* If there was an active ping before the link was + * disconnected, we want to restore the ping time, otherwise + * replaced by the clusterSendPing() call. */ + node->ping_sent = old_ping_sent; + } /* We can clear the flag after the first packet is sent. * If we'll never receive a PONG, we'll never send new packets * to this node. Instead after the PONG is received and we -- cgit v1.2.1