summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorantirez <antirez@gmail.com>2015-02-09 23:57:52 +0100
committerantirez <antirez@gmail.com>2015-02-11 10:52:28 +0100
commit55003f7a118beb20ed1bc65926e29e207c3b721a (patch)
tree86d6c1be6a5f5fba581a39dd4506ec5bfd546879
parentcc7f0434b5c590e5a61c3cefa6ed9fb193d021dd (diff)
downloadredis-55003f7a118beb20ed1bc65926e29e207c3b721a.tar.gz
alsoPropagate: handle REDIS_CALL_PROPAGATE and AOF loading.
-rw-r--r--src/redis.c13
-rw-r--r--tests/integration/aof.tcl2
2 files changed, 10 insertions, 5 deletions
diff --git a/src/redis.c b/src/redis.c
index 8bfcfdaad..db3af61b0 100644
--- a/src/redis.c
+++ b/src/redis.c
@@ -2030,9 +2030,12 @@ void propagate(struct redisCommand *cmd, int dbid, robj **argv, int argc,
void alsoPropagate(struct redisCommand *cmd, int dbid, robj **argv, int argc,
int target)
{
- robj **argvcopy = zmalloc(sizeof(robj*)*argc);
+ robj **argvcopy;
int j;
+ if (server.loading) return; /* No propagation during loading. */
+
+ argvcopy = zmalloc(sizeof(robj*)*argc);
for (j = 0; j < argc; j++) {
argvcopy[j] = argv[j];
incrRefCount(argv[j]);
@@ -2132,9 +2135,11 @@ void call(redisClient *c, int flags) {
int j;
redisOp *rop;
- for (j = 0; j < server.also_propagate.numops; j++) {
- rop = &server.also_propagate.ops[j];
- propagate(rop->cmd, rop->dbid, rop->argv, rop->argc, rop->target);
+ if (flags & REDIS_CALL_PROPAGATE) {
+ for (j = 0; j < server.also_propagate.numops; j++) {
+ rop = &server.also_propagate.ops[j];
+ propagate(rop->cmd,rop->dbid,rop->argv,rop->argc,rop->target);
+ }
}
redisOpArrayFree(&server.also_propagate);
}
diff --git a/tests/integration/aof.tcl b/tests/integration/aof.tcl
index 01b928bb5..832f996e1 100644
--- a/tests/integration/aof.tcl
+++ b/tests/integration/aof.tcl
@@ -204,7 +204,7 @@ tags {"aof"} {
}
}
- ## Test that SPOP with <count> (that modifies the client's argc/argv) is correctly free'd
+ ## Uses the alsoPropagate() API.
create_aof {
append_to_aof [formatCommand sadd set foo]
append_to_aof [formatCommand sadd set bar]