Skip to content

RavenDb and CosmosDb dead-letter readers still abort the whole queue on one unreadable body #3773

Description

@jeremydmiller

Follow-up to the CritterWatch#902 guard that shipped in 6.24.3 (b031f8a): the RDBMS and Oracle dead-letter readers now degrade an unreadable `body` (hand-seeded raw JSON, incompatible serialization version) to a self-identifying placeholder envelope instead of throwing out of the per-row read and hiding the entire queue behind the poison row.

That commit deliberately did not touch two reader shapes, and they carry the same defect:

  • RavenDb — `RavenDbMessageStore.DeadLetters` / `Internals/DeadLetterMessage`
  • CosmosDb — `CosmosDbMessageStore.DeadLetters` / `Internals/DeadLetterMessage`

Both use a different reader shape from the shared RDBMS path, and there was no local repro for either at the time, so they were left as-is rather than fixed blind. Until they get the same treatment, one bad dead-letter document in either store still costs the whole queue view: the console reports "No dead letter queue entries found" while readable dead letters sit behind the poison document.

Acceptance shape (same as the RDBMS fix): a bad row must cost you that row, not the queue — every scalar field read before the body, the body deserialize guarded, and the failed row surfaced as a placeholder that still identifies itself (id, message type, destination where recoverable).

🤖 Generated with Claude Code

Metadata

Metadata

Assignees

No one assigned

    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