走读 Redis 代码的时候,发现有一处代码注释的序号不连续,又起了好奇心。翻了翻源码,在 commit <3fd43062c8127857f98c09a06bf70710b2dc2f681>,这处改动是调整 gossip sections 的大小。
/* Don't include this node: the whole packet header is about us
* already, so we just gossip about other nodes. */
if (this == myself) continue;
/* In the gossip section don't include:
* 1) Nodes in HANDSHAKE state.
* 3) Nodes with the NOADDR flag set.
* 4) Disconnected nodes if they don't have configured slots.
*/
git message 摘录如下:
Cluster: use a number of gossip sections proportional to cluster size.
Otherwise it is impossible to receive the majority of failure reports in the node_timeout*2 window in larger clusters.
Still with a 200 nodes cluster, 20 gossip sections are a very reasonable amount of bytes to send.
A side effect of this change is also fater cluster nodes joins for large clusters, because the cluster layout makes less time to propagate.