Skip to content

Commit b5e405b

Browse files
committed
More refactoring
1 parent ec42a91 commit b5e405b

File tree

2 files changed

+107
-110
lines changed

2 files changed

+107
-110
lines changed

opentelemetry-sdk/src/opentelemetry/sdk/context/propagation/b3_format.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -113,11 +113,12 @@ def inject(
113113
set_in_carrier(
114114
carrier, cls.SPAN_ID_KEY, format_span_id(span.context.span_id)
115115
)
116-
set_in_carrier(
117-
carrier,
118-
cls.PARENT_SPAN_ID_KEY,
119-
format_span_id(span.parent.context.span_id),
120-
)
116+
if span.parent is not None:
117+
set_in_carrier(
118+
carrier,
119+
cls.PARENT_SPAN_ID_KEY,
120+
format_span_id(span.parent.context.span_id),
121+
)
121122
set_in_carrier(carrier, cls.SAMPLED_KEY, "1" if sampled else "0")
122123

123124

opentelemetry-sdk/tests/context/propagation/test_b3_format.py

Lines changed: 101 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -35,85 +35,97 @@ def setUpClass(cls):
3535
cls.serialized_span_id = b3_format.format_span_id(
3636
trace.generate_span_id()
3737
)
38-
cls.serialized_parent_span_id = b3_format.format_span_id(
38+
cls.serialized_parent_id = b3_format.format_span_id(
3939
trace.generate_span_id()
4040
)
4141

42+
def get_child_parent_new_carrier(self, old_carrier):
43+
44+
parent_context = FORMAT.extract(get_as_list, old_carrier)
45+
46+
parent = trace.Span("parent", parent_context)
47+
child = trace.Span(
48+
"child",
49+
trace_api.SpanContext(
50+
parent_context.trace_id,
51+
trace.generate_span_id(),
52+
trace_options=parent_context.trace_options,
53+
trace_state=parent_context.trace_state,
54+
),
55+
parent=parent
56+
)
57+
58+
new_carrier = {}
59+
FORMAT.inject(child, dict.__setitem__, new_carrier)
60+
61+
return child, parent, new_carrier
62+
4263
def test_extract_multi_header(self):
4364
"""Test the extraction of B3 headers."""
44-
carrier = {
45-
FORMAT.TRACE_ID_KEY: self.serialized_trace_id,
46-
FORMAT.SPAN_ID_KEY: self.serialized_span_id,
47-
FORMAT.PARENT_SPAN_ID_KEY: self.serialized_parent_span_id,
48-
FORMAT.SAMPLED_KEY: "1",
49-
}
50-
parent_span = trace.Span(
51-
"parent", FORMAT.extract(get_as_list, carrier)
65+
child, parent, new_carrier = self.get_child_parent_new_carrier(
66+
{
67+
FORMAT.TRACE_ID_KEY: self.serialized_trace_id,
68+
FORMAT.SPAN_ID_KEY: self.serialized_span_id,
69+
FORMAT.PARENT_SPAN_ID_KEY: self.serialized_parent_id,
70+
FORMAT.SAMPLED_KEY: "1",
71+
}
5272
)
53-
child_span = trace.Tracer().start_span("child", parent=parent_span)
54-
new_carrier = {}
55-
FORMAT.inject(child_span, dict.__setitem__, new_carrier)
73+
5674
self.assertEqual(
5775
new_carrier[FORMAT.TRACE_ID_KEY],
58-
b3_format.format_trace_id(child_span.context.trace_id),
76+
b3_format.format_trace_id(child.context.trace_id),
5977
)
6078
self.assertEqual(
6179
new_carrier[FORMAT.SPAN_ID_KEY],
62-
b3_format.format_span_id(child_span.context.span_id),
80+
b3_format.format_span_id(child.context.span_id),
6381
)
6482
self.assertEqual(
6583
new_carrier[FORMAT.PARENT_SPAN_ID_KEY],
66-
b3_format.format_span_id(parent_span.context.span_id),
84+
b3_format.format_span_id(parent.context.span_id),
6785
)
6886
self.assertEqual(new_carrier[FORMAT.SAMPLED_KEY], "1")
6987

7088
def test_extract_single_header(self):
7189
"""Test the extraction from a single b3 header."""
72-
carrier = {
73-
FORMAT.SINGLE_HEADER_KEY: "{}-{}".format(
74-
self.serialized_trace_id, self.serialized_span_id
75-
)
76-
}
77-
parent_span = trace.Span(
78-
"parent", FORMAT.extract(get_as_list, carrier)
90+
child, parent, new_carrier = self.get_child_parent_new_carrier(
91+
{
92+
FORMAT.SINGLE_HEADER_KEY: "{}-{}".format(
93+
self.serialized_trace_id, self.serialized_span_id
94+
)
95+
}
7996
)
80-
child_span = trace.Tracer().start_span("child", parent=parent_span)
81-
new_carrier = {}
82-
FORMAT.inject(child_span, dict.__setitem__, new_carrier)
97+
8398
self.assertEqual(
8499
new_carrier[FORMAT.TRACE_ID_KEY],
85-
b3_format.format_trace_id(child_span.context.trace_id),
100+
b3_format.format_trace_id(child.context.trace_id),
86101
)
87102
self.assertEqual(
88103
new_carrier[FORMAT.SPAN_ID_KEY],
89-
b3_format.format_span_id(child_span.context.span_id),
104+
b3_format.format_span_id(child.context.span_id),
90105
)
91106
self.assertEqual(new_carrier[FORMAT.SAMPLED_KEY], "1")
92107

93-
carrier = {
94-
FORMAT.SINGLE_HEADER_KEY: "{}-{}-1-{}".format(
95-
self.serialized_trace_id,
96-
self.serialized_span_id,
97-
self.serialized_parent_span_id,
98-
)
99-
}
100-
parent_span = trace.Span(
101-
"parent", FORMAT.extract(get_as_list, carrier)
108+
child, parent, new_carrier = self.get_child_parent_new_carrier(
109+
{
110+
FORMAT.SINGLE_HEADER_KEY: "{}-{}-1-{}".format(
111+
self.serialized_trace_id,
112+
self.serialized_span_id,
113+
self.serialized_parent_id,
114+
)
115+
}
102116
)
103-
child_span = trace.Tracer().start_span("child", parent=parent_span)
104-
new_carrier = {}
105-
FORMAT.inject(child_span, dict.__setitem__, new_carrier)
117+
106118
self.assertEqual(
107119
new_carrier[FORMAT.TRACE_ID_KEY],
108-
b3_format.format_trace_id(child_span.context.trace_id),
120+
b3_format.format_trace_id(child.context.trace_id),
109121
)
110122
self.assertEqual(
111123
new_carrier[FORMAT.SPAN_ID_KEY],
112-
b3_format.format_span_id(child_span.context.span_id),
124+
b3_format.format_span_id(child.context.span_id),
113125
)
114126
self.assertEqual(
115127
new_carrier[FORMAT.PARENT_SPAN_ID_KEY],
116-
b3_format.format_span_id(parent_span.context.span_id),
128+
b3_format.format_span_id(parent.context.span_id),
117129
)
118130
self.assertEqual(new_carrier[FORMAT.SAMPLED_KEY], "1")
119131

@@ -122,100 +134,84 @@ def test_extract_header_precedence(self):
122134
headers.
123135
"""
124136
single_header_trace_id = self.serialized_trace_id[:-3] + "123"
125-
carrier = {
126-
FORMAT.SINGLE_HEADER_KEY: "{}-{}".format(
127-
single_header_trace_id, self.serialized_span_id
128-
),
129-
FORMAT.TRACE_ID_KEY: self.serialized_trace_id,
130-
FORMAT.SPAN_ID_KEY: self.serialized_span_id,
131-
FORMAT.SAMPLED_KEY: "1",
132-
}
133-
parent_span = trace.Span(
134-
"parent", FORMAT.extract(get_as_list, carrier)
137+
138+
child, parent, new_carrier = self.get_child_parent_new_carrier(
139+
{
140+
FORMAT.SINGLE_HEADER_KEY: "{}-{}".format(
141+
single_header_trace_id, self.serialized_span_id
142+
),
143+
FORMAT.TRACE_ID_KEY: self.serialized_trace_id,
144+
FORMAT.SPAN_ID_KEY: self.serialized_span_id,
145+
FORMAT.SAMPLED_KEY: "1",
146+
}
135147
)
136-
child_span = trace.Tracer().start_span("child", parent=parent_span)
137-
new_carrier = {}
138-
FORMAT.inject(child_span, dict.__setitem__, new_carrier)
148+
139149
self.assertEqual(
140150
new_carrier[FORMAT.TRACE_ID_KEY], single_header_trace_id
141151
)
142152

143153
def test_enabled_sampling(self):
144154
"""Test b3 sample key variants that turn on sampling."""
145155
for variant in ["1", "True", "true", "d"]:
146-
carrier = {
147-
FORMAT.TRACE_ID_KEY: self.serialized_trace_id,
148-
FORMAT.SPAN_ID_KEY: self.serialized_span_id,
149-
FORMAT.SAMPLED_KEY: variant,
150-
}
151-
parent_span = trace.Span(
152-
"parent", FORMAT.extract(get_as_list, carrier)
156+
child, parent, new_carrier = self.get_child_parent_new_carrier(
157+
{
158+
FORMAT.TRACE_ID_KEY: self.serialized_trace_id,
159+
FORMAT.SPAN_ID_KEY: self.serialized_span_id,
160+
FORMAT.SAMPLED_KEY: variant,
161+
}
153162
)
154-
child_span = trace.Tracer().start_span("child", parent=parent_span)
155-
new_carrier = {}
156-
FORMAT.inject(child_span, dict.__setitem__, new_carrier)
163+
157164
self.assertEqual(new_carrier[FORMAT.SAMPLED_KEY], "1")
158165

159166
def test_disabled_sampling(self):
160167
"""Test b3 sample key variants that turn off sampling."""
161168
for variant in ["0", "False", "false", None]:
162-
carrier = {
163-
FORMAT.TRACE_ID_KEY: self.serialized_trace_id,
164-
FORMAT.SPAN_ID_KEY: self.serialized_span_id,
165-
FORMAT.SAMPLED_KEY: variant,
166-
}
167-
parent_span = trace.Span(
168-
"parent", FORMAT.extract(get_as_list, carrier)
169+
child, parent, new_carrier = self.get_child_parent_new_carrier(
170+
{
171+
FORMAT.TRACE_ID_KEY: self.serialized_trace_id,
172+
FORMAT.SPAN_ID_KEY: self.serialized_span_id,
173+
FORMAT.SAMPLED_KEY: variant,
174+
}
169175
)
170-
child_span = trace.Tracer().start_span("child", parent=parent_span)
171-
new_carrier = {}
172-
FORMAT.inject(child_span, dict.__setitem__, new_carrier)
176+
173177
self.assertEqual(new_carrier[FORMAT.SAMPLED_KEY], "0")
174178

175179
def test_flags(self):
176180
"""x-b3-flags set to "1" should result in propagation."""
177-
carrier = {
178-
FORMAT.TRACE_ID_KEY: self.serialized_trace_id,
179-
FORMAT.SPAN_ID_KEY: self.serialized_span_id,
180-
FORMAT.FLAGS_KEY: "1",
181-
}
182-
parent_span = trace.Span(
183-
"parent", FORMAT.extract(get_as_list, carrier)
181+
child, parent, new_carrier = self.get_child_parent_new_carrier(
182+
{
183+
FORMAT.TRACE_ID_KEY: self.serialized_trace_id,
184+
FORMAT.SPAN_ID_KEY: self.serialized_span_id,
185+
FORMAT.FLAGS_KEY: "1",
186+
}
184187
)
185-
child_span = trace.Tracer().start_span("child", parent=parent_span)
186-
new_carrier = {}
187-
FORMAT.inject(child_span, dict.__setitem__, new_carrier)
188+
188189
self.assertEqual(new_carrier[FORMAT.SAMPLED_KEY], "1")
189190

190191
def test_flags_and_sampling(self):
191192
"""Propagate if b3 flags and sampling are set."""
192-
carrier = {
193-
FORMAT.TRACE_ID_KEY: self.serialized_trace_id,
194-
FORMAT.SPAN_ID_KEY: self.serialized_span_id,
195-
FORMAT.FLAGS_KEY: "1",
196-
}
197-
parent_span = trace.Span(
198-
"parent", FORMAT.extract(get_as_list, carrier)
193+
child, parent, new_carrier = self.get_child_parent_new_carrier(
194+
{
195+
FORMAT.TRACE_ID_KEY: self.serialized_trace_id,
196+
FORMAT.SPAN_ID_KEY: self.serialized_span_id,
197+
FORMAT.FLAGS_KEY: "1",
198+
}
199199
)
200-
child_span = trace.Tracer().start_span("child", parent=parent_span)
201-
new_carrier = {}
202-
FORMAT.inject(child_span, dict.__setitem__, new_carrier)
200+
203201
self.assertEqual(new_carrier[FORMAT.SAMPLED_KEY], "1")
204202

205203
def test_64bit_trace_id(self):
206204
"""64 bit trace ids should be padded to 128 bit trace ids."""
207205
trace_id_64_bit = self.serialized_trace_id[:16]
208-
carrier = {
209-
FORMAT.TRACE_ID_KEY: trace_id_64_bit,
210-
FORMAT.SPAN_ID_KEY: self.serialized_span_id,
211-
FORMAT.FLAGS_KEY: "1",
212-
}
213-
parent_span = trace.Span(
214-
"parent", FORMAT.extract(get_as_list, carrier)
206+
207+
child, parent, new_carrier = self.get_child_parent_new_carrier(
208+
{
209+
FORMAT.TRACE_ID_KEY: trace_id_64_bit,
210+
FORMAT.SPAN_ID_KEY: self.serialized_span_id,
211+
FORMAT.FLAGS_KEY: "1",
212+
}
215213
)
216-
child_span = trace.Tracer().start_span("child", parent=parent_span)
217-
new_carrier = {}
218-
FORMAT.inject(child_span, dict.__setitem__, new_carrier)
214+
219215
self.assertEqual(
220216
new_carrier[FORMAT.TRACE_ID_KEY], "0" * 16 + trace_id_64_bit
221217
)

0 commit comments

Comments
 (0)