Skip to content

fix(cloudflare): Consume body of fetch in the Cloudflare transport#18545

Merged
JPeer264 merged 1 commit intodevelopfrom
jp/cloudflare-fetch-body
Dec 22, 2025
Merged

fix(cloudflare): Consume body of fetch in the Cloudflare transport#18545
JPeer264 merged 1 commit intodevelopfrom
jp/cloudflare-fetch-body

Conversation

@JPeer264
Copy link
Member

@JPeer264 JPeer264 commented Dec 17, 2025

(closes #18534)
(closes JS-1319)

This consumes the body so it is safe to be closed by Cloudflare Workers. Unfortunately this cannot be reproduced locally and is only happening when the worker is being deployed (so there is no E2E test for this)

@AbhiPrasad do you think it is necessary to add this code snippet in the other transports we have? It is what I've read specifically to Cloudflare, since they seem to be super strict on it, but this could potentially be a problem in other runtimes as well.

@JPeer264 JPeer264 self-assigned this Dec 17, 2025
@linear
Copy link

linear bot commented Dec 17, 2025

@JPeer264 JPeer264 merged commit 6ef3ce7 into develop Dec 22, 2025
52 of 53 checks passed
@JPeer264 JPeer264 deleted the jp/cloudflare-fetch-body branch December 22, 2025 15:10
Karavil pushed a commit to Karavil/sentry-javascript that referenced this pull request Mar 21, 2026
Bun's fetch implementation retains the backing ArrayBuffer of unconsumed
response bodies indefinitely. This causes a memory leak when sending
many Sentry envelopes, as each response's ArrayBuffer accumulates in
memory.

This applies the same fix that was made for the Cloudflare transport in
getsentry#18545 — consuming the response body with response.text() after
extracting the needed headers.

In production, this leak manifests as ~8KB ArrayBuffers accumulating at
~8/sec (one per envelope), leading to OOM kills after ~5 hours on
containers with 4GB memory limits.
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.

Cloudflare transport doesn't consume fetch response bodies

2 participants