Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

@sentry/cloudflare: Durable Object RPC methods drop metrics, logs and errors unless the caller propagates a trace

Fermée
#24,443 2 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Évaluation

Difficulté
4/5
Temps estimé
3-5 jours
Accessibilité débutants
63/100
Type d'issue
Bug
Clarté
Plutôt claire
Activité
Active
Stack technique
typescript
Domaine
observability

Piste de recherche

Commencez par createRpcPrototypeWrapper et comparez son chemin lorsque les métadonnées sont absentes avec le wrapper de capture uniquement de instrumentWorkerEntrypoint et wrapMethodWithSentry. Reproduisez un appel RPC externe depuis le plain worker de l’issue, puis vérifiez que les appels sans métadonnées s’exécutent avec un client et un isolation scope, flushent les métriques et les erreurs, et laissent les appels internes à this.method() non enveloppés.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

Cloudflare Workers
Environment
  • @sentry/cloudflare: 10.74.0 (same logic on develop / 11.0.0-beta.2)
  • DO wrapped with instrumentDurableObjectWithSentry, enableRpcTracePropagation: true (the only
    supported way to instrument RPC methods in v11, now that instrumentPrototypeMethods is removed)
Description

createRpcPrototypeWrapper only calls wrapMethodWithSentry when the last argument carries
__sentry_rpc_meta__. Otherwise the original method runs with no client bound. Then:

  • Sentry.metrics.count/gauge/distribution return early (no client);
  • Sentry.captureException and Sentry.logger.* are dropped;
  • no rpc span is recorded, and a thrown error is not captured.

Callers send the metadata only if they are Sentry-instrumented, have an active trace, and got the stub
through get/getByName on the instrumented env (see #24442). Common cases that lose everything:

  • calls from uninstrumented workers or mixed deployments;
  • calls from code running outside the request's async context;
  • any call through jurisdiction().

WorkerEntrypoint already covers this case: instrumentWorkerEntrypoint uses a capture-only wrapper
when the metadata is missing. Durable Objects have no equivalent. fetch, alarm and webSocket* are
always wrapped, so only RPC is affected. That makes the gap easy to miss: our production data had
14 days of DO alarm spans and zero DO rpc spans.

Reproduction
class MyDO extends DurableObject {
  async ping() {
    Sentry.metrics.count('my_do.ping', 1);
    throw new Error('boom');
  }
}
export const MyDOInstrumented = Sentry.instrumentDurableObjectWithSentry(
  env => ({ dsn: env.SENTRY_DSN, tracesSampleRate: 1, enableRpcTracePropagation: true }),
  MyDO,
);
// From a plain (uninstrumented) worker:
await env.MY_DO.get(env.MY_DO.idFromName('x')).ping();

Neither the metric nor the error reaches Sentry.

Expected

External RPC calls without metadata still run inside a client and isolation scope with flush, as
WorkerEntrypoint does. Internal this.method() calls stay unwrapped.

Proposed fix

A PR with this change will follow.

Langage dominant
TypeScript
Étoiles
8.7k
Forks
1.9k
Merge moyen
1 j 16 h
PR mergées (30 j)
576

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de getsentry/sentry-javascript

Toutes les issues de getsentry/sentry-javascript

Issues similaires

Plus d'issues TypeScript

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.