diff options
author | antirez <antirez@gmail.com> | 2015-01-30 11:23:27 +0100 |
---|---|---|
committer | antirez <antirez@gmail.com> | 2015-01-30 11:23:27 +0100 |
commit | 69b4f00d28f471f66ddf83155bc41ad608918f44 (patch) | |
tree | b6da05740df4d9f600699124ae46ffed088b5ef4 | |
parent | 6b1c6334bec4277b2c5cb8f04975deb22e8e3a58 (diff) | |
download | redis-69b4f00d28f471f66ddf83155bc41ad608918f44.tar.gz |
More correct wanted / maxiterations values in clusterSendPing().
-rw-r--r-- | src/cluster.c | 8 |
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. */ |