From c479eace4512193bcfe3dcab3ab238486f6f9405 Mon Sep 17 00:00:00 2001 From: antirez Date: Fri, 17 Apr 2020 12:38:12 +0200 Subject: Fix XCLAIM propagation in AOF/replicas for blocking XREADGROUP. See issue #7105. --- src/server.c | 9 +++++++-- src/t_stream.c | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/server.c b/src/server.c index 0afd67514..fc9b87aae 100644 --- a/src/server.c +++ b/src/server.c @@ -3082,8 +3082,13 @@ struct redisCommand *lookupCommandOrOriginal(sds name) { * + PROPAGATE_AOF (propagate into the AOF file if is enabled) * + PROPAGATE_REPL (propagate into the replication link) * - * This should not be used inside commands implementation. Use instead - * alsoPropagate(), preventCommandPropagation(), forceCommandPropagation(). + * This should not be used inside commands implementation since it will not + * wrap the resulting commands in MULTI/EXEC. Use instead alsoPropagate(), + * preventCommandPropagation(), forceCommandPropagation(). + * + * However for functions that need to (also) propagate out of the context of a + * command execution, for example when serving a blocked client, you + * want to use propagate(). */ void propagate(struct redisCommand *cmd, int dbid, robj **argv, int argc, int flags) diff --git a/src/t_stream.c b/src/t_stream.c index 4ce3a9b25..155167af9 100644 --- a/src/t_stream.c +++ b/src/t_stream.c @@ -848,7 +848,7 @@ void streamPropagateXCLAIM(client *c, robj *key, streamCG *group, robj *groupnam argv[11] = createStringObject("JUSTID",6); argv[12] = createStringObject("LASTID",6); argv[13] = createObjectFromStreamID(&group->last_id); - alsoPropagate(server.xclaimCommand,c->db->id,argv,14,PROPAGATE_AOF|PROPAGATE_REPL); + propagate(server.xclaimCommand,c->db->id,argv,14,PROPAGATE_AOF|PROPAGATE_REPL); decrRefCount(argv[0]); decrRefCount(argv[3]); decrRefCount(argv[4]); -- cgit v1.2.1