Voltar
Workflow SDK ganha starts idempotentes com hooks atômicos no start()

Workflow SDK ganha starts idempotentes com hooks atômicos no start()

Aprofundamento CEVIU

Aprofundamento

O Workflow SDK mudou a forma de iniciar runs com deduplicação. Antes, o padrão era chamar getHookByToken() para ver se já existia dono do token e, só depois, chamar start(). Entre uma chamada e outra havia uma janela, e duas requisições simultâneas podiam passar na consulta e iniciar duas runs. A documentação já tratava isso como uma race condition de start duplicado.

Agora o start() admite a run e reivindica o hook num único passo atômico. O token vem do seu domínio (ID de pedido, de fatura, de importação ou de requisição) e é a chave de idempotência. Exatamente uma run é dona dele. Um start() duplicado lança HookConflictError com o conflictingRunId do dono e nunca vira run. O hook existe desde a admissão, então resumeHook funciona antes de a run executar, e payloads precoces ficam em buffer e são entregues em ordem. Dentro do workflow, createHook({ token }) com o mesmo token se vincula ao hook já reivindicado, sem registrar nada novo, sem adicionar step, e getConflict() resolve para null. Com experimental_minRetention, o token continua indisponível depois do fim da run, contado a partir do start(), e duplicatas tardias seguem recusadas. A atualização é para o workflow 5.3.1.

Por que isso importa

Para quem opera fluxos disparados por webhooks ou filas com reentrega, isso tira da aplicação o código de deduplicação manual e o risco de run duplicada, como cobrança ou importação repetida. Na leitura editorial, o ponto prático é tratar HookConflictError como caminho esperado e, se fizer sentido, rotear o payload duplicado para a run dona do token.

Perguntas frequentes

O que acontece se eu chamar start() duas vezes com o mesmo token?

A segunda chamada lança HookConflictError e nunca se torna uma run. O erro traz o conflictingRunId, que identifica a run dona do token. Assim dá para tratar a duplicata com segurança.

Preciso abrir o hook dentro do workflow para ter idempotência?

Não. O token sozinho já garante que só uma run seja dona dele. Se o workflow nunca abrir o hook, o token serviu só como chave de idempotência e a run termina normalmente.

Posso chamar resumeHook antes de a run começar a executar?

Pode. O hook reivindicado existe desde que a run é admitida. Os payloads enviados antes são guardados em buffer e entregues em ordem.

Como evitar duplicatas que chegam depois de a run terminar?

Defina experimental_minRetention. Ele mantém o token indisponível após o fim da run, contado a partir do start(), então duplicatas tardias continuam sendo recusadas. A versão indicada é a workflow 5.3.1.

Fontes

Avalie este artigo:
Categoria
CEVIU Web Dev
Publicado
04 de novembro de 2026
Editoria
CEVIU Web Dev

Quer receber mais sobre CEVIU Web Dev?

Conteúdo curado diariamente, direto no seu e-mail.

Conteúdo curado diariamenteDiversas categoriasCancele quando quiser