GetHashSlot for XREADGROUP, XREAD, XGROUP and XINFO is incorrect (original) (raw)

The current implementation of XREADGROUP, XREAD, XGROUP and XINFO uses the ComandValuesMessage this results in an incorrect HashSlot of -1. Using these commands in a cluster environment will result in unnecessary MOVED responses (and round trips).

To fix these command some additional Message types are required. XGROUP and XINFO could be implemented using a CommandValueKeyValuesMessage (first argument is a value, second argument the key and followed by one or more values).

The XREADGROUP and XREAD commands will require a custom Message as they have multiple keys near the end of the command after the STREAMS argument. In redis-server a custom getKeys function has been implemented as well for these commands (see xreadGetKeys in db.c)