Skip to content

Commit 94264a3

Browse files
committed
fix lambda authorizer trace context injection issue
1 parent 097a823 commit 94264a3

File tree

2 files changed

+11
-18
lines changed

2 files changed

+11
-18
lines changed

datadog_lambda/wrapper.py

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
TraceContextSource,
2323
XraySubsegment,
2424
Headers,
25-
TraceHeader,
2625
)
2726
from datadog_lambda.metric import (
2827
flush_stats,
@@ -44,6 +43,7 @@
4443
InferredSpanInfo,
4544
is_authorizer_response,
4645
tracer,
46+
propagator,
4747
)
4848
from datadog_lambda.trigger import (
4949
extract_trigger_tags,
@@ -254,13 +254,7 @@ def _inject_authorizer_span_headers(self, request_id):
254254
injected_headers = {}
255255
source_span = self.inferred_span if self.inferred_span else self.span
256256
span_context = source_span.context
257-
injected_headers[TraceHeader.TRACE_ID] = str(span_context.trace_id)
258-
injected_headers[TraceHeader.PARENT_ID] = str(span_context.span_id)
259-
sampling_priority = span_context.sampling_priority
260-
if sampling_priority is not None:
261-
injected_headers[TraceHeader.SAMPLING_PRIORITY] = str(
262-
span_context.sampling_priority
263-
)
257+
propagator.inject(span_context, injected_headers)
264258
injected_headers[Headers.Parent_Span_Finish_Time] = finish_time_ns
265259
if request_id is not None:
266260
injected_headers[Headers.Authorizing_Request_Id] = request_id

tests/test_wrapper.py

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from datadog_lambda.metric import lambda_metric
1111
from datadog_lambda.thread_stats_writer import ThreadStatsWriter
1212
from ddtrace import Span, tracer
13+
from ddtrace.internal.constants import MAX_UINT_64BITS
1314

1415

1516
def get_mock_context(
@@ -543,19 +544,19 @@ def lambda_handler(event, context):
543544
lambda_event = {}
544545

545546
lambda_context = get_mock_context()
546-
mock_span = Span(name="my_inferred_span", span_id=123, trace_id=456)
547-
mock_span.context.sampling_priority = "1"
548-
mock_span.context.dd_origin = None
549-
mock_span.start_ns = 1668127541671386817
550-
mock_span.duration_ns = 1e8
551-
lambda_handler.inferred_span = mock_span
547+
test_span = tracer.trace("test_span")
548+
trace_ctx = tracer.current_trace_context()
549+
test_span.finish()
550+
lambda_handler.inferred_span = test_span
552551
lambda_handler.make_inferred_span = False
553552
result = lambda_handler(lambda_event, lambda_context)
554553
raw_inject_data = result["context"]["_datadog"]
555554
self.assertIsInstance(raw_inject_data, str)
556555
inject_data = json.loads(base64.b64decode(raw_inject_data))
557-
self.assertEqual(inject_data[TraceHeader.PARENT_ID], "123")
558-
self.assertEqual(inject_data[TraceHeader.TRACE_ID], "456")
556+
self.assertEqual(inject_data[TraceHeader.PARENT_ID], str(trace_ctx.span_id))
557+
self.assertEqual(
558+
inject_data[TraceHeader.TRACE_ID], str(MAX_UINT_64BITS & trace_ctx.trace_id)
559+
)
559560
self.assertEqual(inject_data[TraceHeader.SAMPLING_PRIORITY], "1")
560561
self.assertEqual(result["context"]["scope"], "still here")
561562

@@ -662,7 +663,6 @@ def tearDown(self):
662663

663664
@patch("datadog_lambda.wrapper.should_use_extension", True)
664665
def test_local_test_envvar_flushing(self):
665-
666666
flushes = []
667667
lambda_event = {}
668668
lambda_context = get_mock_context()
@@ -680,7 +680,6 @@ def flush():
680680
({"DD_LOCAL_TEST": ""}, False),
681681
({}, False),
682682
):
683-
684683
os.environ = environ
685684
flushes.clear()
686685

0 commit comments

Comments
 (0)