From b10f25944b6f286c38ea12222899fd86c5e2b22c Mon Sep 17 00:00:00 2001 From: Tonis Tiigi Date: Mon, 14 Jun 2021 23:48:53 -0700 Subject: [PATCH] correctly validate span from context Signed-off-by: Tonis Tiigi --- client/solve.go | 2 +- cmd/buildctl/common/common.go | 2 +- cmd/buildctl/common/trace.go | 5 +++-- session/grpc.go | 2 +- session/session.go | 2 +- solver/jobs.go | 2 +- util/tracing/tracing.go | 2 +- 7 files changed, 9 insertions(+), 8 deletions(-) diff --git a/client/solve.go b/client/solve.go index 1ce006bd4faf..c47957c1b150 100644 --- a/client/solve.go +++ b/client/solve.go @@ -93,7 +93,7 @@ func (c *Client) solve(ctx context.Context, def *llb.Definition, runGateway runG statusContext, cancelStatus := context.WithCancel(context.Background()) defer cancelStatus() - if span := trace.SpanFromContext(ctx); span != nil { + if span := trace.SpanFromContext(ctx); span.SpanContext().IsValid() { statusContext = trace.ContextWithSpan(statusContext, span) } diff --git a/cmd/buildctl/common/common.go b/cmd/buildctl/common/common.go index aaccfff567b3..daa879520547 100644 --- a/cmd/buildctl/common/common.go +++ b/cmd/buildctl/common/common.go @@ -64,7 +64,7 @@ func ResolveClient(c *cli.Context) (*client.Client, error) { ctx := CommandContext(c) - if span := trace.SpanFromContext(ctx); span != nil { + if span := trace.SpanFromContext(ctx); span.SpanContext().IsValid() { opts = append(opts, client.WithTracer(span.Tracer())) } diff --git a/cmd/buildctl/common/trace.go b/cmd/buildctl/common/trace.go index e8c3a796c61c..993cb93d1241 100644 --- a/cmd/buildctl/common/trace.go +++ b/cmd/buildctl/common/trace.go @@ -32,8 +32,9 @@ func AttachAppContext(app *cli.App) error { } } - ctx, span = tracer.Start(ctx, name) - span.SetAttributes(attribute.KeyValue{Key: "command", Value: attribute.ArrayValue(os.Args)}) + ctx, span = tracer.Start(ctx, name, trace.WithAttributes( + attribute.Array("command", attribute.ArrayValue(os.Args)), + )) clicontext.App.Metadata["context"] = ctx return nil diff --git a/session/grpc.go b/session/grpc.go index 746918dd75ad..719978c7313f 100644 --- a/session/grpc.go +++ b/session/grpc.go @@ -43,7 +43,7 @@ func grpcClientConn(ctx context.Context, conn net.Conn) (context.Context, *grpc. grpc.WithInsecure(), } - if span := trace.SpanFromContext(ctx); span != nil { + if span := trace.SpanFromContext(ctx); span.SpanContext().IsValid() { tracer := span.Tracer() unary = append(unary, filterClient(otelgrpc.UnaryClientInterceptor(otelgrpc.WithTracerProvider(constTracerProvider{tracer: tracer}), otelgrpc.WithPropagators(propagators)))) stream = append(stream, otelgrpc.StreamClientInterceptor(otelgrpc.WithTracerProvider(constTracerProvider{tracer: tracer}), otelgrpc.WithPropagators(propagators))) diff --git a/session/session.go b/session/session.go index dd0ab4b5ffed..6d651324ba70 100644 --- a/session/session.go +++ b/session/session.go @@ -55,7 +55,7 @@ func NewSession(ctx context.Context, name, sharedKey string) (*Session, error) { serverOpts := []grpc.ServerOption{} - if span := trace.SpanFromContext(ctx); span != nil { + if span := trace.SpanFromContext(ctx); span.SpanContext().IsValid() { tracer := span.Tracer() unary = append(unary, filterServer(otelgrpc.UnaryServerInterceptor(otelgrpc.WithTracerProvider(constTracerProvider{tracer: tracer}), otelgrpc.WithPropagators(propagators)))) stream = append(stream, otelgrpc.StreamServerInterceptor(otelgrpc.WithTracerProvider(constTracerProvider{tracer: tracer}), otelgrpc.WithPropagators(propagators))) diff --git a/solver/jobs.go b/solver/jobs.go index e47d80271a13..0a3845f4272a 100644 --- a/solver/jobs.go +++ b/solver/jobs.go @@ -493,7 +493,7 @@ func (jl *Solver) deleteIfUnreferenced(k digest.Digest, st *state) { } func (j *Job) Build(ctx context.Context, e Edge) (CachedResult, error) { - if span := trace.SpanFromContext(ctx); span != nil { + if span := trace.SpanFromContext(ctx); span.SpanContext().IsValid() { j.span = span } diff --git a/util/tracing/tracing.go b/util/tracing/tracing.go index 73adb8086ce8..a27652cbef8d 100644 --- a/util/tracing/tracing.go +++ b/util/tracing/tracing.go @@ -44,7 +44,7 @@ func FinishWithError(span trace.Span, err error) { // context.WithoutCancel() that would copy the context but reset ctx.Done func ContextWithSpanFromContext(ctx, ctx2 context.Context) context.Context { // if already is a span then noop - if span := trace.SpanFromContext(ctx); span != nil { + if span := trace.SpanFromContext(ctx); span.SpanContext().IsValid() { return ctx } if span := trace.SpanFromContext(ctx2); span != nil {