fix(dedupe): Avoid retaining strong references to user exceptions#6103
Closed
ericapisani wants to merge 1 commit intomasterfrom
Closed
fix(dedupe): Avoid retaining strong references to user exceptions#6103ericapisani wants to merge 1 commit intomasterfrom
ericapisani wants to merge 1 commit intomasterfrom
Conversation
DedupeIntegration stored the original exception instance as a fallback when `weakref.ref(exc)` failed (e.g. for builtin exception types). That meant a reference to every such exception lived on the context var until the next exception replaced it, potentially pinning large traceback frames, locals, and user objects in memory. Instead, fall back to a `(type, hash(args))` fingerprint so dedupe can still suppress duplicates without keeping the exception alive. Refs PY-2381 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Contributor
Semver Impact of This PR🟢 Patch (bug fixes) 📋 Changelog PreviewThis is how your changes will appear in the changelog. New Features ✨
Bug Fixes 🐛
Internal Changes 🔧
🤖 This preview updates automatically when you update the PR. |
Contributor
Codecov Results 📊✅ 142 passed | Total: 142 | Pass Rate: 100% | Execution Time: 21.61s All tests are passing successfully. ❌ Patch coverage is 58.82%. Project has 14160 uncovered lines. Files with missing lines (1)
Generated by Codecov Action |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Avoid holding a strong reference to the last-seen exception in
DedupeIntegration.
When
weakref.ref(exc)failed (some builtin exception types can't beweak-referenced), the integration previously stored the exception
instance itself as a fallback on its context var. That meant the
exception — along with its traceback frames, locals, and any user
objects captured on the frame — stayed alive until the next exception
replaced it, which showed up as unexpected memory retention in
long-running processes.
Fall back to a
(type, hash(args))fingerprint instead. Dedupe canstill recognize a repeat of the same exception to suppress duplicates,
but nothing about the original instance is retained.
exc.argshashingis guarded (
repr()fallback, then0) so unhashable args won't breakdedupe.
Refs PY-2381
Fixes #6094