@sentry/cloudflare: Durable Object methods called from the constructor's blockConcurrencyWhile callback are captured as untraced RPC entries
Les mainteneurs répondent en général sous 1 jour
@JPeer264 y travaille déjà.
Depuis le 28/9/2026.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 58/100
- Type d'issue
- Bug
- Clarté
- Plutôt claire
- Activité
- Active
- Stack technique
- typescript
Piste de recherche
Start in durableobject.ts at the RPC prototype wrapper and its startNewTrace branch, then run the provided Store reproduction with @cloudflare/vitest-pool-workers. Trace the constructor's blockConcurrencyWhile callback and verify that a caught init error no longer produces an error event or an untraced RPC entry.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Version
@sentry/cloudflare 10.75.1, with enableRpcTracePropagation: true
Summary
Since #24512, the RPC prototype wrapper instruments any prototype method called while the isolation scope is the default one, in a new trace. The wrapper is installed after construction, but a blockConcurrencyWhile callback started in the constructor runs after that, with no isolation scope. So a method the object calls on itself during initialisation is treated as an untraced RPC entry. If it throws, the error is captured as handled: false with mechanism auto.faas.cloudflare.durable_object, even when the object catches it.
Repro
class Store extends DurableObject {
failure?: Error;
constructor(ctx: DurableObjectState, env: Env) {
super(ctx, env);
void ctx.blockConcurrencyWhile(async () => {
try { this.init(); } catch (e) { this.failure = e as Error; }
});
}
init(): void { throw new Error('init failed'); }
ping(): string { return this.failure ? 'degraded' : 'ok'; }
}
export const Instrumented = Sentry.instrumentDurableObjectWithSentry(
(env) => ({ dsn: env.SENTRY_DSN, enableRpcTracePropagation: true }),
Store,
);
Call ping() on a stub.
Expected: no error event. The error is caught inside the object.
Actual: one error event for init failed, handled: false, in its own trace.
Observed in real workerd (@cloudflare/vitest-pool-workers). With a raised Error.stackTraceLimit, the capturing frame is the untraced startNewTrace branch in durableobject.ts, wrapping the method called from the constructor's blockConcurrencyWhile callback.
Notes
Declaring internal methods as #private avoids it, because they are no longer on the prototype, and that matches Cloudflare's RPC visibility guidance (https://developers.cloudflare.com/workers/runtime-apis/rpc/visibility/). It may be worth either documenting that, or running constructor-time blockConcurrencyWhile callbacks inside an isolation scope so they are not mistaken for RPC entries.
- Langage dominant
- TypeScript
- Étoiles
- 8.7k
- Forks
- 1.9k
- Merge moyen
- 1 j 17 h
- PR mergées (30 j)
- 523
Préparer son environnement
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de getsentry/sentry-javascript
-
javascript
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
getsentry/sentry-javascript#24200 · 2 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
javascript Task
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
getsentry/sentry-javascript#24134 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Cloudflare Workers javascript Tests
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
getsentry/sentry-javascript#24051 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Bug Bun javascript
Difficulté 2/5 1-3 heures Accessibilité débutants 92/100
getsentry/sentry-javascript#24045 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
vercel-edge: Missing exportsOuvertejavascript
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
getsentry/sentry-javascript#24043 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de getsentry/sentry-javascript
Issues similaires
-
priority: P2
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
prime-radiant-inc/evener#3291 ·
Les mainteneurs répondent en général sous 1 jour
-
accessibility bug revealjs
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
quarto-dev/quarto-cli#14961 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 90/100
supabase/agent-skills#614 ·
-
Content
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
RunestoneInteractive/rs#1559 · 1 commentaire ·
Les mainteneurs répondent en général sous 2 jours