When XCLAIM changes the ownership of an already pending message to the specified consumer, the consumer will be created if it does not exist.

However, the master propagates XCLAIM command only if at least one of the ids was claimed. So, if the consumer did not exist before, the consumer would be created only in master.

for example: master

127.0.0.1:6379> XGROUP CREATE s g $ MKSTREAM
OK
127.0.0.1:6379> XADD s * f v
"1578330523265-0"
127.0.0.1:6379> XREADGROUP GROUP g c1 STREAMS s >
1) 1) "s"
   2) 1) 1) "1578330523265-0"
         2) 1) "f"
            2) "v"
127.0.0.1:6379> XINFO CONSUMERS s g
1) 1) "name"
   2) "c1"
   3) "pending"
   4) (integer) 1
   5) "idle"
   6) (integer) 35690
127.0.0.1:6379> XCLAIM s g c2 100000 1578330523265-0
(empty array)
127.0.0.1:6379> XINFO CONSUMERS s g
1) 1) "name"
   2) "c1"
   3) "pending"
   4) (integer) 1
   5) "idle"
   6) (integer) 77355
2) 1) "name"
   2) "c2"
   3) "pending"
   4) (integer) 0
   5) "idle"
   6) (integer) 5208

replica

127.0.0.1:6380> XINFO CONSUMERS s g
1) 1) "name"
   2) "c1"
   3) "pending"
   4) (integer) 1
   5) "idle"
   6) (integer) 91311

There are 2 available options: 1. Creates the consumer only if there is at least one claimed id 2. Send XCLAIM with no ids to the replica

I think that option 1 is more suited. @antirez what do you think? I can implement it and PR

Comment From: antirez

Thanks @valentinogeron, I just pushed a commit that should fix this in the way you thought to be more useful (I agree). Looks good to you? Thanks.

Comment From: valentinogeron

@antirez - yes. Thanks!