From 2304079e5e9dd084b533d10844546252fd83f564 Mon Sep 17 00:00:00 2001 From: serhiy-bzhezytskyy Date: Wed, 19 Aug 2026 07:17:48 +0300 Subject: [PATCH 1/2] Strip only the leading uberctx- prefix from a baggage key `key.replace(self.BAGGAGE_PREFIX, "")` removes every occurrence, so a carrier key that repeats the prefix loses the inner literal: `uberctx-a-uberctx-b` became the baggage key `a-b` instead of `a-uberctx-b`. Slice off the prefix instead. The class needs pylint's max-public-methods relaxed for the added test, the same way `propagator/opentelemetry-propagator-b3/tests/test_b3_format.py` does. Assisted-By: Claude Fable 5 --- .../src/opentelemetry/propagators/jaeger/__init__.py | 2 +- .../tests/test_jaeger_propagator.py | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) 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", From 000751fa77834c2c068e9a6651c58d025041c097 Mon Sep 17 00:00:00 2001 From: serhiy-bzhezytskyy Date: Wed, 19 Aug 2026 07:21:16 +0300 Subject: [PATCH 2/2] Add changelog fragment for #5557 Assisted-By: Claude Fable 5 --- .changelog/5557.fixed | 1 + 1 file changed, 1 insertion(+) create mode 100644 .changelog/5557.fixed 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`).