Skip to content

Commit ec0d718

Browse files
committed
handle the potential of setting baggage before active trace
1 parent 53087f8 commit ec0d718

File tree

3 files changed

+33
-2
lines changed

3 files changed

+33
-2
lines changed

lib/datadog/tracing.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ def log_correlation
130130
def baggage
131131
# Baggage should not be dependent on there being an active trace.
132132
# So we create a new TraceOperation if there isn't one.
133-
active_trace ||= TraceOperation.new
133+
active_trace = self.active_trace || tracer.continue_trace!(nil)
134134
active_trace.baggage
135135
end
136136

lib/datadog/tracing/tracer.rb

+2-1
Original file line numberDiff line numberDiff line change
@@ -342,7 +342,8 @@ def build_trace(digest = nil)
342342
trace_state: digest.trace_state,
343343
trace_state_unknown_fields: digest.trace_state_unknown_fields,
344344
remote_parent: digest.span_remote,
345-
tracer: self
345+
tracer: self,
346+
baggage: digest.baggage
346347
)
347348
else
348349
TraceOperation.new(

spec/datadog/tracing/tracer_spec.rb

+30
Original file line numberDiff line numberDiff line change
@@ -1059,6 +1059,36 @@
10591059
end
10601060
end
10611061
end
1062+
1063+
describe '#baggage_tracing_interactions' do
1064+
it 'baggage set before active trace creates active trace' do
1065+
Datadog::Tracing.baggage['key'] = 'value'
1066+
Datadog::Tracing.trace('operation') do |_span, trace|
1067+
expect(trace.to_digest.baggage).to eq('key' => 'value')
1068+
end
1069+
end
1070+
1071+
it 'baggage set after trace finish creates new traceoperation with baggage value' do
1072+
Datadog::Tracing.trace('operation') do |_span, _trace|
1073+
expect(Datadog::Tracing.baggage).to be_empty
1074+
end
1075+
Datadog::Tracing.baggage['key'] = 'value'
1076+
expect(Datadog::Tracing.active_trace.to_digest.baggage).to eq('key' => 'value')
1077+
end
1078+
end
1079+
1080+
it 'baggage value is overridden inside an active trace' do
1081+
Datadog::Tracing.trace('operation') do |_span, trace|
1082+
Datadog::Tracing.baggage['key'] = 'value'
1083+
expect(trace.to_digest.baggage).to eq('key' => 'value')
1084+
end
1085+
end
1086+
1087+
it 'incoming headers overrides existing baggage' do
1088+
Datadog::Tracing.baggage['key'] = 'value'
1089+
Datadog::Tracing.continue_trace!(Datadog::Tracing::TraceDigest.new(baggage: { 'key1' => 'value1' }))
1090+
expect(Datadog::Tracing.active_trace.to_digest.baggage).to eq('key1' => 'value1')
1091+
end
10621092
end
10631093

10641094
RSpec.describe Datadog::Tracing::Tracer::TraceCompleted do

0 commit comments

Comments
 (0)