From: antirez Date: Thu, 5 May 2011 16:10:02 +0000 (+0200) Subject: Fixed semantics of CLUSTER SETSLOT, SELECT now only denied in cluster mode if selecte... X-Git-Url: https://git.saurik.com/redis.git/commitdiff_plain/a7b058dae612ad3ab31a2b2d6f07e5ff7fe06618 Fixed semantics of CLUSTER SETSLOT, SELECT now only denied in cluster mode if selected DB is not 0 so that MIGRATE still works well. --- diff --git a/src/cluster.c b/src/cluster.c index e8ca51cf..d8eca519 100644 --- a/src/cluster.c +++ b/src/cluster.c @@ -1219,11 +1219,11 @@ void clusterCommand(redisClient *c) { return; } slot = (unsigned int) aux; - if (server.cluster.slots[slot] != server.cluster.myself) { - addReplyErrorFormat(c,"I'm not the owner of hash slot %u",slot); - return; - } if (!strcasecmp(c->argv[3]->ptr,"migrating") && c->argc == 5) { + if (server.cluster.slots[slot] != server.cluster.myself) { + addReplyErrorFormat(c,"I'm not the owner of hash slot %u",slot); + return; + } if ((n = clusterLookupNode(c->argv[4]->ptr)) == NULL) { addReplyErrorFormat(c,"I don't know about node %s", (char*)c->argv[4]->ptr); @@ -1231,6 +1231,11 @@ void clusterCommand(redisClient *c) { } server.cluster.migrating_slots_to[slot] = n; } else if (!strcasecmp(c->argv[3]->ptr,"importing") && c->argc == 5) { + if (server.cluster.slots[slot] == server.cluster.myself) { + addReplyErrorFormat(c, + "I'm already the owner of hash slot %u",slot); + return; + } if ((n = clusterLookupNode(c->argv[4]->ptr)) == NULL) { addReplyErrorFormat(c,"I don't know about node %s", (char*)c->argv[3]->ptr); diff --git a/src/db.c b/src/db.c index 670e2bce..354f9045 100644 --- a/src/db.c +++ b/src/db.c @@ -317,7 +317,7 @@ void existsCommand(redisClient *c) { void selectCommand(redisClient *c) { int id = atoi(c->argv[1]->ptr); - if (server.cluster_enabled) { + if (server.cluster_enabled && id != 0) { addReplyError(c,"SELECT is not allowed in cluster mode"); return; }