• antirez's avatar
    Fix semantics of Lua calls to SELECT. · 2b57d96e
    antirez authored
    Lua scripts are executed in the context of the currently selected
    database (as selected by the caller of the script).
    
    However Lua scripts are also free to use the SELECT command in order to
    affect other DBs. When SELECT is called frm Lua, the old behavior, before
    this commit, was to automatically set the Lua caller selected DB to the
    last DB selected by Lua. See for example the following sequence of
    commands:
    
        SELECT 0
        SET x 10
        EVAL "redis.call('select','1')" 0
        SET x 20
    
    Before this commit after the execution of this sequence of commands,
    we'll have x=10 in DB 0, and x=20 in DB 1.
    
    Because of the problem above, there was a bug affecting replication of
    Lua scripts, because of the actual implementation of replication. It was
    possible to fix the implementation of Lua scripts in order to fix the
    issue, but looking closely, the bug is the consequence of the behavior
    of Lua ability to set the caller's DB.
    
    Under the old semantics, a script selecting a diffe...
    2b57d96e
scripting.tcl 16 KB