From 22b42edbbf0f3cce2b1f49e1365b2728abc5fccb Mon Sep 17 00:00:00 2001 From: mackjmr Date: Fri, 4 Feb 2022 15:30:44 +0100 Subject: [PATCH 1/4] rebased add support for grpc WithSpanOptions --- contrib/google.golang.org/grpc.v12/grpc.go | 25 +++---- .../google.golang.org/grpc.v12/grpc_test.go | 31 +++++++++ contrib/google.golang.org/grpc.v12/option.go | 28 +++++--- contrib/google.golang.org/grpc/grpc_test.go | 65 +++++++++++++++++++ contrib/google.golang.org/grpc/option.go | 26 +++++--- .../google.golang.org/grpc/stats_client.go | 2 +- .../grpc/stats_client_test.go | 3 +- .../google.golang.org/grpc/stats_server.go | 4 +- .../grpc/stats_server_test.go | 4 +- 9 files changed, 150 insertions(+), 38 deletions(-) diff --git a/contrib/google.golang.org/grpc.v12/grpc.go b/contrib/google.golang.org/grpc.v12/grpc.go index db87dd40fa..6cf217c0fb 100644 --- a/contrib/google.golang.org/grpc.v12/grpc.go +++ b/contrib/google.golang.org/grpc.v12/grpc.go @@ -9,7 +9,6 @@ package grpc // import "gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc.v12" import ( - "math" "net" "gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/internal/grpcutil" @@ -41,15 +40,15 @@ func UnaryServerInterceptor(opts ...InterceptorOption) grpc.UnaryServerIntercept log.Debug("contrib/google.golang.org/grpc.v12: Configuring UnaryServerInterceptor: %#v", cfg) return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { - span, ctx := startSpanFromContext(ctx, info.FullMethod, cfg.serviceName, cfg.analyticsRate) + span, ctx := startSpanFromContext(ctx, info.FullMethod, cfg.serviceName, cfg.spanOpts...) resp, err := handler(ctx, req) span.Finish(tracer.WithError(err)) return resp, err } } -func startSpanFromContext(ctx context.Context, method, service string, rate float64) (ddtrace.Span, context.Context) { - opts := []ddtrace.StartSpanOption{ +func startSpanFromContext(ctx context.Context, method, service string, opts ...tracer.StartSpanOption) (ddtrace.Span, context.Context) { + opts = append(opts, tracer.ServiceName(service), tracer.ResourceName(method), tracer.Tag(tagMethod, method), @@ -57,10 +56,7 @@ func startSpanFromContext(ctx context.Context, method, service string, rate floa tracer.Measured(), tracer.Tag(ext.Component, "google.golang.org/grpc.v12"), tracer.Tag(ext.SpanKind, ext.SpanKindServer), - } - if !math.IsNaN(rate) { - opts = append(opts, tracer.Tag(ext.EventSampleRate, rate)) - } + ) md, _ := metadata.FromContext(ctx) // nil is ok if sctx, err := tracer.Extract(grpcutil.MDCarrier(md)); err == nil { opts = append(opts, tracer.ChildOf(sctx)) @@ -84,17 +80,14 @@ func UnaryClientInterceptor(opts ...InterceptorOption) grpc.UnaryClientIntercept span ddtrace.Span p peer.Peer ) - spanopts := []ddtrace.StartSpanOption{ + spanopts := cfg.spanOpts + spanopts = append(spanopts, tracer.Tag(tagMethod, method), tracer.SpanType(ext.AppTypeRPC), - } - if !math.IsNaN(cfg.analyticsRate) { - spanopts = append(spanopts, tracer.Tag(ext.EventSampleRate, cfg.analyticsRate)) - } - spanopts = append(spanopts, tracer.Tag(ext.Component, "google.golang.org/grpc.v12")) - spanopts = append(spanopts, tracer.Tag(ext.SpanKind, ext.SpanKindClient)) + tracer.Tag(ext.Component, "google.golang.org/grpc.v12"), + tracer.Tag(ext.SpanKind, ext.SpanKindClient) + ) span, ctx = tracer.StartSpanFromContext(ctx, "grpc.client", spanopts...) - md, ok := metadata.FromContext(ctx) if !ok { md = metadata.MD{} diff --git a/contrib/google.golang.org/grpc.v12/grpc_test.go b/contrib/google.golang.org/grpc.v12/grpc_test.go index 7d06c24fe4..a181ef6780 100644 --- a/contrib/google.golang.org/grpc.v12/grpc_test.go +++ b/contrib/google.golang.org/grpc.v12/grpc_test.go @@ -295,4 +295,35 @@ func TestAnalyticsSettings(t *testing.T) { assertRate(t, mt, 0.23, WithAnalyticsRate(0.23)) }) + + t.Run("spanOpts", func(t *testing.T) { + mt := mocktracer.Start() + defer mt.Stop() + + assertRate(t, mt, 0.23, WithAnalyticsRate(0.33), WithSpanOptions(tracer.AnalyticsRate(0.23))) + }) +} + +func TestSpanOpts(t *testing.T) { + assert := assert.New(t) + mt := mocktracer.Start() + defer mt.Stop() + + rig, err := newRigWithOpts(true, WithSpanOptions(tracer.Tag("foo", "bar"))) + if err != nil { + t.Fatalf("error setting up rig: %s", err) + } + defer rig.Close() + client := rig.client + + resp, err := client.Ping(context.Background(), &FixtureRequest{Name: "pass"}) + assert.Nil(err) + assert.Equal(resp.Message, "passed") + + spans := mt.FinishedSpans() + assert.Len(spans, 2) + + for _, s := range spans { + assert.Equal(s.Tags()["foo"], "bar") + } } diff --git a/contrib/google.golang.org/grpc.v12/option.go b/contrib/google.golang.org/grpc.v12/option.go index 5d9e6ad2c2..ff6d3ff2f8 100644 --- a/contrib/google.golang.org/grpc.v12/option.go +++ b/contrib/google.golang.org/grpc.v12/option.go @@ -8,12 +8,14 @@ package grpc import ( "math" + "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" + "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" "gopkg.in/DataDog/dd-trace-go.v1/internal" ) type interceptorConfig struct { - serviceName string - analyticsRate float64 + serviceName string + spanOpts []ddtrace.StartSpanOption } // InterceptorOption represents an option that can be passed to the grpc unary @@ -22,11 +24,11 @@ type InterceptorOption func(*interceptorConfig) func defaults(cfg *interceptorConfig) { // cfg.serviceName default set in interceptor - // cfg.analyticsRate = globalconfig.AnalyticsRate() + // cfg.spanOpts = append(cfg.spanOpts, tracer.AnalyticsRate(globalconfig.AnalyticsRate())) if internal.BoolEnv("DD_TRACE_GRPC_ANALYTICS_ENABLED", false) { - cfg.analyticsRate = 1.0 + cfg.spanOpts = append(cfg.spanOpts, tracer.AnalyticsRate(1.0)) } else { - cfg.analyticsRate = math.NaN() + cfg.spanOpts = append(cfg.spanOpts, tracer.AnalyticsRate(math.NaN())) } } @@ -41,9 +43,9 @@ func WithServiceName(name string) InterceptorOption { func WithAnalytics(on bool) InterceptorOption { return func(cfg *interceptorConfig) { if on { - cfg.analyticsRate = 1.0 + WithSpanOptions(tracer.AnalyticsRate(1.0))(cfg) } else { - cfg.analyticsRate = math.NaN() + WithSpanOptions(tracer.AnalyticsRate(math.NaN()))(cfg) } } } @@ -53,9 +55,17 @@ func WithAnalytics(on bool) InterceptorOption { func WithAnalyticsRate(rate float64) InterceptorOption { return func(cfg *interceptorConfig) { if rate >= 0.0 && rate <= 1.0 { - cfg.analyticsRate = rate + WithSpanOptions(tracer.AnalyticsRate(rate))(cfg) } else { - cfg.analyticsRate = math.NaN() + WithSpanOptions(tracer.AnalyticsRate(math.NaN()))(cfg) } } } + +// WithSpanOptions defines a set of additional ddtrace.StartSpanOption to be added +// to spans started by the integration. +func WithSpanOptions(opts ...ddtrace.StartSpanOption) InterceptorOption { + return func(cfg *interceptorConfig) { + cfg.spanOpts = append(cfg.spanOpts, opts...) + } +} diff --git a/contrib/google.golang.org/grpc/grpc_test.go b/contrib/google.golang.org/grpc/grpc_test.go index e6a3f9c4a3..8449846bfc 100644 --- a/contrib/google.golang.org/grpc/grpc_test.go +++ b/contrib/google.golang.org/grpc/grpc_test.go @@ -719,6 +719,13 @@ func TestAnalyticsSettings(t *testing.T) { assertRate(t, mt, 0.23, WithAnalyticsRate(0.23)) }) + + t.Run("spanOpts", func(t *testing.T) { + mt := mocktracer.Start() + defer mt.Stop() + + assertRate(t, mt, 0.23, WithAnalyticsRate(0.33), WithSpanOptions(tracer.AnalyticsRate(0.23))) + }) } func TestIgnoredMethods(t *testing.T) { @@ -910,6 +917,64 @@ func TestIgnoredMetadata(t *testing.T) { } } +func TestSpanOpts(t *testing.T) { + t.Run("unary", func(t *testing.T) { + mt := mocktracer.Start() + defer mt.Stop() + rig, err := newRig(true, WithSpanOptions(tracer.Tag("foo", "bar"))) + if err != nil { + t.Fatalf("error setting up rig: %s", err) + } + client := rig.client + resp, err := client.Ping(context.Background(), &FixtureRequest{Name: "pass"}) + assert.Nil(t, err) + assert.Equal(t, resp.Message, "passed") + + spans := mt.FinishedSpans() + assert.Len(t, spans, 2) + + for _, span := range spans { + assert.Equal(t, span.Tags()["foo"], "bar") + } + rig.Close() + mt.Reset() + }) + + t.Run("stream", func(t *testing.T) { + mt := mocktracer.Start() + defer mt.Stop() + rig, err := newRig(true, WithSpanOptions(tracer.Tag("foo", "bar"))) + if err != nil { + t.Fatalf("error setting up rig: %s", err) + } + + ctx, done := context.WithCancel(context.Background()) + client := rig.client + stream, err := client.StreamPing(ctx) + assert.NoError(t, err) + + err = stream.Send(&FixtureRequest{Name: "pass"}) + assert.NoError(t, err) + + resp, err := stream.Recv() + assert.NoError(t, err) + assert.Equal(t, resp.Message, "passed") + + assert.NoError(t, stream.CloseSend()) + done() // close stream from client side + rig.Close() + + waitForSpans(mt, 7, 5*time.Second) + + spans := mt.FinishedSpans() + assert.Len(t, spans, 7) + for _, span := range spans { + assert.Equal(t, span.Tags()["foo"], "bar") + } + mt.Reset() + }) +} + func TestCustomTag(t *testing.T) { mt := mocktracer.Start() defer mt.Stop() diff --git a/contrib/google.golang.org/grpc/option.go b/contrib/google.golang.org/grpc/option.go index 2c324259ec..f53c940524 100644 --- a/contrib/google.golang.org/grpc/option.go +++ b/contrib/google.golang.org/grpc/option.go @@ -8,6 +8,8 @@ package grpc import ( "math" + "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" + "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" "gopkg.in/DataDog/dd-trace-go.v1/internal" "gopkg.in/DataDog/dd-trace-go.v1/internal/globalconfig" @@ -21,7 +23,6 @@ type Option func(*config) type config struct { serviceName string nonErrorCodes map[codes.Code]bool - analyticsRate float64 traceStreamCalls bool traceStreamMessages bool noDebugStack bool @@ -30,6 +31,7 @@ type config struct { withMetadataTags bool ignoredMetadata map[string]struct{} withRequestTags bool + spanOpts []ddtrace.StartSpanOption tags map[string]interface{} } @@ -60,11 +62,11 @@ func defaults(cfg *config) { cfg.traceStreamCalls = true cfg.traceStreamMessages = true cfg.nonErrorCodes = map[codes.Code]bool{codes.Canceled: true} - // cfg.analyticsRate = globalconfig.AnalyticsRate() + // cfg.spanOpts = append(cfg.spanOpts, tracer.AnalyticsRate(globalconfig.AnalyticsRate())) if internal.BoolEnv("DD_TRACE_GRPC_ANALYTICS_ENABLED", false) { - cfg.analyticsRate = 1.0 + cfg.spanOpts = append(cfg.spanOpts, tracer.AnalyticsRate(1.0)) } else { - cfg.analyticsRate = math.NaN() + cfg.spanOpts = append(cfg.spanOpts, tracer.AnalyticsRate(math.NaN())) } cfg.ignoredMetadata = map[string]struct{}{ "x-datadog-trace-id": {}, @@ -119,9 +121,9 @@ func NonErrorCodes(cs ...codes.Code) InterceptorOption { func WithAnalytics(on bool) Option { return func(cfg *config) { if on { - cfg.analyticsRate = 1.0 + WithSpanOptions(tracer.AnalyticsRate(1.0))(cfg) } else { - cfg.analyticsRate = math.NaN() + WithSpanOptions(tracer.AnalyticsRate(math.NaN()))(cfg) } } } @@ -131,9 +133,9 @@ func WithAnalytics(on bool) Option { func WithAnalyticsRate(rate float64) Option { return func(cfg *config) { if rate >= 0.0 && rate <= 1.0 { - cfg.analyticsRate = rate + WithSpanOptions(tracer.AnalyticsRate(rate))(cfg) } else { - cfg.analyticsRate = math.NaN() + WithSpanOptions(tracer.AnalyticsRate(math.NaN()))(cfg) } } } @@ -198,3 +200,11 @@ func WithCustomTag(key string, value interface{}) Option { cfg.tags[key] = value } } + +// WithSpanOptions defines a set of additional ddtrace.StartSpanOption to be added +// to spans started by the integration. +func WithSpanOptions(opts ...ddtrace.StartSpanOption) Option { + return func(cfg *config) { + cfg.spanOpts = append(cfg.spanOpts, opts...) + } +} diff --git a/contrib/google.golang.org/grpc/stats_client.go b/contrib/google.golang.org/grpc/stats_client.go index 3e59181f27..e00780298c 100644 --- a/contrib/google.golang.org/grpc/stats_client.go +++ b/contrib/google.golang.org/grpc/stats_client.go @@ -36,7 +36,7 @@ func (h *clientStatsHandler) TagRPC(ctx context.Context, rti *stats.RPCTagInfo) rti.FullMethodName, "grpc.client", h.cfg.clientServiceName(), - tracer.AnalyticsRate(h.cfg.analyticsRate), + h.cfg.spanOpts..., ) ctx = injectSpanIntoContext(ctx) return ctx diff --git a/contrib/google.golang.org/grpc/stats_client_test.go b/contrib/google.golang.org/grpc/stats_client_test.go index 34d92da3d8..f1af496f23 100644 --- a/contrib/google.golang.org/grpc/stats_client_test.go +++ b/contrib/google.golang.org/grpc/stats_client_test.go @@ -25,7 +25,7 @@ func TestClientStatsHandler(t *testing.T) { assert := assert.New(t) serviceName := "grpc-service" - statsHandler := NewClientStatsHandler(WithServiceName(serviceName)) + statsHandler := NewClientStatsHandler(WithServiceName(serviceName), WithSpanOptions(tracer.Tag("foo", "bar"))) server, err := newClientStatsHandlerTestServer(statsHandler) if err != nil { t.Fatalf("failed to start test server: %s", err) @@ -56,6 +56,7 @@ func TestClientStatsHandler(t *testing.T) { assert.Equal("/grpc.Fixture/Ping", tags[tagMethodName]) assert.Equal("127.0.0.1", tags[ext.TargetHost]) assert.Equal(server.port, tags[ext.TargetPort]) + assert.Equal("bar", tags["foo"]) } func newClientStatsHandlerTestServer(statsHandler stats.Handler) (*rig, error) { diff --git a/contrib/google.golang.org/grpc/stats_server.go b/contrib/google.golang.org/grpc/stats_server.go index 4ed25b494c..bdadf3aebe 100644 --- a/contrib/google.golang.org/grpc/stats_server.go +++ b/contrib/google.golang.org/grpc/stats_server.go @@ -30,13 +30,13 @@ type serverStatsHandler struct { // TagRPC starts a new span for the initiated RPC request. func (h *serverStatsHandler) TagRPC(ctx context.Context, rti *stats.RPCTagInfo) context.Context { + h.cfg.spanOpts = append(h.cfg.spanOpts, tracer.Measured()) _, ctx = startSpanFromContext( ctx, rti.FullMethodName, "grpc.server", h.cfg.serverServiceName(), - tracer.AnalyticsRate(h.cfg.analyticsRate), - tracer.Measured(), + h.cfg.spanOpts..., ) return ctx } diff --git a/contrib/google.golang.org/grpc/stats_server_test.go b/contrib/google.golang.org/grpc/stats_server_test.go index 5f0f5269b8..2f70080183 100644 --- a/contrib/google.golang.org/grpc/stats_server_test.go +++ b/contrib/google.golang.org/grpc/stats_server_test.go @@ -19,13 +19,14 @@ import ( "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer" + "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" ) func TestServerStatsHandler(t *testing.T) { assert := assert.New(t) serviceName := "grpc-service" - statsHandler := NewServerStatsHandler(WithServiceName(serviceName)) + statsHandler := NewServerStatsHandler(WithServiceName(serviceName), WithSpanOptions(tracer.Tag("foo", "bar"))) server, err := newServerStatsHandlerTestServer(statsHandler) if err != nil { t.Fatalf("failed to start test server: %s", err) @@ -53,6 +54,7 @@ func TestServerStatsHandler(t *testing.T) { assert.Equal("/grpc.Fixture/Ping", tags["resource.name"]) assert.Equal("/grpc.Fixture/Ping", tags[tagMethodName]) assert.Equal(1, tags["_dd.measured"]) + assert.Equal("bar", tags["foo"]) } func newServerStatsHandlerTestServer(statsHandler stats.Handler) (*rig, error) { From 60d024e0d188c7e980a539231069dbfbf04ddd21 Mon Sep 17 00:00:00 2001 From: mackjmr Date: Fri, 18 Feb 2022 12:08:36 +0100 Subject: [PATCH 2/4] startSpanFromContext: fix race if opts is reused --- contrib/google.golang.org/grpc.v12/grpc.go | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/contrib/google.golang.org/grpc.v12/grpc.go b/contrib/google.golang.org/grpc.v12/grpc.go index 6cf217c0fb..d31eb752f7 100644 --- a/contrib/google.golang.org/grpc.v12/grpc.go +++ b/contrib/google.golang.org/grpc.v12/grpc.go @@ -48,7 +48,11 @@ func UnaryServerInterceptor(opts ...InterceptorOption) grpc.UnaryServerIntercept } func startSpanFromContext(ctx context.Context, method, service string, opts ...tracer.StartSpanOption) (ddtrace.Span, context.Context) { - opts = append(opts, + // copy opts in case the caller reuses the slice in parallel + // we will add at least 5, at most 6 items + optsLocal := make([]tracer.StartSpanOption, len(opts), len(opts)+6) + copy(optsLocal, opts) + optsLocal = append(optsLocal, tracer.ServiceName(service), tracer.ResourceName(method), tracer.Tag(tagMethod, method), @@ -59,9 +63,9 @@ func startSpanFromContext(ctx context.Context, method, service string, opts ...t ) md, _ := metadata.FromContext(ctx) // nil is ok if sctx, err := tracer.Extract(grpcutil.MDCarrier(md)); err == nil { - opts = append(opts, tracer.ChildOf(sctx)) + optsLocal = append(optsLocal, tracer.ChildOf(sctx)) } - return tracer.StartSpanFromContext(ctx, "grpc.server", opts...) + return tracer.StartSpanFromContext(ctx, "grpc.server", optsLocal...) } // UnaryClientInterceptor will add tracing to a grpc client. From 91621eb72661ead8092968466f5419955285bdb8 Mon Sep 17 00:00:00 2001 From: Diana Shevchenko Date: Thu, 19 Jan 2023 12:21:46 +0100 Subject: [PATCH 3/4] fixed a test --- contrib/google.golang.org/grpc.v12/option.go | 8 -------- contrib/google.golang.org/grpc/grpc.go | 10 +++++----- contrib/google.golang.org/grpc/option.go | 8 -------- 3 files changed, 5 insertions(+), 21 deletions(-) diff --git a/contrib/google.golang.org/grpc.v12/option.go b/contrib/google.golang.org/grpc.v12/option.go index ff6d3ff2f8..b951784166 100644 --- a/contrib/google.golang.org/grpc.v12/option.go +++ b/contrib/google.golang.org/grpc.v12/option.go @@ -6,8 +6,6 @@ package grpc import ( - "math" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" "gopkg.in/DataDog/dd-trace-go.v1/internal" @@ -27,8 +25,6 @@ func defaults(cfg *interceptorConfig) { // cfg.spanOpts = append(cfg.spanOpts, tracer.AnalyticsRate(globalconfig.AnalyticsRate())) if internal.BoolEnv("DD_TRACE_GRPC_ANALYTICS_ENABLED", false) { cfg.spanOpts = append(cfg.spanOpts, tracer.AnalyticsRate(1.0)) - } else { - cfg.spanOpts = append(cfg.spanOpts, tracer.AnalyticsRate(math.NaN())) } } @@ -44,8 +40,6 @@ func WithAnalytics(on bool) InterceptorOption { return func(cfg *interceptorConfig) { if on { WithSpanOptions(tracer.AnalyticsRate(1.0))(cfg) - } else { - WithSpanOptions(tracer.AnalyticsRate(math.NaN()))(cfg) } } } @@ -56,8 +50,6 @@ func WithAnalyticsRate(rate float64) InterceptorOption { return func(cfg *interceptorConfig) { if rate >= 0.0 && rate <= 1.0 { WithSpanOptions(tracer.AnalyticsRate(rate))(cfg) - } else { - WithSpanOptions(tracer.AnalyticsRate(math.NaN()))(cfg) } } } diff --git a/contrib/google.golang.org/grpc/grpc.go b/contrib/google.golang.org/grpc/grpc.go index 08e757c886..4a4ba8ef40 100644 --- a/contrib/google.golang.org/grpc/grpc.go +++ b/contrib/google.golang.org/grpc/grpc.go @@ -10,13 +10,11 @@ package grpc // import "gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.or import ( "errors" - "io" - "math" - "gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/internal/grpcutil" "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" + "io" context "golang.org/x/net/context" "google.golang.org/grpc/codes" @@ -28,15 +26,17 @@ import ( var spanTypeRPC = tracer.SpanType(ext.AppTypeRPC) func (cfg *config) startSpanOptions(opts ...tracer.StartSpanOption) []tracer.StartSpanOption { - if len(cfg.tags) == 0 && math.IsNaN(cfg.analyticsRate) { + if len(cfg.tags) == 0 && len(cfg.spanOpts) == 0 { return opts } ret := make([]tracer.StartSpanOption, 0, 1+len(cfg.tags)+len(opts)) - ret = append(ret, tracer.AnalyticsRate(cfg.analyticsRate)) for _, opt := range opts { ret = append(ret, opt) } + for _, opt := range cfg.spanOpts { + ret = append(ret, opt) + } for key, tag := range cfg.tags { ret = append(ret, tracer.Tag(key, tag)) } diff --git a/contrib/google.golang.org/grpc/option.go b/contrib/google.golang.org/grpc/option.go index f53c940524..b115ee9d08 100644 --- a/contrib/google.golang.org/grpc/option.go +++ b/contrib/google.golang.org/grpc/option.go @@ -6,8 +6,6 @@ package grpc import ( - "math" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" "gopkg.in/DataDog/dd-trace-go.v1/internal" @@ -65,8 +63,6 @@ func defaults(cfg *config) { // cfg.spanOpts = append(cfg.spanOpts, tracer.AnalyticsRate(globalconfig.AnalyticsRate())) if internal.BoolEnv("DD_TRACE_GRPC_ANALYTICS_ENABLED", false) { cfg.spanOpts = append(cfg.spanOpts, tracer.AnalyticsRate(1.0)) - } else { - cfg.spanOpts = append(cfg.spanOpts, tracer.AnalyticsRate(math.NaN())) } cfg.ignoredMetadata = map[string]struct{}{ "x-datadog-trace-id": {}, @@ -122,8 +118,6 @@ func WithAnalytics(on bool) Option { return func(cfg *config) { if on { WithSpanOptions(tracer.AnalyticsRate(1.0))(cfg) - } else { - WithSpanOptions(tracer.AnalyticsRate(math.NaN()))(cfg) } } } @@ -134,8 +128,6 @@ func WithAnalyticsRate(rate float64) Option { return func(cfg *config) { if rate >= 0.0 && rate <= 1.0 { WithSpanOptions(tracer.AnalyticsRate(rate))(cfg) - } else { - WithSpanOptions(tracer.AnalyticsRate(math.NaN()))(cfg) } } } From 8f7c7764a389097d9058bfd087accdb57f2ac5c4 Mon Sep 17 00:00:00 2001 From: Diana Shevchenko Date: Thu, 19 Jan 2023 13:18:10 +0100 Subject: [PATCH 4/4] fixed lint --- contrib/google.golang.org/grpc.v12/grpc.go | 2 +- contrib/google.golang.org/grpc/grpc.go | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/contrib/google.golang.org/grpc.v12/grpc.go b/contrib/google.golang.org/grpc.v12/grpc.go index d31eb752f7..38b479244e 100644 --- a/contrib/google.golang.org/grpc.v12/grpc.go +++ b/contrib/google.golang.org/grpc.v12/grpc.go @@ -89,7 +89,7 @@ func UnaryClientInterceptor(opts ...InterceptorOption) grpc.UnaryClientIntercept tracer.Tag(tagMethod, method), tracer.SpanType(ext.AppTypeRPC), tracer.Tag(ext.Component, "google.golang.org/grpc.v12"), - tracer.Tag(ext.SpanKind, ext.SpanKindClient) + tracer.Tag(ext.SpanKind, ext.SpanKindClient), ) span, ctx = tracer.StartSpanFromContext(ctx, "grpc.client", spanopts...) md, ok := metadata.FromContext(ctx) diff --git a/contrib/google.golang.org/grpc/grpc.go b/contrib/google.golang.org/grpc/grpc.go index 4a4ba8ef40..cfbc8448b4 100644 --- a/contrib/google.golang.org/grpc/grpc.go +++ b/contrib/google.golang.org/grpc/grpc.go @@ -10,11 +10,12 @@ package grpc // import "gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.or import ( "errors" + "io" + "gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/internal/grpcutil" "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" - "io" context "golang.org/x/net/context" "google.golang.org/grpc/codes"