Skip to content

Commit 74efb9e

Browse files
authored
fix(ddtrace/tracer): TestTracerTwiceStartRuntimeMetrics (#4086)
Co-authored-by: felix.geisendoerfer <[email protected]>
1 parent aa8ae7f commit 74efb9e

File tree

2 files changed

+26
-9
lines changed

2 files changed

+26
-9
lines changed

ddtrace/tracer/tracer.go

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,16 @@ func Start(opts ...StartOption) error {
234234
return nil
235235
}
236236

237+
if t.config.runtimeMetricsV2 {
238+
l := slog.New(slogHandler{})
239+
opts := &runtimemetrics.Options{Logger: l}
240+
if t.runtimeMetrics, err = runtimemetrics.NewEmitter(t.statsd, opts); err == nil {
241+
l.Debug("Runtime metrics v2 enabled.")
242+
} else {
243+
l.Error("Failed to enable runtime metrics v2", "err", err.Error())
244+
}
245+
}
246+
237247
// Start AppSec with remote configuration
238248
cfg := remoteconfig.DefaultClientConfig()
239249
cfg.AgentURL = t.config.agentURL.String()
@@ -454,15 +464,6 @@ func newTracer(opts ...StartOption) (*tracer, error) {
454464
t.reportRuntimeMetrics(defaultMetricsReportInterval)
455465
}()
456466
}
457-
if c.runtimeMetricsV2 {
458-
l := slog.New(slogHandler{})
459-
opts := &runtimemetrics.Options{Logger: l}
460-
if t.runtimeMetrics, err = runtimemetrics.NewEmitter(t.statsd, opts); err == nil {
461-
l.Debug("Runtime metrics v2 enabled.")
462-
} else {
463-
l.Error("Failed to enable runtime metrics v2", "err", err.Error())
464-
}
465-
}
466467
if c.debugAbandonedSpans {
467468
log.Info("Abandoned spans logs enabled.")
468469
t.abandonedSpansDebugger = newAbandonedSpansDebugger()

ddtrace/tracer/tracer_test.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2924,3 +2924,19 @@ func TestNewUnstartedTracerDDAgentHostNotFound(t *testing.T) {
29242924
_, err := newUnstartedTracer()
29252925
assert.NoError(t, err)
29262926
}
2927+
2928+
func TestTracerTwiceStartRuntimeMetrics(t *testing.T) {
2929+
// This checks that starting the tracer twice properly shuts down the
2930+
// previous tracer, specifically the runtime metrics emitter.
2931+
tp := new(log.RecordLogger)
2932+
err := Start(WithLogger(tp))
2933+
require.NoError(t, err)
2934+
err = Start(WithLogger(tp))
2935+
require.NoError(t, err)
2936+
Stop()
2937+
2938+
// Check that runtime metrics emitters lifetimes did not overlap.
2939+
for _, logMsg := range tp.Logs() {
2940+
assert.NotContains(t, logMsg, "runtimemetrics has already been started")
2941+
}
2942+
}

0 commit comments

Comments
 (0)