Skip to content

Commit f678493

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

File tree

2 files changed

+11
-17
lines changed

2 files changed

+11
-17
lines changed

datadog_lambda/wrapper.py

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
InferredSpanInfo,
4545
is_authorizer_response,
4646
tracer,
47+
propagator,
4748
)
4849
from datadog_lambda.trigger import (
4950
extract_trigger_tags,
@@ -254,13 +255,7 @@ def _inject_authorizer_span_headers(self, request_id):
254255
injected_headers = {}
255256
source_span = self.inferred_span if self.inferred_span else self.span
256257
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-
)
258+
propagator.inject(span_context, injected_headers)
264259
injected_headers[Headers.Parent_Span_Finish_Time] = finish_time_ns
265260
if request_id is not None:
266261
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)