Skip to content

fix(macros): aplicar retry/DLQ declarados em #[subscriber] no EventRouter#14

Draft
cursor[bot] wants to merge 1 commit into
mainfrom
cursor/critical-correctness-bugs-c193
Draft

fix(macros): aplicar retry/DLQ declarados em #[subscriber] no EventRouter#14
cursor[bot] wants to merge 1 commit into
mainfrom
cursor/critical-correctness-bugs-c193

Conversation

@cursor
Copy link
Copy Markdown
Contributor

@cursor cursor Bot commented May 23, 2026

Bug e impacto

Os atributos retry = exponential(...) e dlq = "..." em #[subscriber] eram documentados (CHANGELOG US-008) e expostos como constantes (RETRY_MAX_ATTEMPTS, etc.), mas o método register() não encadeava EventRouter::with_retry / with_dlq. Na prática, EventRouter::attach só via política quando o utilizador repetia a configuração no builder fluente — quem confiava só na macro ficava sem retentativas in-process e sem DLQ via router, com comportamento diferente do anunciado (mensagens falhavam na primeira tentativa e não seguiam o caminho de DLQ do wrap_with_retry).

Causa raiz

O codegen de register() terminava em subscribe / subscribe_publish sem propagar retry/dlq do SubscriberAttr para as inscrições que attach consome.

Correção

  • Em serverust-macros, após subscribe*, emitir sufixo que encadeia .with_retry(RetryPolicy::exponential(...)) (e .dead_letter(#dlq) quando aplicável) ou apenas .with_dlq(#dlq) quando só há DLQ.
  • Testes de integração em serverust-events/tests/macros_sqs_dlq.rs (InMemoryBroker).
  • trybuild: atualizar fail_fifo_producer_missing_group_id.stderr para o formato de nota do rustc 1.98.
  • CHANGELOG em [Unreleased], com nota de que Broker::publish na DLQ do router não funciona com SqsBroker sink-only (usar DlqLayer ou DLQ na fila AWS).

Validação

  • cargo +nightly test -p serverust-events --test macros_sqs_dlq --features in-memory,sqs
  • cargo +nightly test -p serverust-macros --test trybuild
  • cargo +nightly check --workspace
Open in Web View Automation 

O register() só emitia constantes RETRY_* / DLQ_QUEUE; attach ignorava os
atributos. Agora encadeia with_retry / with_dlq conforme exponential e dlq.

Testes de integração em macros_sqs_dlq; trybuild stderr alinhado ao rustc 1.98.

CHANGELOG: nota sobre SqsBroker sink-only e publish na DLQ.

Co-authored-by: Jaime Basso <JaimeJunr@users.noreply.github.com>
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