Repository navigation
Conversation
Record callback_error/profile when beforeSendTransaction or a customer transaction processor throws and an attached profile is dropped. Notify OnDiscardCallback through the same client-report accounting path. Cover scope and options processors, absent profiles, and SDK processor failures that retain profiles. Leave catch types, intentional drops, and profile-file cleanup unchanged. Refs #6081 Co-Authored-By: Claude <noreply@anthropic.com>
📲 Install BuildsAndroid
|
Skip Android screenshot and view hierarchy capture when their callbacks throw, while retaining the error event. Drop spans on beforeSpan failures in OkHttp, OpenFeign, GraphQL, Ktor, and Apollo without disrupting requests or replacing the original request error. Preserve normal callback results and existing catch types. Finish failed spans and retain request cleanup and breadcrumbs. Add regression coverage for callback failures, partial mutations, original request errors, asynchronous GraphQL results, and subsequent Android captures. Correct callback wiring in the Ktor and screenshot test fixtures. Verify 18 regression cases fail before the fix and pass afterward; all 454 tests in the affected suites pass, along with formatting and API checks. Refs #6081 Co-Authored-By: Claude <noreply@anthropic.com>
Record callback_error/span when a throwing beforeSpan callback drops a sampled span in OkHttp, OpenFeign, GraphQL, Ktor, and Apollo. Use the pre-callback sampling decision so partial callback mutations do not hide losses, and leave unsampled spans and intentional null drops uncounted. Add regression coverage for discard notifications, sampling states, and intentional drops while preserving request and span completion behavior. Refs #6167 Co-Authored-By: Claude <noreply@anthropic.com>
Record attached profiles as lost when transaction event processors or beforeSendTransaction intentionally discard the transaction. Keep client reports and discard callbacks aligned with dropped profile payloads. Co-Authored-By: Claude <noreply@anthropic.com>
Propagate the latest main and preceding callback error changes through the stacked pull request. Co-Authored-By: Claude <noreply@anthropic.com>
Propagate the latest main and preceding callback error changes through the stacked pull request. Co-Authored-By: Claude <noreply@anthropic.com>
…ustom-callbacks fix(integrations): [Callback Errors 9] Guard custom callbacks
Instructions and example for changelogPlease add an entry to Example: ## Unreleased
### Fixes
- [Callback Errors 8] Report dropped profiles ([#6166](https://github.com/getsentry/sentry-java/pull/6166))If none of the above apply, you can opt out of this check by adding |
There was a problem hiding this comment.
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.
Want reviews to match your repository better? Bugbot Learning can learn team-specific rules from PR activity. A team admin can enable Learning in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 64c1c55. Configure here.
| DiscardReason.CALLBACK_ERROR, | ||
| DataCategory.Span, | ||
| ) | ||
| } |
There was a problem hiding this comment.
Apollo 5 skips span drop
Medium Severity
beforeSpan failures now drop the span and record callback_error in Apollo 2/3/4, OkHttp, OpenFeign, GraphQL, and Ktor, but SentryApollo5HttpInterceptor still only logs and sends the span. Apollo 5 callers keep a partially processed span and never notify OnDiscardCallback.
Additional Locations (2)
Reviewed by Cursor Bugbot for commit 64c1c55. Configure here.


PR Stack (Callback Errors)
📜 Description
Record one
callback_error/profileloss when an attached transaction profile is dropped becausebeforeSendTransactionor a customer event processor throws. The same accounting path notifiesOnDiscardCallback.Pass profile presence into the private transaction-processing helpers so scope and options processors both account for the loss. Transactions without profiles do not report profile losses. SDK processor failures continue sending the transaction and attached profile without reporting a loss.
Existing transaction/span accounting, intentional-drop behavior, and catch types are unchanged. This does not change profile-file cleanup or continuous profile chunks.
💡 Motivation and Context
Transaction callback failures already record the lost transaction and spans, but omit an attached profile that is dropped with them. Include that profile so client reports and discard observers reflect the full loss.
💚 How did you test it?
./gradlew spotlessApply apiDump./gradlew :sentry:apiCheck :sentry:spotlessCheck :sentry:test --tests='*SentryClientTest*' --tests='*SentryClientTransactionProfileTest*' --tests='*SentryClientInternalEventProcessorTest*' --tests='*ClientReportTest*' --info— 295 tests passedbeforeSendTransaction, each with and without an attached profile. Assert exact client-report counts and discard notifications.📝 Checklist
sendDefaultPIIis enabled.🔮 Next steps
Profile/replay artifact cleanup remains a separate follow-up. Callback-boundary catch-type changes remain deferred to the next major.