From d827dbfda770d040d23802fb462487eea3699f0b Mon Sep 17 00:00:00 2001 From: Chris Thunes Date: Fri, 11 Mar 2016 15:22:36 -0500 Subject: [PATCH] Ensure slots are rechecked on EXEC. Fixes #2515. --- src/server.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/server.c b/src/server.c index 4c480fad..bab8bb67 100644 --- a/src/server.c +++ b/src/server.c @@ -2385,7 +2385,8 @@ int processCommand(client *c) { !(c->flags & CLIENT_MASTER) && !(c->flags & CLIENT_LUA && server.lua_caller->flags & CLIENT_MASTER) && - !(c->cmd->getkeys_proc == NULL && c->cmd->firstkey == 0)) + !(c->cmd->getkeys_proc == NULL && c->cmd->firstkey == 0 && + c->cmd->proc != execCommand)) { int hashslot; @@ -2397,7 +2398,11 @@ int processCommand(client *c) { int error_code; clusterNode *n = getNodeByQuery(c,c->cmd,c->argv,c->argc,&hashslot,&error_code); if (n == NULL || n != server.cluster->myself) { - flagTransaction(c); + if (c->cmd->proc == execCommand) { + discardTransaction(c); + } else { + flagTransaction(c); + } clusterRedirectClient(c,n,hashslot,error_code); return C_OK; }