diff options
author | guybe7 <guy.benoish@redislabs.com> | 2021-03-15 20:19:57 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-15 21:19:57 +0200 |
commit | dba33a943d508bc5929db4950b4abadf6278ef02 (patch) | |
tree | 95b02562a6a38779eaf98017f6b027be845a1151 /src/blocked.c | |
parent | 84d056d0f742444819355d6018a2329ede838215 (diff) | |
download | redis-dba33a943d508bc5929db4950b4abadf6278ef02.tar.gz |
Missing EXEC on modules propagation after failed EVAL execution (#8654)
1. moduleReplicateMultiIfNeeded should use server.in_eval like
moduleHandlePropagationAfterCommandCallback
2. server.in_eval could have been set to 1 and not reset back
to 0 (a lot of missed early-exits after in_eval is already 1)
Note: The new assertions in processCommand cover (2) and I added
two module tests to cover (1)
Implications:
If an EVAL that failed (and thus left server.in_eval=1) runs before a module
command that replicates, the replication stream will contain MULTI (because
moduleReplicateMultiIfNeeded used to check server.lua_caller which is NULL
at this point) but not EXEC (because server.in_eval==1)
This only affects modules as module.c the only user of server.in_eval.
Affects versions 6.2.0, 6.2.1
Diffstat (limited to 'src/blocked.c')
0 files changed, 0 insertions, 0 deletions