diff --git a/ddtrace/tracer/metrics_test.go b/ddtrace/tracer/metrics_test.go index f842516fef..1f524f8865 100644 --- a/ddtrace/tracer/metrics_test.go +++ b/ddtrace/tracer/metrics_test.go @@ -247,13 +247,7 @@ func (tg *testStatsdClient) Wait(n int, d time.Duration) error { func TestReportRuntimeMetrics(t *testing.T) { var tg testStatsdClient - trc := &tracer{ - stopped: make(chan struct{}), - exitChan: make(chan struct{}), - config: &config{ - statsd: &tg, - }, - } + trc := newUnstartedTracer(withStatsdClient(&tg)) trc.wg.Add(1) go func() { @@ -274,21 +268,7 @@ func TestReportRuntimeMetrics(t *testing.T) { func TestReportHealthMetrics(t *testing.T) { assert := assert.New(t) var tg testStatsdClient - trc := &tracer{ - config: &config{ - statsd: &tg, - sampler: NewAllSampler(), - transport: newDummyTransport(), - }, - payload: newPayload(), - flushChan: make(chan struct{}), - exitChan: make(chan struct{}), - payloadChan: make(chan []*span, payloadQueueSize), - stopped: make(chan struct{}), - rulesSampling: newRulesSampler(nil), - climit: make(chan struct{}, concurrentConnectionLimit), - prioritySampling: newPrioritySampler(), - } + trc := newUnstartedTracer(withStatsdClient(&tg)) internal.SetGlobalTracer(trc) defer internal.SetGlobalTracer(&internal.NoopTracer{}) diff --git a/ddtrace/tracer/sampler_test.go b/ddtrace/tracer/sampler_test.go index 6ddaba8474..45c821140f 100644 --- a/ddtrace/tracer/sampler_test.go +++ b/ddtrace/tracer/sampler_test.go @@ -496,22 +496,6 @@ func TestSamplingLimiter(t *testing.T) { func BenchmarkRulesSampler(b *testing.B) { const batchSize = 500 - newTracer := func(opts ...StartOption) *tracer { - c := new(config) - defaults(c) - for _, fn := range opts { - fn(c) - } - return &tracer{ - config: c, - payloadChan: make(chan []*span, batchSize), - flushChan: make(chan struct{}, 1), - stopped: make(chan struct{}), - exitChan: make(chan struct{}, 1), - rulesSampling: newRulesSampler(c.samplingRules), - prioritySampling: newPrioritySampler(), - } - } benchmarkStartSpan := func(b *testing.B, t *tracer) { internal.SetGlobalTracer(t) @@ -553,7 +537,7 @@ func BenchmarkRulesSampler(b *testing.B) { } b.Run("no-rules", func(b *testing.B) { - tracer := newTracer() + tracer := newUnstartedTracer() benchmarkStartSpan(b, tracer) }) @@ -563,7 +547,7 @@ func BenchmarkRulesSampler(b *testing.B) { NameServiceRule("db.query", "postgres.db", 1.0), NameRule("notweb.request", 1.0), } - tracer := newTracer(WithSamplingRules(rules)) + tracer := newUnstartedTracer(WithSamplingRules(rules)) benchmarkStartSpan(b, tracer) }) @@ -573,7 +557,7 @@ func BenchmarkRulesSampler(b *testing.B) { NameServiceRule("db.query", "postgres.db", 1.0), NameRule("web.request", 1.0), } - tracer := newTracer(WithSamplingRules(rules)) + tracer := newUnstartedTracer(WithSamplingRules(rules)) benchmarkStartSpan(b, tracer) }) @@ -603,7 +587,7 @@ func BenchmarkRulesSampler(b *testing.B) { NameRule("notweb.request", 1.0), NameRule("web.request", 1.0), } - tracer := newTracer(WithSamplingRules(rules)) + tracer := newUnstartedTracer(WithSamplingRules(rules)) benchmarkStartSpan(b, tracer) }) } diff --git a/ddtrace/tracer/tracer.go b/ddtrace/tracer/tracer.go index 6b59cc72eb..5ba995ce14 100644 --- a/ddtrace/tracer/tracer.go +++ b/ddtrace/tracer/tracer.go @@ -142,7 +142,7 @@ func Inject(ctx ddtrace.SpanContext, carrier interface{}) error { // payloadQueueSize is the buffer size of the trace channel. const payloadQueueSize = 1000 -func newTracer(opts ...StartOption) *tracer { +func newUnstartedTracer(opts ...StartOption) *tracer { c := new(config) defaults(c) for _, fn := range opts { @@ -169,11 +169,10 @@ func newTracer(opts ...StartOption) *tracer { c.statsd = client } } - - t := &tracer{ + return &tracer{ config: c, payload: newPayload(), - flushChan: make(chan struct{}), + flushChan: make(chan struct{}, 1), exitChan: make(chan struct{}), payloadChan: make(chan []*span, payloadQueueSize), stopped: make(chan struct{}), @@ -182,6 +181,11 @@ func newTracer(opts ...StartOption) *tracer { prioritySampling: newPrioritySampler(), pid: strconv.Itoa(os.Getpid()), } +} + +func newTracer(opts ...StartOption) *tracer { + t := newUnstartedTracer(opts...) + c := t.config t.config.statsd.Incr("datadog.tracer.started", nil, 1) if c.runtimeMetrics { log.Debug("Runtime metrics enabled.") diff --git a/ddtrace/tracer/tracer_test.go b/ddtrace/tracer/tracer_test.go index 2df8c0690b..309b3ad153 100644 --- a/ddtrace/tracer/tracer_test.go +++ b/ddtrace/tracer/tracer_test.go @@ -870,16 +870,8 @@ func TestWorker(t *testing.T) { } } -func newTracerChannels() *tracer { - return &tracer{ - payload: newPayload(), - payloadChan: make(chan []*span, payloadQueueSize), - flushChan: make(chan struct{}, 1), - } -} - func TestPushPayload(t *testing.T) { - tracer := newTracerChannels() + tracer := newUnstartedTracer() s := newBasicSpan("3MB") s.Meta["key"] = strings.Repeat("X", payloadSizeLimit/2+10) @@ -899,7 +891,7 @@ func TestPushTrace(t *testing.T) { tp := new(testLogger) log.UseLogger(tp) - tracer := newTracerChannels() + tracer := newUnstartedTracer() trace := []*span{ &span{ Name: "pylons.request", diff --git a/internal/version/version.go b/internal/version/version.go index 02181bb15a..9f39fb0948 100644 --- a/internal/version/version.go +++ b/internal/version/version.go @@ -8,4 +8,4 @@ package version // Tag specifies the current release tag. It needs to be manually // updated. A test checks that the value of Tag never points to a // git tag that is older than HEAD. -const Tag = "v1.21.0" +const Tag = "v1.20.1"