[Cloudflare] instrumentWorkflowWithSentry does not capture a NonRetryableError thrown before the final attempt

Aberta Para iniciantes
#26,091 1 comentário 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 1 dia

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
2/5
Tempo estimado
1-3 horas
Facilidade para iniciantes
78/100
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Ativa
Stack de tecnologia
typescript

Direção de pesquisa

Comece lendo instrumentWorkflowWithSentry e WrappedWorkflowStep.do, especialmente instrumentedCallback, em que a captura atualmente depende da quantidade de tentativas. Confira os testes existentes de instrumentação de workflows do Cloudflare e adicione cobertura para um NonRetryableError lançado antes da última tentativa de repetição. A tarefa estará concluída quando essa falha produzir um evento do Sentry e o comportamento após esgotar as tentativas continuar coberto.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

Bug Cloudflare Workers
Is there an existing issue for this?

Related: #17421, #21025

How do you use Sentry?

Sentry Saas (sentry.io)

Which SDK are you using?

@sentry/cloudflare

SDK Version

11.9.0 (the code is the same in 11.10.0 and on develop)

Framework Version

wrangler 4.98.0, compatibility_date 2025-06-04

Reproduction Example/SDK Setup
import { WorkflowEntrypoint } from 'cloudflare:workers'
import { NonRetryableError } from 'cloudflare:workflows'
import * as Sentry from '@sentry/cloudflare'

class MyWorkflow extends WorkflowEntrypoint<Env, Params> {
  async run(event, step) {
    await step.do('load', { retries: { limit: 2, delay: '1 second' } }, async () => {
      throw new NonRetryableError('permanent failure')
    })
  }
}

export const Instrumented = Sentry.instrumentWorkflowWithSentry(
  (env) => ({ dsn: env.SENTRY_DSN }),
  MyWorkflow,
)
Steps to Reproduce
  1. Wrap a Workflow with instrumentWorkflowWithSentry.
  2. Throw a NonRetryableError in a step.do with retries.limit > 0.
  3. Trigger an instance.
Expected Result

One Sentry event for the NonRetryableError that ends the instance.

Actual Result

No event. WrappedWorkflowStep.do only captures when attempt > retries.limit, and a NonRetryableError ends the instance on attempt 1. Regression since 10.56.0 (#21025): before, the step error was captured on every attempt, so it was reported.

Additional Context

#17421 asked for one error "once all step.do retries have been exhausted, or on a NonRetryableError". #21025 covered only the first case.

Suggested fix: in instrumentedCallback, also capture when error.name === 'NonRetryableError'. I'm happy to open a PR with integration tests.

Linguagem predominante
TypeScript
Estrelas
8.8k
Forks
1.9k
Merge médio
1d 20h
PRs com merge (30d)
682

Preparar o ambiente

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de getsentry/sentry-javascript

Todas as issues de getsentry/sentry-javascript

Issues semelhantes

Mais issues de TypeScript

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.