summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorantirez <antirez@gmail.com>2015-01-30 11:23:27 +0100
committerantirez <antirez@gmail.com>2015-01-30 11:23:27 +0100
commit69b4f00d28f471f66ddf83155bc41ad608918f44 (patch)
treeb6da05740df4d9f600699124ae46ffed088b5ef4
parent6b1c6334bec4277b2c5cb8f04975deb22e8e3a58 (diff)
downloadredis-69b4f00d28f471f66ddf83155bc41ad608918f44.tar.gz
More correct wanted / maxiterations values in clusterSendPing().
-rw-r--r--src/cluster.c8
1 files 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 <sys/socket.h>
#include <sys/stat.h>
#include <sys/file.h>
+#include <math.h>
/* 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. */