Skip to content

[BUG] XAUTOCLAIM returns nil for old messages in PEL #10198

@rh2048

Description

@rh2048

Describe the bug

Calling XAUTOCLAIM in some instances will return nil but still register the pending messages. When I call it with JUSTID and use XREAD, the message still exists.

Edit: misread the message ID, it does not match when using XREAD.

To reproduce

I'm running in to a similar issue with XAUTOCLAIM with Redis 2.6.2 on Aiven.

When we auto claim really old messages, we receive nils:

XXXX.aivencloud.com:23033> xautoclaim XXXX XXXX test 75000 0-0 COUNT 16
1) "1641894502791-3"
2)  1) (nil)
    2) (nil)
    3) (nil)
    4) (nil)
    5) (nil)
    6) (nil)
    7) (nil)
    8) (nil)
    9) (nil)
   10) (nil)
   11) (nil)
   12) (nil)
   13) (nil)
   14) (nil)
   15) (nil)
   16) (nil)

This shows that the messages are pending: (consumers 1 and 2 are live services)

XXXX.aivencloud.com:23033> xinfo consumers XXXX XXXX
1) 1) "name"
   2) "XXXX"
   3) "pending"
   4) (integer) 64
   5) "idle"
   6) (integer) 22065
2) 1) "name"
   2) "XXXX
   3) "pending"
   4) (integer) 3640
   5) "idle"
   6) (integer) 9595
3) 1) "name"
   2) "test"
   3) "pending"
   4) (integer) 16
   5) "idle"
   6) (integer) 1110

When I attempt to read just the ID, it works as expected: Edit: see above

XXXX.aivencloud.com:23033> xautoclaim XXXX XXXX test 75000 0-0 COUNT 16 JUSTID
1) "1641894501535-0"
2)  1) "1641894501383-3"
    2) "1641894501383-4"
    3) "1641894501383-5"
    4) "1641894501383-6"
    5) "1641894501383-7"
    6) "1641894501383-9"
    7) "1641894501383-10"
    8) "1641894501383-11"
    9) "1641894501383-12"
   10) "1641894501383-13"
   11) "1641894501383-14"
   12) "1641894501384-0"
   13) "1641894501385-0"
   14) "1641894501385-3"
   15) "1641894501385-4"
   16) "1641894501391-3"

Then I can still read the message as intended: Edit: see above

XXXX.aivencloud.com:23033> xread count 1 streams XXXX 1641894501383-3
1) 1) "XXXX"
   2) 1) 1) "1642684625590-0"
         2) 1) "m"
            2) "\x12\x12\n\x101\xba.\x0b\xd5\x1fG\xe5\x91\"T`8\x04n\x81\x1a\x14\n\x12\n\x10\xeb\t|\x87K\xfeAa\x9a\xadik\xd2\xffz\xe2\"\x12\n\x10\xe5\x0cf\x0fcyO\xb2\x87\x17\x81\xc5\xf8\x02mx(\xb6\xe5\x88\xbd\xe7/2\"\n\x05mm-gc\x12\x12\n\x10\xf9\x00\xcc\xbb\xb3\x1eM\x1c\x91g\x12\xa2\xa1\x14\xc15\x18\xc8\xe3\x88\xbd\xe7/2*\n\rmm-lobby-stop\x12\x12\n\x10&\xe6\xc3\x17\xe7\xfbJ\x80\x92\t\xbfx\xc3\x0f\xf37\x18\xb6\xe5\x88\xbd\xe7/"

I assume this has something to do with the dead letter mechanism in Redis streams, but there seems to be very sparse literature on how this works under the hood and how to configure it.

Edit: Here's the output of XPENDING:

XXXX.aivencloud.com:23033> xpending XXXX XXXX - + 16
 1) 1) "1641890343856-0"
    2) "XXXX"
    3) (integer) 34775
    4) (integer) 9814
 2) 1) "1641894501138-0"
    2) "XXXX"
    3) (integer) 34775
    4) (integer) 9813
 3) 1) "1641894501167-0"
    2) "XXXX"
    3) (integer) 34775
    4) (integer) 9813
 4) 1) "1641894501167-1"
    2) "XXXX"
    3) (integer) 34775
    4) (integer) 9813
 5) 1) "1641894501167-2"
    2) "XXXX"
    3) (integer) 34775
    4) (integer) 9813
 6) 1) "1641894501167-3"
    2) "XXXX"
    3) (integer) 34775
    4) (integer) 9813
 7) 1) "1641894501168-1"
    2) "XXXX"
    3) (integer) 34775
    4) (integer) 9813
 8) 1) "1641894501168-2"
    2) "XXXX"
    3) (integer) 34775
    4) (integer) 9813
 9) 1) "1641894501168-3"
    2) "XXXX"
    3) (integer) 34775
    4) (integer) 9813
10) 1) "1641894501168-4"
    2) "XXXX"
    3) (integer) 34775
    4) (integer) 9813
11) 1) "1641894501174-0"
    2) "XXXX"
    3) (integer) 34775
    4) (integer) 9813
12) 1) "1641894501207-1"
    2) "XXXX"
    3) (integer) 34775
    4) (integer) 9813
13) 1) "1641894501207-2"
    2) "XXXX"
    3) (integer) 34775
    4) (integer) 9813
14) 1) "1641894501208-4"
    2) "XXXX"
    3) (integer) 34775
    4) (integer) 9813
15) 1) "1641894501208-6"
    2) "XXXX"
    3) (integer) 34775
    4) (integer) 9813
16) 1) "1641894501208-8"
    2) "XXXX"
    3) (integer) 34775
    4) (integer) 9813

Expected behavior

Should return messages from the PEL without having to use an XREAD workaround.

Additional information

Potentially related to #8924.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions