Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 91d1900

Browse files
authored
Do not count skipped baggage entries (open-telemetry#2079)
1 parent a36a615 commit 91d1900

File tree

3 files changed

+45
-3
lines changed

3 files changed

+45
-3
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
88

99
- `opentelemetry-semantic-conventions` Update to semantic conventions v1.6.1
1010
([#2077](https://github.com/open-telemetry/opentelemetry-python/pull/2077))
11+
- Fix propagation bug caused by counting skipped entries
12+
([#2071](https://github.com/open-telemetry/opentelemetry-python/pull/2071))
1113

1214
## [1.5.0-0.24b0](https://github.com/open-telemetry/opentelemetry-python/releases/tag/v1.5.0-0.24b0) - 2021-08-26
1315

opentelemetry-api/src/opentelemetry/baggage/propagation/__init__.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,6 @@ def extract(
5454
baggage_entries = header.split(",")
5555
total_baggage_entries = self._MAX_PAIRS
5656
for entry in baggage_entries:
57-
if total_baggage_entries <= 0:
58-
return context
59-
total_baggage_entries -= 1
6057
if len(entry) > self._MAX_PAIR_LENGTH:
6158
continue
6259
try:
@@ -68,6 +65,9 @@ def extract(
6865
unquote_plus(value).strip(),
6966
context=context,
7067
)
68+
total_baggage_entries -= 1
69+
if total_baggage_entries == 0:
70+
break
7171

7272
return context
7373

opentelemetry-api/tests/baggage/test_baggage_propagation.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,46 @@ def test_extract_unquote_plus(self):
118118
{"key/key": "value/value"},
119119
)
120120

121+
def test_header_max_entries_skip_invalid_entry(self):
122+
123+
self.assertEqual(
124+
self._extract(
125+
",".join(
126+
[
127+
f"key{index}=value{index}"
128+
if index != 2
129+
else (
130+
f"key{index}="
131+
f"value{'s' * (W3CBaggagePropagator._MAX_PAIR_LENGTH + 1)}"
132+
)
133+
for index in range(W3CBaggagePropagator._MAX_PAIRS + 1)
134+
]
135+
)
136+
),
137+
{
138+
f"key{index}": f"value{index}"
139+
for index in range(W3CBaggagePropagator._MAX_PAIRS + 1)
140+
if index != 2
141+
},
142+
)
143+
self.assertEqual(
144+
self._extract(
145+
",".join(
146+
[
147+
f"key{index}=value{index}"
148+
if index != 2
149+
else f"key{index}xvalue{index}"
150+
for index in range(W3CBaggagePropagator._MAX_PAIRS + 1)
151+
]
152+
)
153+
),
154+
{
155+
f"key{index}": f"value{index}"
156+
for index in range(W3CBaggagePropagator._MAX_PAIRS + 1)
157+
if index != 2
158+
},
159+
)
160+
121161
def test_inject_no_baggage_entries(self):
122162
values = {}
123163
output = self._inject(values)

0 commit comments

Comments
 (0)