From fac23bbe421685dfbb0ac0c825f0e62209ec9574 Mon Sep 17 00:00:00 2001 From: Tonis Tiigi Date: Sun, 6 Jun 2021 22:55:27 -0700 Subject: [PATCH] session: avoid tracing health checkpoint Upstream fixes needed for cleaner solution Signed-off-by: Tonis Tiigi --- session/grpc.go | 2 +- session/session.go | 28 ++++++++++++++++++++-------- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/session/grpc.go b/session/grpc.go index 09dcfd56926d..746918dd75ad 100644 --- a/session/grpc.go +++ b/session/grpc.go @@ -45,7 +45,7 @@ func grpcClientConn(ctx context.Context, conn net.Conn) (context.Context, *grpc. if span := trace.SpanFromContext(ctx); span != nil { tracer := span.Tracer() - unary = append(unary, otelgrpc.UnaryClientInterceptor(otelgrpc.WithTracerProvider(constTracerProvider{tracer: tracer}), otelgrpc.WithPropagators(propagators))) + 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 f27c004d4e43..dd0ab4b5ffed 100644 --- a/session/session.go +++ b/session/session.go @@ -3,6 +3,7 @@ package session import ( "context" "net" + "strings" grpc_middleware "github.com/grpc-ecosystem/go-grpc-middleware" "github.com/moby/buildkit/identity" @@ -56,7 +57,7 @@ func NewSession(ctx context.Context, name, sharedKey string) (*Session, error) { if span := trace.SpanFromContext(ctx); span != nil { tracer := span.Tracer() - unary = append(unary, otelgrpc.UnaryServerInterceptor(otelgrpc.WithTracerProvider(constTracerProvider{tracer: tracer}), otelgrpc.WithPropagators(propagators))) + 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))) } @@ -155,10 +156,21 @@ func MethodURL(s, m string) string { return "/" + s + "/" + m } -// func traceFilter() otgrpc.Option { -// return otgrpc.IncludingSpans(func(parentSpanCtx opentracing.SpanContext, -// method string, -// req, resp interface{}) bool { -// return !strings.HasSuffix(method, "Health/Check") -// }) -// } +// updates needed in opentelemetry-contrib to avoid this +func filterServer(intercept grpc.UnaryServerInterceptor) grpc.UnaryServerInterceptor { + return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (resp interface{}, err error) { + if strings.HasSuffix(info.FullMethod, "Health/Check") { + return handler(ctx, req) + } + return intercept(ctx, req, info, handler) + } +} + +func filterClient(intercept grpc.UnaryClientInterceptor) grpc.UnaryClientInterceptor { + return func(ctx context.Context, method string, req, reply interface{}, cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error { + if strings.HasSuffix(method, "Health/Check") { + return invoker(ctx, method, req, reply, cc, opts...) + } + return intercept(ctx, method, req, reply, cc, invoker, opts...) + } +}