• perryitay's avatar
    Adding module api for processing commands during busy jobs and allow flagging... · c4b78823
    perryitay authored
    
    Adding module api for processing commands during busy jobs and allow flagging the commands that should be handled at this status (#9963)
    
    Some modules might perform a long-running logic in different stages of Redis lifetime, for example:
    * command execution
    * RDB loading
    * thread safe context
    
    During this long-running logic Redis is not responsive.
    
    This PR offers 
    1. An API to process events while a busy command is running (`RM_Yield`)
    2. A new flag (`ALLOW_BUSY`) to mark the commands that should be handled during busy
      jobs which can also be used by modules (`allow-busy`)
    3. In slow commands and thread safe contexts, this flag will start rejecting commands with -BUSY only
      after `busy-reply-threshold`
    4. During loading (`rdb_load` callback), it'll process events right away (not wait for `busy-reply-threshold`),
      but either way, the processing is throttled to the server hz rate.
    5. Allow modules to Yield to redis background tasks, but not to client commands
    
    * rename `script-time-limit` to `busy-reply-threshold` (an alias to the pre-7.0 `lua-time-limit`)
    Co-authored-by: default avatarOran Agra <oran@redislabs.com>
    c4b78823
script.c 16 KB