From 39d34487039c91a8021c75b3b4e0044a392105cc Mon Sep 17 00:00:00 2001 From: antirez Date: Fri, 14 Apr 2017 10:40:22 +0200 Subject: [PATCH] Cluster: fix gossip section ping/pong times encoding. The gossip section times are 32 bit, so cannot store the milliseconds time but just the seconds approximation, which is good enough for our uses. At the same time however, when comparing the gossip section times of other nodes with our node's view, we need to convert back to milliseconds. Related to #3929. Without this change the patch to reduce the traffic in the bus message does not work. --- src/cluster.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/cluster.c b/src/cluster.c index d1d839cb..cae63e92 100644 --- a/src/cluster.c +++ b/src/cluster.c @@ -1362,7 +1362,8 @@ void clusterProcessGossipSection(clusterMsg *hdr, clusterLink *link) { node->ping_sent == 0 && clusterNodeFailureReportsCount(node) == 0) { - uint32_t pongtime = ntohl(g->pong_received); + mstime_t pongtime = ntohl(g->pong_received); + pongtime *= 1000; /* Convert back to milliseconds. */ if (pongtime > node->pong_received) { node->pong_received = pongtime; } @@ -2353,8 +2354,8 @@ void clusterSendPing(clusterLink *link, int type) { freshnodes--; gossip = &(hdr->data.ping.gossip[gossipcount]); memcpy(gossip->nodename,this->name,CLUSTER_NAMELEN); - gossip->ping_sent = htonl(this->ping_sent); - gossip->pong_received = htonl(this->pong_received); + gossip->ping_sent = htonl(this->ping_sent/1000); + gossip->pong_received = htonl(this->pong_received/1000); memcpy(gossip->ip,this->ip,sizeof(this->ip)); gossip->port = htons(this->port); gossip->cport = htons(this->cport);