diff --git a/.changelog/5557.fixed b/.changelog/5557.fixed new file mode 100644 index 00000000000..ed4bd7cf284 --- /dev/null +++ b/.changelog/5557.fixed @@ -0,0 +1 @@ +`opentelemetry-propagator-jaeger`: strip only the leading `uberctx-` prefix when extracting a baggage key, so a carrier key that repeats the prefix keeps its inner literal (`uberctx-a-uberctx-b` now yields `a-uberctx-b` rather than `a-b`). diff --git a/propagator/opentelemetry-propagator-jaeger/src/opentelemetry/propagators/jaeger/__init__.py b/propagator/opentelemetry-propagator-jaeger/src/opentelemetry/propagators/jaeger/__init__.py index 04a3e8ff5e6..d554cf48b41 100644 --- a/propagator/opentelemetry-propagator-jaeger/src/opentelemetry/propagators/jaeger/__init__.py +++ b/propagator/opentelemetry-propagator-jaeger/src/opentelemetry/propagators/jaeger/__init__.py @@ -110,7 +110,7 @@ def _extract_baggage( if value is None: continue context = baggage.set_baggage( - key.replace(self.BAGGAGE_PREFIX, ""), + key[len(self.BAGGAGE_PREFIX) :], urllib.parse.unquote(value).strip(), context=context, ) diff --git a/propagator/opentelemetry-propagator-jaeger/tests/test_jaeger_propagator.py b/propagator/opentelemetry-propagator-jaeger/tests/test_jaeger_propagator.py index bca14d4de75..9b92f42f4fe 100644 --- a/propagator/opentelemetry-propagator-jaeger/tests/test_jaeger_propagator.py +++ b/propagator/opentelemetry-propagator-jaeger/tests/test_jaeger_propagator.py @@ -46,6 +46,8 @@ def get_context_new_carrier(old_carrier, carrier_baggage=None): class TestJaegerPropagator(TestCase): + # pylint: disable=too-many-public-methods + @classmethod def setUpClass(cls): generator = id_generator.RandomIdGenerator() @@ -134,6 +136,14 @@ def test_extract_empty_baggage_value(self): context = FORMAT.extract(old_carrier) self.assertDictEqual({"key3": "value3"}, context[_BAGGAGE_KEY]) + def test_extract_strips_only_the_leading_baggage_prefix(self): + old_carrier = { + FORMAT.TRACE_ID_KEY: self.serialized_uber_trace_id, + "uberctx-a-uberctx-b": "value", + } + context = FORMAT.extract(old_carrier) + self.assertDictEqual({"a-uberctx-b": "value"}, context[_BAGGAGE_KEY]) + def test_extract_invalid_uber_trace_id(self): old_carrier = { "uber-trace-id": "000000000000000000000000deadbeef:00000000deadbef0:00",