diff options
author | antirez <antirez@gmail.com> | 2015-03-22 22:23:41 +0100 |
---|---|---|
committer | antirez <antirez@gmail.com> | 2015-03-22 22:24:05 +0100 |
commit | c2717911db304d62d1ac775cc5fdae84ff05ae2f (patch) | |
tree | 0c18e67dbaaa779ae0a6f732c55cf8b887ae5dd1 | |
parent | 1641f41cfcfc6485d7eb0ce0270538f386c44802 (diff) | |
download | redis-c2717911db304d62d1ac775cc5fdae84ff05ae2f.tar.gz |
Cluster: fix Lua scripts replication to slave nodes.
-rw-r--r-- | src/redis.c | 2 | ||||
-rw-r--r-- | src/scripting.c | 5 |
2 files changed, 5 insertions, 2 deletions
diff --git a/src/redis.c b/src/redis.c index 15d2c71f0..5867c4c9a 100644 --- a/src/redis.c +++ b/src/redis.c @@ -2158,6 +2158,8 @@ int processCommand(redisClient *c) { * 2) The command has no key arguments. */ if (server.cluster_enabled && !(c->flags & REDIS_MASTER) && + !(c->flags & REDIS_LUA_CLIENT && + server.lua_caller->flags & REDIS_MASTER) && !(c->cmd->getkeys_proc == NULL && c->cmd->firstkey == 0)) { int hashslot; diff --git a/src/scripting.c b/src/scripting.c index c5dd4e718..4f807f4e2 100644 --- a/src/scripting.c +++ b/src/scripting.c @@ -357,8 +357,9 @@ int luaRedisGenericCommand(lua_State *lua, int raise_error) { if (cmd->flags & REDIS_CMD_WRITE) server.lua_write_dirty = 1; /* If this is a Redis Cluster node, we need to make sure Lua is not - * trying to access non-local keys. */ - if (server.cluster_enabled) { + * trying to access non-local keys, with the exception of commands + * received from our master. */ + if (server.cluster_enabled && !(server.lua_caller->flags & REDIS_MASTER)) { /* Duplicate relevant flags in the lua client. */ c->flags &= ~(REDIS_READONLY|REDIS_ASKING); c->flags |= server.lua_caller->flags & (REDIS_READONLY|REDIS_ASKING); |