• zhaozhao.zz's avatar
    do not call handleClientsBlockedOnKeys inside yielding command (#12459) · 4d67bb6a
    zhaozhao.zz authored
    
    
    Fix the assertion when a busy script (timeout) signal ready keys (like LPUSH),
    and then an arbitrary client's `allow-busy` command steps into `handleClientsBlockedOnKeys`
    try wake up clients blocked on keys (like BLPOP).
    
    Reproduction process:
    1. start a redis with aof
        `./redis-server --appendonly yes`
    2. exec blpop
        `127.0.0.1:6379> blpop a 0`
    3. use another client call a busy script and this script push the blocked key
        `127.0.0.1:6379> eval "redis.call('lpush','a','b') while(1) do end" 0`
    4. user a new client call an allow-busy command like auth
        `127.0.0.1:6379> auth a`
    
    BTW, this issue also break the atomicity of script.
    
    This bug has been around for many years, the old versions only have the
    atomic problem, only 7.0/7.2 has the assertion problem.
    Co-authored-by: default avatarOran Agra <oran@redislabs.com>
    (cherry picked from commit 8226f39f)
    4d67bb6a
server.c 276 KB