Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

Cloudflare Workflow instrumentation leaves pending waitUntil tasks after the flush timeout

クローズ
#24,482 コメント 1 件 リアクション 0 件 担当者 1 名 GitHub で見る

@JPeer264 がすでに取り組んでいます。

2026年9月18日 から。

評価

この issue はまだ評価されていません。

説明

Bug Cloudflare Workers
Is there an existing issue for this?
How do you use Sentry?

Sentry Saas (sentry.io)

Which SDK are you using?

@sentry/cloudflare

SDK Version

10.71.0

Framework Version

Cloudflare Workers Workflows; Wrangler 4.126.0

Link to Sentry event

No response

Reproduction Example/SDK Setup
import * as Sentry from "@sentry/cloudflare";
import { WorkflowEntrypoint } from "cloudflare:workers";

class ReproductionWorkflow extends WorkflowEntrypoint {
  async run(_event, step) {
    for (let index = 0; index < 100; index++) {
      await step.do(`step-${index}`, async () => index);
    }
  }
}

export const ReproductionWorkflowWithSentry = Sentry.instrumentWorkflowWithSentry(
  () => ({
    // This test endpoint accepts Sentry envelopes but delays its response
    // for 120 seconds.
    dsn: "https://public@<delayed-endpoint>/1",
    tracesSampleRate: 1,
    enableLogs: false,
    sendClientReports: false,
  }),
  ReproductionWorkflow,
);
Steps to Reproduce
  1. Deploy an HTTP endpoint that accepts requests and delays every response for 120 seconds.
  2. Configure the instrumented Workflow’s DSN to use that endpoint.
  3. Deploy and trigger the Workflow with 100 trivial step.do() calls.
  4. In Cloudflare Observability, search the Worker’s events for "tasks did not complete".
Expected Result

Sentry’s flush(2000) timeout should settle all Sentry-owned waitUntil work within two seconds, including cancelling any pending transport request. No waitUntil cancellation warning should be emitted.

Actual Result

Cloudflare emits:

"waitUntil() tasks did not complete within the allowed time after invocation end and have been cancelled."

The Workflow itself completes successfully, but Sentry-owned work remains pending after the flush timeout.

Additional Context

Investigation identified three places where the configured flush timeout was not fully enforced:

  1. The transport drain returned false after its timeout but did not abort the pending fetch request.
  2. Workflow steps reused flushPointReached from the previous step, causing later steps to register unnecessary eager waitUntil flushes.
  3. CloudflareClient.flush() awaited flushLock.finalize() outside the configured timeout.

We reproduced the warning in a deployed Cloudflare Workflow using a transport endpoint that delayed every response for 120 seconds. After addressing all three paths, 20/20 Workflow instances completed with zero matching warnings in Cloudflare Observability.

Each defect has a red/green regression test. The complete @sentry/cloudflare test suite passes (955/955), along with lint, build, and typecheck.

Priority

No response

主要言語
TypeScript
スター
8.7k
フォーク
1.9k
平均マージ
1日 16時間
マージ済み PR(30日)
576

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

getsentry/sentry-javascript のほかの issue

getsentry/sentry-javascript の issue をすべて見る

似ている issue

TypeScript の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。