Skip to content

Commit c24f1b3

Browse files
committed
migrate debugAbandonedSpans
1 parent e13f300 commit c24f1b3

File tree

6 files changed

+29
-19
lines changed

6 files changed

+29
-19
lines changed

ddtrace/tracer/abandonedspans_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ func TestReportAbandonedSpans(t *testing.T) {
132132
tracer, _, _, stop, err := startTestTracer(t, WithLogger(tp), WithDebugSpansMode(100*time.Millisecond))
133133
assert.Nil(err)
134134
defer stop()
135-
assert.True(tracer.config.debugAbandonedSpans)
135+
assert.True(tracer.config.internalConfig.DebugAbandonedSpans())
136136
assert.Equal(tracer.config.spanTimeout, 100*time.Millisecond)
137137
})
138138

@@ -350,7 +350,7 @@ func TestDebugAbandonedSpansOff(t *testing.T) {
350350

351351
t.Run("default", func(t *testing.T) {
352352
assert := assert.New(t)
353-
assert.False(tracer.config.debugAbandonedSpans)
353+
assert.False(tracer.config.internalConfig.DebugAbandonedSpans())
354354
assert.Equal(time.Duration(0), tracer.config.spanTimeout)
355355
expected := "Abandoned spans logs enabled."
356356
s := tracer.StartSpan("operation", StartTime(spanStartTime))

ddtrace/tracer/option.go

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -254,9 +254,6 @@ type config struct {
254254
// peerServiceMappings holds a set of service mappings to dynamically rename peer.service values.
255255
peerServiceMappings map[string]string
256256

257-
// debugAbandonedSpans controls if the tracer should log when old, open spans are found
258-
debugAbandonedSpans bool
259-
260257
// spanTimeout represents how old a span can be before it should be logged as a possible
261258
// misconfiguration
262259
spanTimeout time.Duration
@@ -406,8 +403,7 @@ func newConfig(opts ...StartOption) (*config, error) {
406403
log.Warn("ignoring DD_TRACE_CLIENT_HOSTNAME_COMPAT, invalid version %q", compatMode)
407404
}
408405
}
409-
c.debugAbandonedSpans = internal.BoolEnv("DD_TRACE_DEBUG_ABANDONED_SPANS", false)
410-
if c.debugAbandonedSpans {
406+
if c.internalConfig.DebugAbandonedSpans() {
411407
c.spanTimeout = internal.DurationEnv("DD_TRACE_ABANDONED_SPAN_TIMEOUT", 10*time.Minute)
412408
}
413409
c.statsComputationEnabled = internal.BoolEnv("DD_TRACE_STATS_COMPUTATION_ENABLED", true)
@@ -1238,7 +1234,7 @@ func WithProfilerEndpoints(enabled bool) StartOption {
12381234
// be expensive, so it should only be enabled for debugging purposes.
12391235
func WithDebugSpansMode(timeout time.Duration) StartOption {
12401236
return func(c *config) {
1241-
c.debugAbandonedSpans = true
1237+
c.internalConfig.SetDebugAbandonedSpans(true, internalconfig.OriginCode)
12421238
c.spanTimeout = timeout
12431239
}
12441240
}

ddtrace/tracer/option_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -879,15 +879,15 @@ func TestTracerOptionsDefaults(t *testing.T) {
879879
t.Run("defaults", func(t *testing.T) {
880880
c, err := newTestConfig(WithAgentTimeout(2))
881881
assert.NoError(t, err)
882-
assert.Equal(t, false, c.debugAbandonedSpans)
882+
assert.Equal(t, false, c.internalConfig.DebugAbandonedSpans())
883883
assert.Equal(t, time.Duration(0), c.spanTimeout)
884884
})
885885

886886
t.Run("debug-on", func(t *testing.T) {
887887
t.Setenv("DD_TRACE_DEBUG_ABANDONED_SPANS", "true")
888888
c, err := newTestConfig(WithAgentTimeout(2))
889889
assert.NoError(t, err)
890-
assert.Equal(t, true, c.debugAbandonedSpans)
890+
assert.Equal(t, true, c.internalConfig.DebugAbandonedSpans())
891891
assert.Equal(t, 10*time.Minute, c.spanTimeout)
892892
})
893893

@@ -896,15 +896,15 @@ func TestTracerOptionsDefaults(t *testing.T) {
896896
t.Setenv("DD_TRACE_ABANDONED_SPAN_TIMEOUT", fmt.Sprint(time.Minute))
897897
c, err := newTestConfig(WithAgentTimeout(2))
898898
assert.NoError(t, err)
899-
assert.Equal(t, true, c.debugAbandonedSpans)
899+
assert.Equal(t, true, c.internalConfig.DebugAbandonedSpans())
900900
assert.Equal(t, time.Minute, c.spanTimeout)
901901
})
902902

903903
t.Run("with-function", func(t *testing.T) {
904904
c, err := newTestConfig(WithAgentTimeout(2))
905905
assert.NoError(t, err)
906906
WithDebugSpansMode(time.Second)(c)
907-
assert.Equal(t, true, c.debugAbandonedSpans)
907+
assert.Equal(t, true, c.internalConfig.DebugAbandonedSpans())
908908
assert.Equal(t, time.Second, c.spanTimeout)
909909
})
910910
})

ddtrace/tracer/span.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -746,7 +746,7 @@ func (s *Span) finish(finishTime int64) {
746746
// the agent supports dropping p0's in the client
747747
keep = shouldKeep(s)
748748
}
749-
if tracer.config.debugAbandonedSpans {
749+
if tracer.config.internalConfig.DebugAbandonedSpans() {
750750
// the tracer supports debugging abandoned spans
751751
tracer.submitAbandonedSpan(s, true)
752752
}

ddtrace/tracer/tracer.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -490,7 +490,7 @@ func newTracer(opts ...StartOption) (*tracer, error) {
490490
t.reportRuntimeMetrics(defaultMetricsReportInterval)
491491
}()
492492
}
493-
if c.debugAbandonedSpans {
493+
if c.internalConfig.DebugAbandonedSpans() {
494494
log.Info("Abandoned spans logs enabled.")
495495
t.abandonedSpansDebugger = newAbandonedSpansDebugger()
496496
t.abandonedSpansDebugger.Start(t.config.spanTimeout)
@@ -806,7 +806,7 @@ func (t *tracer) StartSpan(operationName string, options ...StartSpanOption) *Sp
806806
} else {
807807
span.pprofCtxRestore = nil
808808
}
809-
if t.config.debugAbandonedSpans {
809+
if t.config.internalConfig.DebugAbandonedSpans() {
810810
select {
811811
case t.abandonedSpansDebugger.In <- newAbandonedSpanCandidate(span, false):
812812
// ok
@@ -972,7 +972,7 @@ func (t *tracer) TracerConf() TracerConf {
972972
return TracerConf{
973973
CanComputeStats: t.config.canComputeStats(),
974974
CanDropP0s: t.config.canDropP0s(),
975-
DebugAbandonedSpans: t.config.debugAbandonedSpans,
975+
DebugAbandonedSpans: t.config.internalConfig.DebugAbandonedSpans(),
976976
Disabled: !t.config.enabled.current,
977977
PartialFlush: t.config.internalConfig.PartialFlushEnabled(),
978978
PartialFlushMinSpans: t.config.internalConfig.PartialFlushMinSpans(),

internal/config/config.go

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,10 @@ type Config struct {
5555
spanAttributeSchemaVersion int
5656
peerServiceDefaultsEnabled bool
5757
peerServiceMappings map[string]string
58-
debugAbandonedSpans bool
59-
spanTimeout time.Duration
60-
partialFlushMinSpans int
58+
// debugAbandonedSpans controls if the tracer should log when old, open spans are found
59+
debugAbandonedSpans bool
60+
spanTimeout time.Duration
61+
partialFlushMinSpans int
6162
// partialFlushEnabled specifices whether the tracer should enable partial flushing. Value
6263
// from DD_TRACE_PARTIAL_FLUSH_ENABLED, default false.
6364
partialFlushEnabled bool
@@ -306,3 +307,16 @@ func (c *Config) DynamicInstrumentationEnabled() bool {
306307
defer c.mu.RUnlock()
307308
return c.dynamicInstrumentationEnabled
308309
}
310+
311+
func (c *Config) DebugAbandonedSpans() bool {
312+
c.mu.RLock()
313+
defer c.mu.RUnlock()
314+
return c.debugAbandonedSpans
315+
}
316+
317+
func (c *Config) SetDebugAbandonedSpans(enabled bool, origin telemetry.Origin) {
318+
c.mu.Lock()
319+
defer c.mu.Unlock()
320+
c.debugAbandonedSpans = enabled
321+
telemetry.RegisterAppConfig("DD_TRACE_DEBUG_ABANDONED_SPANS", enabled, origin)
322+
}

0 commit comments

Comments
 (0)