Cluster: FAIL messages from unknown senders are handled better.

Previously the event was not logged but instead the node reported an
unknown packet type received.
This commit is contained in:
antirez 2013-10-02 09:42:35 +02:00
parent 7970ebd80a
commit abe81781ae

View File

@ -1154,20 +1154,26 @@ int clusterProcessPacket(clusterLink *link) {
/* Update the cluster state if needed */ /* Update the cluster state if needed */
if (update_state) clusterUpdateState(); if (update_state) clusterUpdateState();
if (update_config) clusterSaveConfigOrDie(); if (update_config) clusterSaveConfigOrDie();
} else if (type == CLUSTERMSG_TYPE_FAIL && sender) { } else if (type == CLUSTERMSG_TYPE_FAIL) {
clusterNode *failing; clusterNode *failing;
failing = clusterLookupNode(hdr->data.fail.about.nodename); if (sender) {
if (failing && !(failing->flags & (REDIS_NODE_FAIL|REDIS_NODE_MYSELF))) failing = clusterLookupNode(hdr->data.fail.about.nodename);
{ if (failing && !(failing->flags & (REDIS_NODE_FAIL|REDIS_NODE_MYSELF)))
{
redisLog(REDIS_NOTICE,
"FAIL message received from %.40s about %.40s",
hdr->sender, hdr->data.fail.about.nodename);
failing->flags |= REDIS_NODE_FAIL;
failing->fail_time = time(NULL);
failing->flags &= ~REDIS_NODE_PFAIL;
clusterUpdateState();
clusterSaveConfigOrDie();
}
} else {
redisLog(REDIS_NOTICE, redisLog(REDIS_NOTICE,
"FAIL message received from %.40s about %.40s", "Ignoring FAIL message from unknonw node %.40s about %.40s",
hdr->sender, hdr->data.fail.about.nodename); hdr->sender, hdr->data.fail.about.nodename);
failing->flags |= REDIS_NODE_FAIL;
failing->fail_time = time(NULL);
failing->flags &= ~REDIS_NODE_PFAIL;
clusterUpdateState();
clusterSaveConfigOrDie();
} }
} else if (type == CLUSTERMSG_TYPE_PUBLISH) { } else if (type == CLUSTERMSG_TYPE_PUBLISH) {
robj *channel, *message; robj *channel, *message;