Skip to content

Commit e73329c

Browse files
RD-10381 - do not add W3C TraceContext headers to Amazon Sigv4 outgoing HTTP requests (#272)
* feat: do not add W3C TraceContext headers to Amazon Sigv4 outgoing HTTP requests * remove codeowners
1 parent 866827b commit e73329c

File tree

3 files changed

+31
-1
lines changed

3 files changed

+31
-1
lines changed

.github/CODEOWNERS

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/lumigo_tracer/w3c_context.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
import re
33
from typing import Dict, Optional
44

5+
from lumigo_core.logger import get_logger
6+
57
TRACEPARENT_HEADER_NAME = "traceparent"
68
TRACESTATE_HEADER_NAME = "tracestate"
79
# The regex was copied from:
@@ -10,13 +12,21 @@
1012
"^[ \t]*([0-9a-f]{2})-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})" + "(-.*)?[ \t]*$"
1113
)
1214
TRACEPARENT_HEADER_FORMAT_RE = re.compile(TRACEPARENT_HEADER_FORMAT)
15+
SKIP_INJECT_HEADERS = ["x-amz-content-sha256"]
1316

1417

1518
def generate_message_id() -> str:
1619
return "%016x" % random.getrandbits(64)
1720

1821

22+
def should_skip_trace_propagation(headers: Dict[str, str]) -> bool:
23+
return any(key.lower() in SKIP_INJECT_HEADERS for key in headers)
24+
25+
1926
def add_w3c_trace_propagator(headers: Dict[str, str], transaction_id: str) -> None:
27+
if should_skip_trace_propagation(headers):
28+
get_logger().debug("Skipping trace propagation")
29+
return
2030
message_id = generate_message_id()
2131
headers[TRACEPARENT_HEADER_NAME] = get_trace_id(headers, transaction_id, message_id)
2232
headers[TRACESTATE_HEADER_NAME] = get_trace_state(headers, message_id)

src/test/unit/test_w3c_context.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
add_w3c_trace_propagator,
77
get_w3c_message_id,
88
is_w3c_headers,
9+
should_skip_trace_propagation,
910
)
1011

1112

@@ -78,3 +79,23 @@ def test_get_w3c_message_id(headers, expected):
7879
)
7980
def test_is_w3c_headers(headers, expected):
8081
assert is_w3c_headers(headers) == expected
82+
83+
84+
@pytest.mark.parametrize(
85+
"headers, expected",
86+
[
87+
({}, False),
88+
({"another": "header"}, False),
89+
({"x-amz-content-sha256": "123"}, True),
90+
({"X-amz-content-SHA256": "123"}, True),
91+
],
92+
)
93+
def test_should_skip_trace_propagation(headers, expected):
94+
assert should_skip_trace_propagation(headers) == expected
95+
96+
97+
def test_dont_add_header_for_skipped_context():
98+
headers = {"x-amz-content-sha256": "123"}
99+
add_w3c_trace_propagator(headers, "111111111111112222222222")
100+
101+
assert headers == {"x-amz-content-sha256": "123"}

0 commit comments

Comments
 (0)