From 69b4f00d28f471f66ddf83155bc41ad608918f44 Mon Sep 17 00:00:00 2001 From: antirez Date: Fri, 30 Jan 2015 11:23:27 +0100 Subject: More correct wanted / maxiterations values in clusterSendPing(). --- src/cluster.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/cluster.c b/src/cluster.c index 69684fc9f..a296bdd8b 100644 --- a/src/cluster.c +++ b/src/cluster.c @@ -40,6 +40,7 @@ #include #include #include +#include /* A global reference to myself is handy to make code more clear. * Myself always points to server.cluster->myself, that is, the clusterNode @@ -2136,8 +2137,9 @@ void clusterSendPing(clusterLink *link, int type) { * Since we have non-voting slaves that lower the probability of an entry * to feature our node, we set the number of entires per packet as * 10% of the total nodes we have. */ - wanted = freshnodes/10; + wanted = floor(dictSize(server.cluster->nodes)/10); if (wanted < 3) wanted = 3; + if (wanted > freshnodes) wanted = freshnodes; /* Compute the maxium totlen to allocate our buffer. We'll fix the totlen * later according to the number of gossip sections we really were able @@ -2156,7 +2158,7 @@ void clusterSendPing(clusterLink *link, int type) { clusterBuildMessageHdr(hdr,type); /* Populate the gossip fields */ - int maxiterations = wanted+10; + int maxiterations = wanted*2; while(freshnodes > 0 && gossipcount < wanted && maxiterations--) { dictEntry *de = dictGetRandomKey(server.cluster->nodes); clusterNode *this = dictGetVal(de); @@ -2199,6 +2201,8 @@ void clusterSendPing(clusterLink *link, int type) { gossip->notused2 = 0; gossipcount++; } + redisLog(REDIS_VERBOSE,"WANTED: %d, USED_ITER: %d, GOSSIPCOUNT: %d", + wanted, wanted*2-maxiterations, gossipcount); /* Ready to send... fix the totlen fiend and queue the message in the * output buffer. */ -- cgit v1.2.1