GraphQL diagnostics_channel tracing publishes non-structured-cloneable payloads in Cloudflare Workers Tail Workers
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 45/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Tranquilla
- Stack tecnologico
- javascript, typescript
- Ambito
- backend-api-design, observability-sre
Direzione di ricerca
Inizia con graphql/diagnostics.mjs e resolveDiagnosticsChannel(), quindi riproduci la configurazione di Cloudflare Worker indicata con nodejs_compat, un Tail Worker e una richiesta GraphQL parse/validate/execute. Confronta i punti di emissione del tracing e gli approcci proposti per opt-out, sanitization e serializzazione; il lavoro è completato quando GraphQL.js funziona senza errori di diagnostica del runtime Cloudflare e rimane possibile una strumentazione utile.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
GraphQL.js 17 resolves node:diagnostics_channel at module load and creates graphql:* tracing channels.
In Cloudflare Workers with nodejs_compat and a Tail Worker attached, Cloudflare forwards diagnostics channel messages to Tail Workers as diagnosticsChannelEvents. That forwarding appears to require structured-cloneable payloads.
GraphQL diagnostic contexts include objects like GraphQLSchema, DocumentNode, Source, execution results, resolver args/results, etc. Some of these are not structured-cloneable. In production this causes Cloudflare runtime log errors like:
Failed to publish diagnostics channel message:
The request itself still succeeds; logs get polluted with runtime errors.
Reproduction shape
- Deploy a Cloudflare Worker with:
compatibility_flags = ["nodejs_compat"]- a Tail Worker configured
- GraphQL.js 17
- Execute a GraphQL request through GraphQL Yoga or direct GraphQL.js parse/validate/execute.
- Runtime logs repeatedly show:
Failed to publish diagnostics channel message:
This happens even without application-level OpenTelemetry.
Relevant GraphQL.js behavior
graphql/diagnostics.mjs does:
const dc = resolveDiagnosticsChannel();
export const parseChannel = dc?.tracingChannel('graphql:parse');
export const validateChannel = dc?.tracingChannel('graphql:validate');
and emission sites trace when channel.hasSubscribers is true.
On Cloudflare, Tail forwarding appears to act as a diagnostics subscriber, so tracing is enabled even when the app did not intentionally subscribe to GraphQL diagnostics.
### Expected behavior
GraphQL.js 17 should work in Cloudflare Workers with Tail Workers enabled without runtime diagnostics errors.
Possible fixes:
- expose an official opt-out for GraphQL diagnostics tracing,
- avoid publishing non-structured-cloneable objects by default,
- provide serialization/sanitization hooks,
- or avoid enabling tracing for infrastructure-level diagnostics forwarding.
### Workaround
We patched resolveDiagnosticsChannel() to return undefined, disabling GraphQL diagnostics entirely. That works, but it is brittle and disables useful instrumentation.
- Lingua principale
- TypeScript
- Stelle
- 20.3k
- Fork
- 2.1k
- Merge medio
- 6h 51m
- PR unite (30g)
- 117
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di graphql/graphql-js
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 67/100
graphql/graphql-js#5001 ·
I maintainer di solito rispondono entro 1 giorno
-
print() can change a document's meaning: shorthand query after a definition without a bodyForse già presa @nimbly1 l’ha presa 20 giorni fa. Aperta
Difficoltà 3/5 Mezza giornata Idoneità per principianti 82/100
graphql/graphql-js#4901 · 2 reazioni ·
I maintainer di solito rispondono entro 1 giorno
-
api-testAperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 10/100
graphql/graphql-js#4848 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 35/100
graphql/graphql-js#4822 ·
I maintainer di solito rispondono entro 1 giorno
-
v17.1 / v18 RoadmapAperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
graphql/graphql-js#4818 · 1 reazione ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di graphql/graphql-js
Issue simili
-
idea-scout idea:453
Difficoltà 2/5 1-3 ore Idoneità per principianti 83/100
jeanibarz/agent-notebook#453 ·
I maintainer di solito rispondono entro 1 giorno
-
level/task
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 95/100
wazuh/wazuh-dashboard-plugins#9642 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 91/100
unicef/adt-studio#1112 ·
I maintainer di solito rispondono entro 2 giorni
-
feature request good first issue
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
TabularisDB/tabularis#1513 ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 75/100