From 3d455393a6a874e49abe51543fb442d38073f07d Mon Sep 17 00:00:00 2001 From: antirez Date: Thu, 16 Jan 2014 17:49:35 +0100 Subject: [PATCH] Cluster: don't let a node forget its own master. redis-trib should make sure to reconfigure slaves of a node to remove from the cluster to replicate with other nodes before sending CLUSTER FORGET. --- src/cluster.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/cluster.c b/src/cluster.c index 71efe08bc..ee95f3759 100644 --- a/src/cluster.c +++ b/src/cluster.c @@ -2875,12 +2875,16 @@ void clusterCommand(redisClient *c) { /* CLUSTER FORGET */ clusterNode *n = clusterLookupNode(c->argv[2]->ptr); - if (n == server.cluster->myself) { - addReplyErrorFormat(c,"I tried hard but I can't forget myself..."); - return; - } else if (!n) { + if (!n) { addReplyErrorFormat(c,"Unknown node %s", (char*)c->argv[2]->ptr); return; + } else if (n == server.cluster->myself) { + addReplyError(c,"I tried hard but I can't forget myself..."); + return; + } else if (server.cluster->myself->flags & REDIS_NODE_SLAVE && + server.cluster->myself->slaveof == n) { + addReplyError(c,"Can't forget my master!"); + return; } clusterBlacklistAddNode(n); clusterDelNode(n); -- GitLab