Skip to content

Conversation

Lms24
Copy link
Member

@Lms24 Lms24 commented Sep 16, 2025

This PR reverts #17539 because it causes e2e test fails on PRs as well as on develop and release branches.

It seems like when our e2e tests expect errors in websocket, another unrelated error is thrown:

  ✘  5 [chromium] › tests/index.test.ts:41:5 › Websocket.webSocketMessage (13ms)

[WebServer] ✘ [ERROR] Uncaught TypeError: Illegal invocation: function called with incorrect `this` reference. See https://developers.cloudflare.com/workers/observability/errors/#illegal-invocation-errors for details. Error
[WebServer] 
[WebServer]       at fetch (file:///private/var/folders/63/gxb4ks2n7wbf_7bbwz86cgsc0000gn/T/sentry-e2e-tests-cloudflare-workers-fU9D9e/src/index.ts:32:18)
[WebServer]       at null.<anonymous> (file:///private/var/folders/63/gxb4ks2n7wbf_7bbwz86cgsc0000gn/T/sentry-e2e-tests-cloudflare-workers-fU9D9e/node_modules/.pnpm/@[email protected]_@[email protected]/node_modules/@sentry/cloudflare/src/durableobject.ts:219:23)
[WebServer]       at null.<anonymous> (file:///private/var/folders/63/gxb4ks2n7wbf_7bbwz86cgsc0000gn/T/sentry-e2e-tests-cloudflare-workers-fU9D9e/node_modules/.pnpm/@[email protected]_@[email protected]/node_modules/@sentry/cloudflare/src/request.ts:108:33)
[WebServer]       at handleCallbackErrors.status.status (file:///private/var/folders/63/gxb4ks2n7wbf_7bbwz86cgsc0000gn/T/sentry-e2e-tests-cloudflare-workers-fU9D9e/node_modules/.pnpm/@[email protected]/node_modules/@sentry/core/src/tracing/trace.ts:77:15)
[WebServer]       at handleCallbackErrors (file:///private/var/folders/63/gxb4ks2n7wbf_7bbwz86cgsc0000gn/T/sentry-e2e-tests-cloudflare-workers-fU9D9e/node_modules/.pnpm/@[email protected]/node_modules/@sentry/core/src/utils/handleCallbackErrors.ts:20:26)
[WebServer]       at null.<anonymous> (file:///private/var/folders/63/gxb4ks2n7wbf_7bbwz86cgsc0000gn/T/sentry-e2e-tests-cloudflare-workers-fU9D9e/node_modules/.pnpm/@[email protected]/node_modules/@sentry/core/src/tracing/trace.ts:76:14)
[WebServer]       at null.<anonymous> (file:///private/var/folders/63/gxb4ks2n7wbf_7bbwz86cgsc0000gn/T/sentry-e2e-tests-cloudflare-workers-fU9D9e/node_modules/.pnpm/@[email protected]/node_modules/@sentry/core/src/tracing/trace.ts:530:100)
[WebServer]       at null.<anonymous> (file:///private/var/folders/63/gxb4ks2n7wbf_7bbwz86cgsc0000gn/T/sentry-e2e-tests-cloudflare-workers-fU9D9e/node_modules/.pnpm/@[email protected]/node_modules/@sentry/core/src/tracing/trace.ts:60:12)
[WebServer]       at null.<anonymous> (file:///private/var/folders/63/gxb4ks2n7wbf_7bbwz86cgsc0000gn/T/sentry-e2e-tests-cloudflare-workers-fU9D9e/node_modules/.pnpm/@[email protected]_@[email protected]/node_modules/@sentry/cloudflare/src/async.ts:41:14)
[WebServer]       at withScope (file:///private/var/folders/63/gxb4ks2n7wbf_7bbwz86cgsc0000gn/T/sentry-e2e-tests-cloudflare-workers-fU9D9e/node_modules/.pnpm/@[email protected]_@[email protected]/node_modules/@sentry/cloudflare/src/async.ts:40:25)
[WebServer]       at withScope (file:///private/var/folders/63/gxb4ks2n7wbf_7bbwz86cgsc0000gn/T/sentry-e2e-tests-cloudflare-workers-fU9D9e/node_modules/.pnpm/@[email protected]/node_modules/@sentry/core/src/currentScopes.ts:59:18)
[WebServer]       at startSpan (file:///private/var/folders/63/gxb4ks2n7wbf_7bbwz86cgsc0000gn/T/sentry-e2e-tests-cloudflare-workers-fU9D9e/node_modules/.pnpm/@[email protected]/node_modules/@sentry/core/src/tracing/trace.ts:56:10)
[WebServer]       at null.<anonymous> (file:///private/var/folders/63/gxb4ks2n7wbf_7bbwz86cgsc0000gn/T/sentry-e2e-tests-cloudflare-workers-fU9D9e/node_modules/.pnpm/@[email protected]_@[email protected]/node_modules/@sentry/cloudflare/src/request.ts:101:16)
[WebServer]       at null.<anonymous> (file:///private/var/folders/63/gxb4ks2n7wbf_7bbwz86cgsc0000gn/T/sentry-e2e-tests-cloudflare-workers-fU9D9e/node_modules/.pnpm/@[email protected]/node_modules/@sentry/core/src/tracing/trace.ts:229:12)
[WebServer]       at null.<anonymous> (file:///private/var/folders/63/gxb4ks2n7wbf_7bbwz86cgsc0000gn/T/sentry-e2e-tests-cloudflare-workers-fU9D9e/node_modules/.pnpm/@[email protected]_@[email protected]/node_modules/@sentry/cloudflare/src/async.ts:41:14)
[WebServer]       at withScope (file:///private/var/folders/63/gxb4ks2n7wbf_7bbwz86cgsc0000gn/T/sentry-e2e-tests-cloudflare-workers-fU9D9e/node_modules/.pnpm/@[email protected]_@[email protected]/node_modules/@sentry/cloudflare/src/async.ts:40:25)
[WebServer]       at withScope (file:///private/var/folders/63/gxb4ks2n7wbf_7bbwz86cgsc0000gn/T/sentry-e2e-tests-cloudflare-workers-fU9D9e/node_modules/.pnpm/@[email protected]/node_modules/@sentry/core/src/currentScopes.ts:65:14)
[WebServer]       at continueTrace (file:///private/var/folders/63/gxb4ks2n7wbf_7bbwz86cgsc0000gn/T/sentry-e2e-tests-cloudflare-workers-fU9D9e/node_modules/.pnpm/@[email protected]/node_modules/@sentry/core/src/tracing/trace.ts:226:10)
[WebServer]       at null.<anonymous> (file:///private/var/folders/63/gxb4ks2n7wbf_7bbwz86cgsc0000gn/T/sentry-e2e-tests-cloudflare-workers-fU9D9e/node_modules/.pnpm/@[email protected]_@[email protected]/node_modules/@sentry/cloudflare/src/request.ts:95:12)
[WebServer]       at null.<anonymous> (file:///private/var/folders/63/gxb4ks2n7wbf_7bbwz86cgsc0000gn/T/sentry-e2e-tests-cloudflare-workers-fU9D9e/node_modules/.pnpm/@[email protected]_@[email protected]/node_modules/@sentry/cloudflare/src/async.ts:56:14)
[WebServer]       at withIsolationScope (file:///private/var/folders/63/gxb4ks2n7wbf_7bbwz86cgsc0000gn/T/sentry-e2e-tests-cloudflare-workers-fU9D9e/node_modules/.pnpm/@[email protected]_@[email protected]/node_modules/@sentry/cloudflare/src/async.ts:55:25)
[WebServer]       at withIsolationScope (file:///private/var/folders/63/gxb4ks2n7wbf_7bbwz86cgsc0000gn/T/sentry-e2e-tests-cloudflare-workers-fU9D9e/node_modules/.pnpm/@[email protected]/node_modules/@sentry/core/src/currentScopes.ts:114:14)
[WebServer]       at wrapRequestHandler (file:///private/var/folders/63/gxb4ks2n7wbf_7bbwz86cgsc0000gn/T/sentry-e2e-tests-cloudflare-workers-fU9D9e/node_modules/.pnpm/@[email protected]_@[email protected]/node_modules/@sentry/cloudflare/src/request.ts:43:10)
[WebServer]       at apply (file:///private/var/folders/63/gxb4ks2n7wbf_7bbwz86cgsc0000gn/T/sentry-e2e-tests-cloudflare-workers-fU9D9e/node_modules/.pnpm/@[email protected]_@[email protected]/node_modules/@sentry/cloudflare/src/durableobject.ts:218:20)
[WebServer] 
[WebServer] 

The SDK catches this error instead but the tests fail because they expect the other error. Not sure what in #17539 caused this but for now let's unblock ourselves first and follow up with a fix in a new attempt (cc @0xbad0c0d3 )

return allDone;
},
});
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: Instrumentation Overlap Causes Memory Leaks

The makeFlushLock function doesn't prevent multiple instrumentation of the same ExecutionContext. Calling it repeatedly on the same context creates nested wrappers around context.waitUntil, which leads to incorrect pending task counts. This can cause memory leaks and prevent the flush lock from resolving correctly.

Fix in Cursor Fix in Web

Comment on lines +23 to +30
context.waitUntil = promise => {
pending++;
return originalWaitUntil(
promise.finally(() => {
if (--pending === 0) resolveAllDone();
}),
);
};

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Potential bug: The makeFlushLock function overwrites the native context.waitUntil method. Other parts of the code attempting to bind to this new function will fail, causing an "Illegal invocation" error.
  • Description: The makeFlushLock function directly mutates the original ExecutionContext by overwriting the native waitUntil method with a JavaScript wrapper. Elsewhere in the code, context.waitUntil.bind(context) is called. Attempting to bind the new JavaScript function, which wraps the original native method, breaks the this context required by the Cloudflare Workers runtime. This results in a TypeError: Illegal invocation when waitUntil is called, causing the worker to crash. The removal of the copyExecutionContext utility exacerbates this by ensuring multiple handlers operate on the same mutated context object.

  • Suggested fix: Instead of mutating the original context object, makeFlushLock should return a new waitUntil function and other related properties. The caller can then use this new object without affecting the global context. Alternatively, restore a mechanism similar to the removed copyExecutionContext to provide isolated, correctly-bound contexts to different parts of the application.
    severity: 0.85, confidence: 0.95

Did we get this right? 👍 / 👎 to inform future reviews.

@0xbad0c0d3
Copy link
Contributor

Tests on #17539 was failing before merge, so it is surprise for me it was merged. You are absolutely right it is because of the changes in #17539. Thanks for reverting.

@andreiborza andreiborza merged commit e8d255f into develop Sep 16, 2025
33 checks passed
@andreiborza andreiborza deleted the lms/test-cloudflare-fix-e2e-test branch September 16, 2025 11:46
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.

3 participants