Skip to content

Commit f74672a

Browse files
committed
migrate spanTimeout
1 parent c8b32da commit f74672a

File tree

5 files changed

+25
-17
lines changed

5 files changed

+25
-17
lines changed

ddtrace/tracer/abandonedspans_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ func TestReportAbandonedSpans(t *testing.T) {
133133
assert.Nil(err)
134134
defer stop()
135135
assert.True(tracer.config.internalConfig.DebugAbandonedSpans())
136-
assert.Equal(tracer.config.spanTimeout, 100*time.Millisecond)
136+
assert.Equal(tracer.config.internalConfig.SpanTimeout(), 100*time.Millisecond)
137137
})
138138

139139
t.Run("finished", func(t *testing.T) {
@@ -351,7 +351,7 @@ func TestDebugAbandonedSpansOff(t *testing.T) {
351351
t.Run("default", func(t *testing.T) {
352352
assert := assert.New(t)
353353
assert.False(tracer.config.internalConfig.DebugAbandonedSpans())
354-
assert.Equal(time.Duration(0), tracer.config.spanTimeout)
354+
assert.Equal(10*time.Minute, tracer.config.internalConfig.SpanTimeout())
355355
expected := "Abandoned spans logs enabled."
356356
s := tracer.StartSpan("operation", StartTime(spanStartTime))
357357
time.Sleep(100 * time.Millisecond)

ddtrace/tracer/option.go

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -250,10 +250,6 @@ type config struct {
250250
// peerServiceMappings holds a set of service mappings to dynamically rename peer.service values.
251251
peerServiceMappings map[string]string
252252

253-
// spanTimeout represents how old a span can be before it should be logged as a possible
254-
// misconfiguration
255-
spanTimeout time.Duration
256-
257253
// statsComputationEnabled enables client-side stats computation (aka trace metrics).
258254
statsComputationEnabled bool
259255

@@ -398,9 +394,6 @@ func newConfig(opts ...StartOption) (*config, error) {
398394
log.Warn("ignoring DD_TRACE_CLIENT_HOSTNAME_COMPAT, invalid version %q", compatMode)
399395
}
400396
}
401-
if c.internalConfig.DebugAbandonedSpans() {
402-
c.spanTimeout = internal.DurationEnv("DD_TRACE_ABANDONED_SPAN_TIMEOUT", 10*time.Minute)
403-
}
404397
c.statsComputationEnabled = internal.BoolEnv("DD_TRACE_STATS_COMPUTATION_ENABLED", true)
405398

406399
namingschema.LoadFromEnv()
@@ -1230,7 +1223,7 @@ func WithProfilerEndpoints(enabled bool) StartOption {
12301223
func WithDebugSpansMode(timeout time.Duration) StartOption {
12311224
return func(c *config) {
12321225
c.internalConfig.SetDebugAbandonedSpans(true, internalconfig.OriginCode)
1233-
c.spanTimeout = timeout
1226+
c.internalConfig.SetSpanTimeout(timeout, internalconfig.OriginCode)
12341227
}
12351228
}
12361229

ddtrace/tracer/option_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -882,15 +882,15 @@ func TestTracerOptionsDefaults(t *testing.T) {
882882
c, err := newTestConfig(WithAgentTimeout(2))
883883
assert.NoError(t, err)
884884
assert.Equal(t, false, c.internalConfig.DebugAbandonedSpans())
885-
assert.Equal(t, time.Duration(0), c.spanTimeout)
885+
assert.Equal(t, 10*time.Minute, c.internalConfig.SpanTimeout())
886886
})
887887

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

896896
t.Run("timeout-set", func(t *testing.T) {
@@ -899,15 +899,15 @@ func TestTracerOptionsDefaults(t *testing.T) {
899899
c, err := newTestConfig(WithAgentTimeout(2))
900900
assert.NoError(t, err)
901901
assert.Equal(t, true, c.internalConfig.DebugAbandonedSpans())
902-
assert.Equal(t, time.Minute, c.spanTimeout)
902+
assert.Equal(t, time.Minute, c.internalConfig.SpanTimeout())
903903
})
904904

905905
t.Run("with-function", func(t *testing.T) {
906906
c, err := newTestConfig(WithAgentTimeout(2))
907907
assert.NoError(t, err)
908908
WithDebugSpansMode(time.Second)(c)
909909
assert.Equal(t, true, c.internalConfig.DebugAbandonedSpans())
910-
assert.Equal(t, time.Second, c.spanTimeout)
910+
assert.Equal(t, time.Second, c.internalConfig.SpanTimeout())
911911
})
912912
})
913913

ddtrace/tracer/tracer.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -493,7 +493,7 @@ func newTracer(opts ...StartOption) (*tracer, error) {
493493
if c.internalConfig.DebugAbandonedSpans() {
494494
log.Info("Abandoned spans logs enabled.")
495495
t.abandonedSpansDebugger = newAbandonedSpansDebugger()
496-
t.abandonedSpansDebugger.Start(t.config.spanTimeout)
496+
t.abandonedSpansDebugger.Start(t.config.internalConfig.SpanTimeout())
497497
}
498498
t.wg.Add(1)
499499
go func() {

internal/config/config.go

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,9 @@ type Config struct {
5656
peerServiceDefaultsEnabled bool
5757
peerServiceMappings map[string]string
5858
// debugAbandonedSpans controls if the tracer should log when old, open spans are found
59-
debugAbandonedSpans bool
59+
debugAbandonedSpans bool
60+
// spanTimeout represents how old a span can be before it should be logged as a possible
61+
// misconfiguration. Unused if debugAbandonedSpans is false.
6062
spanTimeout time.Duration
6163
partialFlushMinSpans int
6264
// partialFlushEnabled specifices whether the tracer should enable partial flushing. Value
@@ -101,7 +103,7 @@ func loadConfig() *Config {
101103
cfg.peerServiceDefaultsEnabled = provider.getBool("DD_TRACE_PEER_SERVICE_DEFAULTS_ENABLED", false)
102104
cfg.peerServiceMappings = provider.getMap("DD_TRACE_PEER_SERVICE_MAPPING", nil)
103105
cfg.debugAbandonedSpans = provider.getBool("DD_TRACE_DEBUG_ABANDONED_SPANS", false)
104-
cfg.spanTimeout = provider.getDuration("DD_TRACE_ABANDONED_SPAN_TIMEOUT", 0)
106+
cfg.spanTimeout = provider.getDuration("DD_TRACE_ABANDONED_SPAN_TIMEOUT", 10*time.Minute)
105107
cfg.partialFlushMinSpans = provider.getIntWithValidator("DD_TRACE_PARTIAL_FLUSH_MIN_SPANS", 1000, validatePartialFlushMinSpans)
106108
cfg.partialFlushEnabled = provider.getBool("DD_TRACE_PARTIAL_FLUSH_ENABLED", false)
107109
cfg.statsComputationEnabled = provider.getBool("DD_TRACE_STATS_COMPUTATION_ENABLED", false)
@@ -340,3 +342,16 @@ func (c *Config) SetDebugAbandonedSpans(enabled bool, origin telemetry.Origin) {
340342
c.debugAbandonedSpans = enabled
341343
telemetry.RegisterAppConfig("DD_TRACE_DEBUG_ABANDONED_SPANS", enabled, origin)
342344
}
345+
346+
func (c *Config) SpanTimeout() time.Duration {
347+
c.mu.RLock()
348+
defer c.mu.RUnlock()
349+
return c.spanTimeout
350+
}
351+
352+
func (c *Config) SetSpanTimeout(timeout time.Duration, origin telemetry.Origin) {
353+
c.mu.Lock()
354+
defer c.mu.Unlock()
355+
c.spanTimeout = timeout
356+
telemetry.RegisterAppConfig("DD_TRACE_ABANDONED_SPAN_TIMEOUT", timeout, origin)
357+
}

0 commit comments

Comments
 (0)