gqlgen
gqlgen copied to clipboard
Panic "missing operation context" when body fails to parse on GetOperationContext with prometheus extension
What happened?
Panic during extension evaluation while when the body fails to parse.
What did you expect?
Normal error response
Minimal graphql.schema and models to reproduce
N/A
versions
-
go run github.com/99designs/gqlgen version
: v0.17.34 -
go version
: go version go1.20.7 linux/amd64
I get the following panic:
missing operation context
goroutine 119 [running]:
runtime/debug.Stack()
/usr/local/go/src/runtime/debug/stack.go:24 +0x65
runtime/debug.PrintStack()
/usr/local/go/src/runtime/debug/stack.go:16 +0x19
github.com/99designs/gqlgen/graphql.DefaultRecover({0x0?, 0x8?}, {0x1097a40?, 0x1414270?})
/go/pkg/mod/github.com/99designs/[email protected]/graphql/recovery.go:17 +0x71
github.com/99designs/gqlgen/graphql/executor.(*Executor).PresentRecoveredError(0xc000260140, {0x142ef98, 0xc0005fea50}, {0x1097a40?, 0x1414270?})
/go/pkg/mod/github.com/99designs/[email protected]/graphql/executor/executor.go:156 +0x46
github.com/99designs/gqlgen/graphql/handler.(*Server).ServeHTTP.func1()
/go/pkg/mod/github.com/99designs/[email protected]/graphql/handler/server.go:104 +0x99
panic({0x1097a40, 0x1414270})
/usr/local/go/src/runtime/panic.go:884 +0x212
github.com/99designs/gqlgen/graphql.GetOperationContext({0x142ef98?, 0xc0005feab0?})
/go/pkg/mod/github.com/99designs/[email protected]/graphql/context_operation.go:65 +0x71
github.com/99designs/gqlgen-contrib/prometheus.Tracer.InterceptResponse({}, {0x142ef98, 0xc0005feab0}, 0xc0002af128)
/go/pkg/mod/github.com/99designs/[email protected]/prometheus/prometheus.go:129 +0x45
github.com/99designs/gqlgen/graphql/executor.processExtensions.func6({0x142ef98, 0xc0005feab0}, 0x12db030)
/go/pkg/mod/github.com/99designs/[email protected]/graphql/executor/extensions.go:91 +0xb0
github.com/99designs/gqlgen/graphql/executor.processExtensions.func6.1({0x142ef98?, 0xc0005feab0?})
/go/pkg/mod/github.com/99designs/[email protected]/graphql/executor/extensions.go:92 +0x2b
github.com/ravilushqa/otelgqlgen.Tracer.InterceptResponse({{0x0, 0x0}, {0x1422560, 0xc0000a99c0}, 0x12dbc30, 0x12dbc28}, {0x142ef98, 0xc0005feab0}, 0xc0002af110)
/go/pkg/mod/github.com/ravilushqa/[email protected]/gqlgen.go:63 +0x879
github.com/99designs/gqlgen/graphql/executor.processExtensions.func6({0x142ef98, 0xc0005feab0}, 0x12db030)
/go/pkg/mod/github.com/99designs/[email protected]/graphql/executor/extensions.go:91 +0xb0
github.com/99designs/gqlgen/graphql/executor.(*Executor).DispatchError(0xc000260140, {0x142ef98, 0xc0005fea50}, {0xc0000125a8, 0x1, 0xc0005fea80?})
/go/pkg/mod/github.com/99designs/[email protected]/graphql/executor/executor.go:144 +0x11c
github.com/99designs/gqlgen/graphql/handler/transport.POST.Do({0x142eef0?}, {0x7ff796a4ed40?, 0xc000107200}, 0xc000107900, {0x142b830, 0xc000260140})
/go/pkg/mod/github.com/99designs/[email protected]/graphql/handler/transport/http_post.go:76 +0x6b0
github.com/99designs/gqlgen/graphql/handler.(*Server).ServeHTTP(0xc00007c6c0, {0x7ff796a4ed40, 0xc000107200}, 0xc000107900)
/go/pkg/mod/github.com/99designs/[email protected]/graphql/handler/server.go:121 +0x212
...
github.com/gin-gonic/gin.(*Context).Next(...)
/go/pkg/mod/github.com/gin-gonic/[email protected]/context.go:174
github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc000007860, 0xc000107200)
/go/pkg/mod/github.com/gin-gonic/[email protected]/gin.go:620 +0x671
github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc000007860, {0x142df00?, 0xc000158fc0}, 0xc000107800)
/go/pkg/mod/github.com/gin-gonic/[email protected]/gin.go:576 +0x1dd
net/http.serverHandler.ServeHTTP({0x1429db0?}, {0x142df00, 0xc000158fc0}, 0xc000107800)
/usr/local/go/src/net/http/server.go:2947 +0x30c
net/http.(*conn).serve(0xc000260f00, {0x142ef98, 0xc0001b3980})
/usr/local/go/src/net/http/server.go:1991 +0x607
created by net/http.(*Server).Serve
/usr/local/go/src/net/http/server.go:3102 +0x4db
When the body fails to parse and i use the gqlgen-contrib/prmetheus extension:
import gqlprom "github.com/99designs/gqlgen-contrib/prometheus"
graphqlHandler.Use(gqlprom.Tracer{})
I see that there is a WithOperationContext
on line 84
resp := exec.DispatchError(graphql.WithOperationContext(ctx, rc), OpErr)
but not on line 76, so maybe all error cases are not covered (maybe related to https://github.com/99designs/gqlgen/issues/1067) ?