Skip to content

Commit 929adcd

Browse files
authored
api: Allow digit as first chr in vendor specific trace state key (#511)
Allows vendor specific trace state keys to start with a digit as specified in: https://github.com/w3c/trace-context/blob/master/spec/20-http_header_format.md#key
1 parent 5fbc75e commit 929adcd

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

opentelemetry-api/src/opentelemetry/trace/propagation/tracecontexthttptextformat.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333

3434
_KEY_WITHOUT_VENDOR_FORMAT = r"[a-z][_0-9a-z\-\*\/]{0,255}"
3535
_KEY_WITH_VENDOR_FORMAT = (
36-
r"[a-z][_0-9a-z\-\*\/]{0,240}@[a-z][_0-9a-z\-\*\/]{0,13}"
36+
r"[a-z0-9][_0-9a-z\-\*\/]{0,240}@[a-z][_0-9a-z\-\*\/]{0,13}"
3737
)
3838

3939
_KEY_FORMAT = _KEY_WITHOUT_VENDOR_FORMAT + "|" + _KEY_WITH_VENDOR_FORMAT

opentelemetry-api/tests/trace/propagation/test_tracecontexthttptextformat.py

+29
Original file line numberDiff line numberDiff line change
@@ -222,3 +222,32 @@ def test_tracestate_header_with_trailing_comma(self):
222222
)
223223
)
224224
self.assertEqual(span.get_context().trace_state["foo"], "1")
225+
226+
def test_tracestate_keys(self):
227+
"""Test for valid key patterns in the tracestate
228+
"""
229+
tracestate_value = ",".join(
230+
[
231+
"1a-2f@foo=bar1",
232+
"1a-_*/2b@foo=bar2",
233+
"foo=bar3",
234+
"foo-_*/bar=bar4",
235+
]
236+
)
237+
span = get_span_from_context(
238+
FORMAT.extract(
239+
get_as_list,
240+
{
241+
"traceparent": [
242+
"00-12345678901234567890123456789012-1234567890123456-00"
243+
],
244+
"tracestate": [tracestate_value],
245+
},
246+
)
247+
)
248+
self.assertEqual(span.get_context().trace_state["1a-2f@foo"], "bar1")
249+
self.assertEqual(
250+
span.get_context().trace_state["1a-_*/2b@foo"], "bar2"
251+
)
252+
self.assertEqual(span.get_context().trace_state["foo"], "bar3")
253+
self.assertEqual(span.get_context().trace_state["foo-_*/bar"], "bar4")

0 commit comments

Comments
 (0)