getsentry / getsentry/sentry-javascript

Cloudflare Workers: no server segment span for a request interrupted by a streaming RSC error under span streaming

Open
#23,932 1 comment 0 reactions 1 assignee Claimed by @chargome View on GitHub
Cloudflare Workers Next.js Spans
Dominant language
TypeScript
Stars
8.7k
Forks
1.8k
Avg merge
1d 17h
Merged PRs (30d)
515

Description

## What

On Cloudflare Workers with span streaming enabled, a request whose response is interrupted by a crashing streaming RSC promise emits no `http.server` segment span for the route. Under `traceLifecycle: 'static'` the equivalent transaction is sent.

The same scenario on Node (`nextjs-16`) does emit the server segment span, so this appears specific to the Workers runtime.

## Evidence

Observed in the `nextjs-16-cf-workers` E2E app while porting it to span streaming in #23926. The streamed event dump for a run of `streaming-rsc-error.test.ts` contains, all on trace `7e8fee9d`:

```
resolve page server component "/streaming-rsc-error/[param]" is_segment=false
http://localhost:3030/streaming-rsc-error/123 is_segment=false (x7)
/streaming-rsc-error/:param is_segment=true <- client pageload
```

The error (`I am a data streaming error`) is captured on that same trace. Server-side children are present, so the work is traced - but there is no `GET /streaming-rsc-error/[param]` segment span. Other routes in the same app do emit their server segments (`GET /parameterized/[one]/beep/[two]`, `GET /isr-test/[product]`, etc.), so it is not a blanket absence.

`nextjs-16-cf-workers` passes on `develop` today with the transaction-based version of this spec, which is not skipped there.

## Impact

A request aborted by a streaming RSC error is not represented by a segment span on Workers under streaming, so it would not appear as a transaction in the product. Its children and its error are still sent, and are orphaned onto the client pageload's trace.

## Status

The affected E2E test is skipped in #23926 with a pointer to this issue, rather than having its expectations relaxed. This app already carries several `test.skip`s with TODOs for Cloudflare Workers SDK work; this is another.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.