cloudflare / cloudflare/developer-platform

Workers-for-Platforms workers can "brick" themselves after running out of CPU time.

Open
#49 0 comments 0 reactions 1 assignee Claimed by @dinasaur404 View on GitHub
product:workers-for-platforms
Dominant language
No language data
Stars
1
Forks
0
PR merge metrics
No merged PRs in 30d

Description

### What versions & operating system are you using?

System:
OS: macOS 15.6.1
CPU: (16) arm64 Apple M4 Max
Memory: 2.01 GB / 48.00 GB
Shell: 5.9 - /bin/zsh
Binaries:
Node: 24.4.1 - /Users/dmaretskyi/.proto/tools/node/24.4.1/bin/node
npm: 11.4.2 - /Users/dmaretskyi/.proto/tools/node/24.4.1/bin/npm
pnpm: 9.15.4 - /Users/dmaretskyi/.proto/shims/pnpm
bun: 1.3.3 - /Users/dmaretskyi/.proto/shims/bun
Deno: 2.5.6 - /Users/dmaretskyi/.proto/shims/deno
npmPackages:
@cloudflare/vitest-pool-workers: 0.10.5 => 0.10.5
@cloudflare/workers-types: 4.20251106.1 => 4.20251106.1
wrangler: 4.49.0 => 4.49.0

### Please provide a link to a minimal reproduction

-

### Describe the Bug

We are deploying simple test worker to a dispatch namespace:

```ts
export default {
async fetch(request: Request, env: Env) {
const { iterations } = JSON.parse(await request.body.json());

let a = 0n;
let b = 1n;
for (let i = 0; i < iterations; i++) {
a += b;
b = a - b;
}

return new Response(JSON.stringify({ result: a.toString() }), {
headers: { "Content-Type": "application/json" },
});
},
};
```

Running this with a high iteration count (~1,000,000,000) we can synthetically cause a `Worker exceeded CPU time limit.` error.

Now, the issue is when we invoke the worker again. All subsequent invocations immediatelly fail with: `The Workers runtime canceled this request because it detected that your Worker's code had hung and would never generate a response.`. Based on the timings **the worker code isn't being executed**.

For more context, the dispatch-namespace is being invoked from a DurableObject:

```
[HTTP fetch]--->[DurableObject rpc]--->[DispatchNamespace fetch]
```

All of the errors get thrown when we call `fetch` on the stub returned from the dipatch namespace.
After the initial invocation fails with `Worker exceeded CPU time limit.` the worker is essentially **bricked**. We cannot invoke it even with a low iteration count.

From my testing, if we re-deploy the dispatch-namespace worker, or rotate the DurableObject the requests are routed through - the error goes away.

To recap:

```
Invocation 1:
iterations = 100
--> OK

Invocation 2:
iterations = 1,000,000,000. (after ~30 seconds)
--> error: Worker exceeded CPU time limit.

Invocations 3,4,5,...:
iterations = 100 (thrown immediatelly)
--> error: The Workers runtime canceled this request because it detected that your Worker's code had hung and would never generate a response.
```

Note that all code here (both the invoking worker and the dispatch-namespace one) run on Cloudflare hosted infrastructure, not locally.

### Please provide any relevant error logs

_No response_

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.