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.
This commit is contained in:
antirez 2015-10-30 09:41:04 +01:00
parent 514a234722
commit 2dabf82d5f
2 changed files with 16 additions and 15 deletions

View File

@ -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) {

View File

@ -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,