Hacktoberfest 2026: die Issues, die Maintainer für den Oktober markiert haben – offen und einsteigerfreundlich. Hacktoberfest-Issues durchsuchen

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

Geschlossen
#24,443 2 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Anfängerfreundlichkeit
63/100
Issue-Typ
Bug
Klarheit
Größtenteils klar
Aktivitätsstatus
Aktiv
Tech-Stack
typescript
Bereich
observability

Rechercherichtung

Beginne bei createRpcPrototypeWrapper und vergleiche dessen Pfad für fehlende Metadaten mit dem capture-only wrapper von instrumentWorkerEntrypoint und wrapMethodWithSentry. Reproduziere einen externen RPC-Aufruf vom plain worker im Issue und überprüfe anschließend, dass Aufrufe ohne Metadaten mit einem Client und einem Isolation Scope ausgeführt werden, Metriken und Fehler flushen und interne this.method()-Aufrufe unverpackt bleiben.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

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.

Vorherrschende Sprache
TypeScript
Sterne
8.7k
Forks
1.9k
Ø Merge
1 T. 16 Std.
Gemergte PRs (30 T.)
576

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus getsentry/sentry-javascript

Alle Issues in getsentry/sentry-javascript

Ähnliche Issues

Weitere Issues zu TypeScript

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.