GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — feat(boto3): Add SQS/SNS trace propagation by pabloDeputter · Pull Request #8145 · getsentry/sentry-python

Conversation

@pabloDeputter

@pabloDeputter pabloDeputter commented Oct 29, 2026 •
edited by sentry-junior Bot
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Contributor

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

via @dingsdax.

--

View Session [Sentry]

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
pabloDeputter and others added 11 commits October 27, 2026 17:59
@pabloDeputter
.
70dca2a
@pabloDeputter
wip
0f90423
@pabloDeputter
.
053099c
@pabloDeputter
fix(boto3): Add capture_internal_exceptions() guard to `get_span_na…
c73d9ba
…me()`
@pabloDeputter
fix(boto3): Simplify error type handling in batch operations
61994bf
@pabloDeputter
wip
6ccbcd8
@pabloDeputter
Merge branch 'major/3.0' into pablo/boto3-add-sqs-extension
9235dd0
@pabloDeputter
Merge branch 'pablo/boto3-add-sqs-extension' into pablo/boto3-add-sns…
be20b35
…-extension
@pabloDeputter
add "publish_batch" method requirement
50a49d1
@pabloDeputter
fix
4738824
@pabloDeputter
wip: check CI for different botocore versions
d810859
@github-actions

github-actions Bot commented Oct 29, 2026 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Contributor

Coverage Results 📊

✅ 58786 passed | ⏭️ 3071 skipped | Total: 61857 | Pass Rate: 95.04% | Execution Time: 162m 7s

📊 Comparison with Base Branch

Metric Change
Total Tests 📉 -85018
Passed Tests 📉 -80324
Failed Tests —
Skipped Tests 📉 -4694

All tests are passing successfully.

✅ Patch coverage is 94.44% (68 of 72 changed executable lines covered; target 80%).
Project statement coverage is 90.45% (up 0.21 percentage points from base (49473c4) to head (73b5bf7)).

Changed files with executable lines (4)
File Patch coverage Changed executable lines
sentry_sdk/integrations/boto3/_utils.py 92.86% 26/28 covered; missed: 114, 115; partial branches: 111, 113
sentry_sdk/integrations/boto3/_services/sqs.py 94.74% 36/38 covered; missed: 53, 54
sentry_sdk/consts.py 100.00% 2/2 covered
sentry_sdk/integrations/boto3/_services/sns.py 100.00% 4/4 covered
Coverage diff
@@            Coverage Diff             @@
##        master     #8145       +/-##
==========================================
+ Coverage    90.24%    90.45%    +0.21%
==========================================
  Files          203       199        -4
  Tracked lines     27125     21786     -5339
  Branches     10142      7582     -2560
==========================================
- Hits         24478     19705     -4773
+ Misses        2647      2081      -566
+ Partials      1541      1254      -287

Generated by Coverage Action

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

pabloDeputter and others added 5 commits October 30, 2026 13:55
@pabloDeputter
fix(boto3): make sure span is sent
c640799
- 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
@sentry-junior @dingsdax
Merge remote-tracking branch 'origin/major/3.0' into pablo/boto3-add-…
f6c8099
…sqs-extension

Co-Authored-By: Johannes Daxböck <[email protected]>
@sentry-junior @dingsdax
Merge branch 'pablo/boto3-add-sqs-extension' into pablo/boto3-add-sns…
0cb573d
…-extension

Co-Authored-By: Johannes Daxböck <[email protected]>
@sentry-junior
Merge branch 'pablo/boto3-add-sns-extension' into prop
3bb4eab
Co-Authored-By: Johannes Daxböck <[email protected]>

# Conflicts:
#	sentry_sdk/integrations/boto3/_services/sqs.py
@sentry-junior @dingsdax
test(boto3): Round-trip SQS/SNS trace propagation
bb65d32
Send a message, receive what was injected, and check that the receive
span links to the send span. Covers SQS and an SNS notification
delivered to SQS without raw message delivery.

Co-Authored-By: johdax <[email protected]>
@sentry-junior
sentry-junior Bot marked this pull request as ready for review November 9, 2026 12:05
@sentry-junior
sentry-junior Bot requested a review from a team as a code owner November 9, 2026 12:05
@sentry-junior sentry-junior Bot mentioned this pull request Nov 9, 2026
feat(aws-lambda): Add queue.process spans for messaging triggers #8223
Merged
@linear-code

linear-code Bot commented Nov 9, 2026

Copy link
Copy Markdown

PY-3008

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

sentry-junior Bot and others added 4 commits November 9, 2026 12:31
@sentry-junior @dingsdax
ref(boto3): Guard SQS ARN and batch-count reads separately
48eae1c
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]>
@sentry-junior @dingsdax
Merge branch 'pablo/boto3-add-sqs-extension' into pablo/boto3-add-sns…
0e58846
…-extension

Co-Authored-By: Johannes Daxböck <[email protected]>
@sentry-junior @dingsdax
ref(boto3): Share the batch error.type code with SQS
54710b7
Co-Authored-By: Johannes Daxböck <[email protected]>
@sentry-junior
Merge branch 'pablo/boto3-add-sns-extension' into pablo/boto3-add-sqs…
3d35077
…/sns-propagation

Co-Authored-By: Johannes Daxböck <[email protected]>

# Conflicts:
#	sentry_sdk/integrations/boto3/_services/sns.py
#	sentry_sdk/integrations/boto3/_services/sqs.py
#	sentry_sdk/integrations/boto3/_utils.py
Base automatically changed from pablo/boto3-add-sns-extension to major/3.0 November 11, 2026 12:50
@sentrivana
Merge branch 'major/3.0' into pablo/boto3-add-sqs/sns-propagation
7d93a71
@sentrivana sentrivana self-assigned this Nov 11, 2026
cursor[bot]
cursor Bot reviewed Nov 11, 2026
View reviewed changes

@cursor cursor Bot left a comment

Copy link
Copy Markdown

There was a problem hiding this comment.

Choose a reason for 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.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 7d93a71. Configure here.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread sentry_sdk/integrations/boto3/_instrumentation.py Resolved

Uh oh!

There was an error while loading. Please reload this page.

@sentry-junior @sentrivana
ref(boto3): Remove duplicated span name override
0966c93
Co-Authored-By: Ivana Kellyer <[email protected]>
@sentry-junior sentry-junior Bot mentioned this pull request Nov 11, 2026
feat(boto3): Add propagate_traces option #8244
Merged
@sentry-junior
sentry-junior Bot added this pull request to stack #8245 November 11, 2026 13:30
@sentry-junior
sentry-junior Bot removed this pull request from stack #8245 November 11, 2026 13:32
@sentry-junior
sentry-junior Bot added this pull request to stack #8246 November 11, 2026 13:32
@sentry-junior
sentry-junior Bot removed this pull request from stack #8246 November 11, 2026 13:35
sentrivana added a commit that referenced this pull request Nov 11, 2026
@sentry-junior @sentrivana
feat(boto3): Add propagate_traces option (#8244)
49473c4
### Description

Adds `Boto3Integration(propagate_traces=True)`. Setting it to `False`
stops the integration from changing the request params of AWS calls:

- Lambda `Invoke` no longer gets trace data in `ClientContext`.
- Once #8145 lands: SQS `SendMessage` / `SendMessageBatch` and SNS
`Publish` / `PublishBatch` no longer get `sentry-trace` / `baggage`
message attributes, and SQS `ReceiveMessage` no longer appends our names
to `MessageAttributeNames`.

The option gates the shared `get_request_params` hook, so it covers
every extension that uses it without per-service changes. Spans are
still created as before.

This is an escape hatch for setups where the added data breaks calls,
e.g. a queue or topic whose `MaximumMessageSize` is set below the 256
KiB the #8145 size check assumes, or consumers that reject unknown
attributes. The name matches `CeleryIntegration(propagate_traces=...)`.

HTTP `sentry-trace` / `baggage` headers on AWS requests are not
affected. They're also added by the stdlib integration and are already
controlled by `trace_propagation_targets`.

Independent of #8145. The SQS/SNS test cases pass trivially until #8145
is merged, and guard the option after that. Whichever PR merges second
needs a small conflict fix at the end of `test_trace_propagation.py`,
since both append tests there.

<!-- junior-request-attribution:start -->
via @sentrivana.
<!-- junior-request-attribution:end -->

<!-- junior-session-footer:start -->
<!-- junior-conversation-id:slack%3AC0BTREZTS2Z%3A1794401901.814229 -->

--

[View
Session](https://junior-prod.sentry.dev/conversations/slack%3AC0BTREZTS2Z%3A1794401901.814229)
[[Sentry]](https://sentry.sentry.io/explore/conversations/slack%3AC0BTREZTS2Z%3A1794401901.814229/?project=4510944073809921)

<!-- junior-session-footer:end -->

---------

Co-authored-by: sentry-junior[bot] <264270552+sentry-junior[bot]@users.noreply.github.com>
Co-authored-by: Ivana Kellyer <[email protected]>
Co-authored-by: Ivana Kellyer <[email protected]>
@sentry-junior
Merge remote-tracking branch 'origin/major/3.0' into pablo/boto3-add-…
73b5bf7
…sqs/sns-propagation

Co-Authored-By: Ivana Kellyer <[email protected]>

# Conflicts:
#	tests/integrations/boto3/test_trace_propagation.py
sentrivana
sentrivana approved these changes Nov 11, 2026
View reviewed changes
@sentrivana
sentrivana merged commit 8abf619 into major/3.0 Nov 11, 2026
156 checks passed

Uh oh!

There was an error while loading. Please reload this page.

@sentrivana
sentrivana deleted the pablo/boto3-add-sqs/sns-propagation branch November 11, 2026 14:41
sentry-junior Bot added a commit that referenced this pull request Nov 11, 2026
@sentry-junior
feat(aws-lambda): Mark producer links as message_origin
0291824
Matches the boto3 receive links from #8145.
@sentry-junior sentry-junior Bot mentioned this pull request Nov 12, 2026
feat(aws-lambda): Link SQS and SNS invocations to their producers #8257
Merged
sentrivana added a commit that referenced this pull request Nov 12, 2026
@sentry-junior @alexander-alderman-webb @sentrivana
feat(aws-lambda): Link SQS and SNS invocations to their producers (#8257
3da95c6
)

### 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]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@cursor cursor[bot] cursor[bot] left review comments
@sentrivana sentrivana sentrivana approved these changes

Uh oh!

There was an error while loading. Please reload this page.

Assignees

@sentrivana sentrivana

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Uh oh!

There was an error while loading. Please reload this page.

2 participants

@pabloDeputter @sentrivana
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402520 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.