From 2dabf82d5f9f9eb63efb32f7b172a54f000f607f Mon Sep 17 00:00:00 2001 From: antirez Date: Fri, 30 Oct 2015 09:41:04 +0100 Subject: [PATCH] Fix call() FORCE_REPL/AOF flags setting. This commit also inverts two stanzas of the code just becuase they are more logical like that, not because currently it makes any difference. --- src/scripting.c | 27 ++++++++++++++------------- src/server.c | 4 ++-- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/scripting.c b/src/scripting.c index 3ae25152..639fd1f6 100644 --- a/src/scripting.c +++ b/src/scripting.c @@ -1164,6 +1164,19 @@ void evalGenericCommand(client *c, int evalsha) { lua_pop(lua,1); /* Remove the error handler. */ } + /* If we are using single commands replication, emit EXEC if there + * was at least a write. */ + if (server.lua_replicate_commands) { + preventCommandPropagation(c); + if (server.lua_multi_emitted) { + robj *propargv[1]; + propargv[0] = createStringObject("EXEC",4); + alsoPropagate(server.execCommand,c->db->id,propargv,1, + PROPAGATE_AOF|PROPAGATE_REPL); + decrRefCount(propargv[0]); + } + } + /* EVALSHA should be propagated to Slave and AOF file as full EVAL, unless * we are sure that the script was already in the context of all the * attached slaves *and* the current AOF file if enabled. @@ -1186,22 +1199,10 @@ void evalGenericCommand(client *c, int evalsha) { rewriteClientCommandArgument(c,0, resetRefCount(createStringObject("EVAL",4))); rewriteClientCommandArgument(c,1,script); + printf("forceCommandPropagation\n"); forceCommandPropagation(c,PROPAGATE_REPL|PROPAGATE_AOF); } } - - /* If we are using single commands replication, emit EXEC if there - * was at least a write. */ - if (server.lua_replicate_commands) { - preventCommandPropagation(c); - if (server.lua_multi_emitted) { - robj *propargv[1]; - propargv[0] = createStringObject("EXEC",4); - alsoPropagate(server.execCommand,c->db->id,propargv,1, - PROPAGATE_AOF|PROPAGATE_REPL); - decrRefCount(propargv[0]); - } - } } void evalCommand(client *c) { diff --git a/src/server.c b/src/server.c index 09c72ce7..9dcd55e7 100644 --- a/src/server.c +++ b/src/server.c @@ -2235,8 +2235,8 @@ void call(client *c, int flags) { /* If the command forced AOF / replication of the command, set * the flags regardless of the command effects on the data set. */ - if (c->flags & CLIENT_FORCE_REPL) flags |= PROPAGATE_REPL; - if (c->flags & CLIENT_FORCE_AOF) flags |= PROPAGATE_AOF; + if (c->flags & CLIENT_FORCE_REPL) propagate_flags |= PROPAGATE_REPL; + if (c->flags & CLIENT_FORCE_AOF) propagate_flags |= PROPAGATE_AOF; /* However prevent AOF / replication propagation if the command * implementatino called preventCommandPropagation() or similar,