Skip to content

Commit

Permalink
Cluster: fix gossip section ping/pong times encoding.
Browse files Browse the repository at this point in the history
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 redis#3929. Without this change the patch to reduce the traffic in
the bus message does not work.
  • Loading branch information
antirez committed Apr 14, 2017
1 parent 6878a3f commit 8c829d9
Showing 1 changed file with 4 additions and 3 deletions.
7 changes: 4 additions & 3 deletions src/cluster.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit 8c829d9

Please sign in to comment.