Skip to content

fix(sqs): accept MessageGroupId on standard queues - #71

Open
kylecannon wants to merge 1 commit into
tyrchen:masterfrom
kylecannon:fix/sqs-message-group-id-standard-queues
Open

kylecannon wants to merge 1 commit into
tyrchen:masterfrom
kylecannon:fix/sqs-message-group-id-standard-queues

Conversation

@kylecannon

@kylecannon kylecannon commented Oct 30, 2026 •

Copy link
Copy Markdown

Summary

Since SQS fair queues, standard queues take a MessageGroupId and hand it back on receive. rustack still rejected it as FIFO-only, so a client using fair queues failed on every send.

  • Standard messages now keep their group id, and it comes back as the MessageGroupId attribute on receive.
  • The id is validated the same way on both queue types (1-128 letters, digits and punctuation, via validate_message_group_id). FIFO queues weren't checking it before either.
  • The dead-letter path used "has a group id" to mean "is FIFO", which would have kept grouped standard messages from ever reaching their DLQ. The source queue now passes its type along with the transfer (source_is_fifo on QueueCommand::Transfer).
  • The sqs-compat test that expected the old rejection is flipped. MessageDeduplicationId is still rejected on standard queues.

Test plan

  • Unit tests for keeping the group id on receive, the format check on both queue types, and dead-lettering a grouped standard message; an integration test for sending with a group id; sqs-compat tests for an accepted and an invalid id.
  • cargo test -p rustack-sqs-core and the SQS integration tests pass; sqs-compat passes with the flipped test.

Since SQS fair queues, standard queues take a MessageGroupId and hand it
back on receive. rustack still rejected it as FIFO-only, so a client
using fair queues failed on every send.

Standard messages now keep their group id, and the id is validated the
same way on both queue types (1-128 letters, digits and punctuation).
FIFO queues weren't checking it before either.

The dead-letter path used "has a group id" to mean "is FIFO", which
would have kept grouped standard messages from ever reaching their DLQ.
The source queue now passes its type along with the transfer.

The sqs-compat test that expected the old rejection is flipped.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant