GeezerVisonThe World Wide Web, restored to 800 pixels of glory. | ||||||||||||||||||||
| Home|About|Gaming cabinet|Archives|How it works|Starter sites | ||||||||||||||||||||
GeezerVison is showing github.com — feat(boto3): Add SNS extension by pabloDeputter · Pull Request #8142 · getsentry/sentry-python Conversation
|
Coverage Results 📊✅ 58478 passed | ⏭️ 3067 skipped | Total: 61545 | Pass Rate: 95.02% | Execution Time: 160m 10s 📊 Comparison with Base Branch
All tests are passing successfully. ✅ Patch coverage is 100.00% (54 of 54 changed executable lines covered; target 80%). Changed files with executable lines (2)
Coverage diff@@ Coverage Diff @@ ## master #8142 +/-## ========================================== + Coverage 90.27% 90.40% +0.13% ========================================== Files 203 199 -4 Tracked lines 27114 21713 -5401 Branches 10136 7546 -2590 ========================================== - Hits 24475 19628 -4847 + Misses 2639 2085 -554 + Partials 1540 1254 -286 Generated by Coverage Action |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
- stop reading operation type from attributes in `get_span_name()` so that failure in `get_request_attributes()` can't make this fail as well - wrap URL parsing in `get_request_attributes()` so failure just loses the attributes that come from url
…sqs-extension Co-Authored-By: Johannes Daxböck <[email protected]>
…-extension Co-Authored-By: Johannes Daxböck <[email protected]>
Botocore validates params after our hook, so a bad Entries or ARN value now only loses that attribute, not every SQS request attribute. Move the batch error.type code to _utils so SNS can share it, and link the SQS docs for BatchResultErrorEntry. Co-Authored-By: Johannes Daxböck <[email protected]>
…-extension Co-Authored-By: Johannes Daxböck <[email protected]>
Co-Authored-By: Johannes Daxböck <[email protected]>
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Stale Bugbot comment from a previous run.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
Co-Authored-By: Ivana Kellyer <[email protected]> # Conflicts: # sentry_sdk/consts.py # sentry_sdk/integrations/boto3/_services/sqs.py # sentry_sdk/integrations/boto3/_utils.py # tests/integrations/boto3/test_sqs.py
An SNS Publish response without MessageId (e.g. from a Stubber or an SNS-compatible service) raised KeyError into the caller and left the span open. Wrap the response reads like SQS does, so a bad shape only loses those attributes. Co-Authored-By: Ivana Kellyer <[email protected]>
botocore validates params after our hook, so a malformed TargetArn or PublishBatchRequestEntries raised out of get_request_attributes and the call ran without a span. Guard the topic, batch-count, and ARN reads separately, like SQS, so a bad value only loses its own attributes. If ARN scrubbing fails, drop the ARN attributes instead of sending raw endpoint or subscription ARNs. Co-Authored-By: Ivana Kellyer <[email protected]>
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit ae87c83. Configure here.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
PublishBatch isn't in older botocore models (e.g. boto3 1.16.63), so skip like the other SNS tests do. Co-Authored-By: Ivana Kellyer <[email protected]>
Co-Authored-By: Ivana Kellyer <[email protected]>
There was an error while loading. Please reload this page.
### Description Propagates the trace through SQS and SNS messages, so the consumer can be linked back to the request that sent the message. **Send side** (`SendMessage`, `SendMessageBatch`, `Publish`, `PublishBatch`): - Adds `sentry-trace` and `baggage` as `String` message attributes, on the message or on each batch entry. - Only when `trace_propagation_targets` match the endpoint. - Skips a message if the caller already set these attributes, if it would go over the 10-attribute limit, or if it would go over 256 KiB. AWS would reject the message otherwise. - Works on a copy of the params. The caller's dict isn't changed. **Receive side** (`ReceiveMessage`): - Adds `sentry-trace` and `baggage` to `MessageAttributeNames`, so SQS returns them. Only when the span is recorded, and not when the caller already asks for `All` or `.*`. - Adds a span link to each distinct producer context in the received messages, with `sentry.link.type: message_origin`. - Reads the context from SQS message attributes, and from the JSON envelope of an SNS notification without raw message delivery. **Tests**: injection and extraction for single and batch calls, the limits above, and a round-trip test: send a message, receive what was injected, and check that the link points at the send span. Stacked on #8142 (SNS), which is stacked on #8137 (SQS). #### Issues * resolves: PY-3008 <!-- junior-request-attribution:start --> via @dingsdax. <!-- junior-request-attribution:end --> <!-- junior-session-footer:start --> <!-- junior-conversation-id:slack%3AC0C9X9V5NMT%3A1793904671.980379 --> -- [View Session](https://junior-prod.sentry.dev/conversations/slack%3AC0C9X9V5NMT%3A1793904671.980379) [[Sentry]](https://sentry.sentry.io/explore/conversations/slack%3AC0C9X9V5NMT%3A1793904671.980379/?project=4510944073809921) <!-- junior-session-footer:end --> --------- Co-authored-by: sentry-junior[bot] <264270552+sentry-junior[bot]@users.noreply.github.com> Co-authored-by: Johannes Daxböck <[email protected]> Co-authored-by: Ivana Kellyer <[email protected]> Co-authored-by: Ivana Kellyer <[email protected]>
) ### Description Since #8137, #8142, and #8145, boto3 puts `sentry-trace` in SQS and SNS message attributes, but nothing reads it on the Lambda side. This PR is the smallest change that closes the loop for SQS- and SNS-triggered functions. The Lambda integration now reads `sentry-trace` from each record and adds a `message_origin` link from the invocation span to each distinct producer span. This matches what the boto3 `ReceiveMessage` span already does. Messages never become the invocation's parent. It reads: - SQS records: `messageAttributes["sentry-trace"].stringValue` - SNS records: `Sns.MessageAttributes["sentry-trace"].Value` - SNS → SQS without raw message delivery: the SNS envelope in the SQS `body`, the same as boto3 does Links are deduplicated, because a batch send gives many messages the same producer span, and capped at 128, OTel's default, because Lambda can deliver up to 10,000 SQS messages at once. **Scope.** This is intentionally kept separate from the stretch stack. It doesn't add `faas.trigger` (#8222) or `queue.process` spans (#8223), and it doesn't touch `messaging.batch.message_count` (#8229). The invocation span is otherwise unchanged. Synchronous `Invoke` propagation through `ClientContext` is #8221. That PR changes the `continue_trace` call and this one only adds `links=`, so the two are independent. The link-building code repeats boto3's `_message_link` in a Lambda-event shape: Lambda records use `messageAttributes` / `stringValue` / `body`, while the boto3 response uses `MessageAttributes` / `StringValue` / `Body`. Importing from the boto3 integration would make `aws_lambda` depend on botocore. **Testing.** `test_producer_links` sends SQS, SNS, and SNS-to-SQS events to `BasicOkSpanStreaming`. It asserts the segment span's `links` and that the segment span has no parent. It passes in CI's Cloud (Lambda) jobs, and `ruff` and `mypy sentry_sdk` pass. `codecov/patch` is red because the Lambda tests run in `sam local` containers, so their coverage isn't counted. #### Issues * Part of #8081 <!-- junior-request-attribution:start --> via **webb**, @sentrivana. <!-- junior-request-attribution:end --> <!-- junior-session-footer:start --> <!-- junior-conversation-id:slack%3AC09M26BC6A1%3A1794211222.463239 --> -- [View Session](https://junior-prod.sentry.dev/conversations/slack%3AC09M26BC6A1%3A1794211222.463239) [[Sentry]](https://sentry.sentry.io/explore/conversations/slack%3AC09M26BC6A1%3A1794211222.463239/?project=4510944073809921) <!-- junior-session-footer:end --> --------- Co-authored-by: sentry-junior[bot] <264270552+sentry-junior[bot]@users.noreply.github.com> Co-authored-by: Alexander Webb <[email protected]> Co-authored-by: Ivana Kellyer <[email protected]>
… span (#8229) ### Description The Lambda span set `messaging.batch.message_count` to `1` for every event that isn't a list, and to `len(event)` for a top-level list. An SQS or SNS delivery is a dict with `Records`, so a batch of 10 messages reported 1. HTTP calls and direct invocations reported a batch they don't have. This PR removes the attribute from the Lambda span. The count belongs on messaging spans, as in the OTel messaging conventions: - boto3 `ReceiveMessage` and batch-send spans already set it (#8137, #8142). - For SQS/SNS-triggered Lambdas, the `queue.process` span in #8223 sets it. The JS SDK doesn't set it on the Lambda span either. The attribute was added in 3.0 (#7941) and never shipped in 2.x, so no released behavior changes. Replaces #8219 (same commits). GitHub never ran CI on #8219. **Note for review:** this is narrower than PY-3015, which asks to keep the attribute for SQS/SNS deliveries. @alexander-alderman-webb, please confirm that's OK. #### Issues * resolves: PY-3015 <!-- junior-request-attribution:start --> via @dingsdax. <!-- junior-request-attribution:end --> <!-- junior-session-footer:start --> <!-- junior-conversation-id:slack%3AC0C9X9V5NMT%3A1793904671.980379 --> -- [View Session](https://junior-prod.sentry.dev/conversations/slack%3AC0C9X9V5NMT%3A1793904671.980379) [[Sentry]](https://sentry.sentry.io/explore/conversations/slack%3AC0C9X9V5NMT%3A1793904671.980379/?project=4510944073809921) <!-- junior-session-footer:end --> --------- Co-authored-by: sentry-junior[bot] <264270552+sentry-junior[bot]@users.noreply.github.com> Co-authored-by: Johannes Daxböck <[email protected]>
There was an error while loading. Please reload this page.
Successfully merging this pull request may close these issues.
There was an error while loading. Please reload this page.