Skip to content

Commit 6dd6b07

Browse files
authored
bugfix: set_trace_entity() in lambda adds segment to thread local (#409)
1 parent d9fec7d commit 6dd6b07

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
lines changed

aws_xray_sdk/core/lambda_launcher.py

+12
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,18 @@ def put_subsegment(self, subsegment):
7878
current_entity.add_subsegment(subsegment)
7979
self._local.entities.append(subsegment)
8080

81+
def set_trace_entity(self, trace_entity):
82+
"""
83+
For Lambda context, we additionally store the segment in the thread local.
84+
"""
85+
if self._is_subsegment(trace_entity):
86+
segment = trace_entity.parent_segment
87+
else:
88+
segment = trace_entity
89+
90+
setattr(self._local, 'segment', segment)
91+
setattr(self._local, 'entities', [trace_entity])
92+
8193
def get_trace_entity(self):
8294
self._refresh_context()
8395
if getattr(self._local, 'entities', None):

tests/test_lambda_context.py

+21
Original file line numberDiff line numberDiff line change
@@ -83,3 +83,24 @@ def test_non_initialized():
8383
temp_context.put_subsegment(subsegment)
8484

8585
assert temp_context.get_trace_entity() == subsegment
86+
87+
88+
def test_set_trace_entity():
89+
segment = context.get_trace_entity()
90+
subsegment = Subsegment('name', 'local', segment)
91+
92+
context. clear_trace_entities()
93+
94+
# should set the parent segment in thread local
95+
context.set_trace_entity(subsegment)
96+
tl = context._local
97+
assert tl.__getattribute__('segment') == segment
98+
assert context.get_trace_entity() == subsegment
99+
100+
context.clear_trace_entities()
101+
102+
# should set the segment in thread local
103+
context.set_trace_entity(segment)
104+
tl = context._local
105+
assert tl.__getattribute__('segment') == segment
106+
assert context.get_trace_entity() == segment

0 commit comments

Comments
 (0)