Skip to content

Commit 7d16e8a

Browse files
chore: [SVLS-5973] fix span pointer flow control (#538)
1 parent fa9d00d commit 7d16e8a

File tree

1 file changed

+47
-14
lines changed

1 file changed

+47
-14
lines changed

datadog_lambda/span_pointers.py

+47-14
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import logging
33
import os
44
from typing import List
5+
from typing import Optional
56

67
from ddtrace._trace._span_pointer import _SpanPointerDirection
78
from ddtrace._trace._span_pointer import _SpanPointerDescription
@@ -30,7 +31,7 @@ def calculate_span_pointers(
3031
return _calculate_dynamodb_span_pointers_for_event(event)
3132

3233
except Exception as e:
33-
logger.warning(
34+
logger.debug(
3435
"failed to calculate span pointers for event: %s",
3536
e,
3637
)
@@ -75,7 +76,7 @@ def _calculate_s3_span_pointers_for_object_created_s3_information(
7576
etag = s3_information["object"]["eTag"]
7677

7778
except KeyError as e:
78-
logger.warning(
79+
logger.debug(
7980
"missing s3 information required to make a span pointer: %s",
8081
e,
8182
)
@@ -86,17 +87,31 @@ def _calculate_s3_span_pointers_for_object_created_s3_information(
8687
_aws_s3_object_span_pointer_description,
8788
)
8889

89-
return [
90-
_aws_s3_object_span_pointer_description(
90+
try:
91+
span_pointer_description = _aws_s3_object_span_pointer_description(
92+
operation="S3.LambdaEvent",
9193
pointer_direction=_SpanPointerDirection.UPSTREAM,
9294
bucket=bucket,
9395
key=key,
9496
etag=etag,
9597
)
96-
]
98+
except TypeError:
99+
# The older version of this function did not have an operation
100+
# parameter.
101+
span_pointer_description = _aws_s3_object_span_pointer_description(
102+
pointer_direction=_SpanPointerDirection.UPSTREAM,
103+
bucket=bucket,
104+
key=key,
105+
etag=etag,
106+
)
107+
108+
if span_pointer_description is None:
109+
return []
110+
111+
return [span_pointer_description]
97112

98113
except Exception as e:
99-
logger.warning(
114+
logger.debug(
100115
"failed to generate S3 span pointer: %s",
101116
e,
102117
)
@@ -120,10 +135,13 @@ def _calculate_dynamodb_span_pointers_for_event_record(
120135
) -> List[_SpanPointerDescription]:
121136
try:
122137
table_name = _extract_table_name_from_dynamodb_stream_record(record)
138+
if table_name is None:
139+
return []
140+
123141
primary_key = record["dynamodb"]["Keys"]
124142

125143
except Exception as e:
126-
logger.warning(
144+
logger.debug(
127145
"missing DynamoDB information required to make a span pointer: %s",
128146
e,
129147
)
@@ -134,23 +152,36 @@ def _calculate_dynamodb_span_pointers_for_event_record(
134152
_aws_dynamodb_item_span_pointer_description,
135153
)
136154

137-
return [
138-
_aws_dynamodb_item_span_pointer_description(
155+
try:
156+
span_pointer_description = _aws_dynamodb_item_span_pointer_description(
157+
operation="DynamoDB.LambdaEvent",
139158
pointer_direction=_SpanPointerDirection.UPSTREAM,
140159
table_name=table_name,
141160
primary_key=primary_key,
142161
)
143-
]
162+
except TypeError:
163+
# The older version of this function did not have an operation
164+
# parameter.
165+
span_pointer_description = _aws_dynamodb_item_span_pointer_description(
166+
pointer_direction=_SpanPointerDirection.UPSTREAM,
167+
table_name=table_name,
168+
primary_key=primary_key,
169+
)
170+
171+
if span_pointer_description is None:
172+
return []
173+
174+
return [span_pointer_description]
144175

145176
except Exception as e:
146-
logger.warning(
177+
logger.debug(
147178
"failed to generate DynamoDB span pointer: %s",
148179
e,
149180
)
150181
return []
151182

152183

153-
def _extract_table_name_from_dynamodb_stream_record(record) -> str:
184+
def _extract_table_name_from_dynamodb_stream_record(record) -> Optional[str]:
154185
# Example eventSourceARN:
155186
# arn:aws:dynamodb:us-east-2:123456789012:table/my-table/stream/2024-06-10T19:26:16.525
156187
event_source_arn = record["eventSourceARN"]
@@ -159,10 +190,12 @@ def _extract_table_name_from_dynamodb_stream_record(record) -> str:
159190
":", maxsplit=5
160191
)
161192
if _arn != "arn" or _aws != "aws" or _dynamodb != "dynamodb":
162-
raise ValueError(f"unexpected eventSourceARN format: {event_source_arn}")
193+
logger.debug("unexpected eventSourceARN format: %s", event_source_arn)
194+
return None
163195

164196
[_table, table_name, _stream, _timestamp] = dynamodb_info.split("/")
165197
if _table != "table" or _stream != "stream":
166-
raise ValueError(f"unexpected eventSourceARN format: {event_source_arn}")
198+
logger.debug("unexpected eventSourceARN format: %s", event_source_arn)
199+
return None
167200

168201
return table_name

0 commit comments

Comments
 (0)