• guybe7's avatar
    Missing EXEC on modules propagation after failed EVAL execution (#8654) · dba33a94
    guybe7 authored
    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
    dba33a94
server.c 230 KB