Skip to content

Conversation

@github-actions
Copy link
Contributor

Backport b55f08f from #13947 to 3.10.

We implement a dynamic function discovery fallback when the function-from-code resolution via the GC fails. This can happen if the target application has interacted with the GC, e.g. by freezing it at a time that will prevent the current discovery from being able to resolve the function from the referenced code object.

Testing Strategy

The original issue was reproducible with a local deployment of synapse. The investigation led to the conclusion that the issue was caused by the way the application interacts with the GC https://github.com/element-hq/synapse/blob/1dc29563c1504a2523e467aa7bef6a7ac05cc60c/synapse/app/_base.py#L623C1-L629C35. Commenting out these lines makes the issue disappear. We have tested the fix against the unmodified application to verify that the proposed fix works.

Refs: DYNIS-28

Checklist

  • PR author has checked that all the criteria below are met
  • The PR description includes an overview of the change
  • The PR description articulates the motivation for the change
  • The change includes tests OR the PR description describes a testing strategy
  • The PR description notes risks associated with the change, if any
  • Newly-added code is easy to change
  • The change follows the library release note guidelines
  • The change includes or references documentation updates if necessary
  • Backport labels are set (if applicable)

Reviewer Checklist

  • Reviewer has checked that all the criteria below are met
  • Title is accurate
  • All changes are related to the pull request's stated goal
  • Avoids breaking API changes
  • Testing strategy adequately addresses listed risks
  • Newly-added code is easy to change
  • Release note makes sense to a user of the library
  • If necessary, author has acknowledged and discussed the performance implications of this PR as reported in the benchmarks PR comment
  • Backport labels are set in a manner that is consistent with the release branch maintenance policy

@github-actions github-actions bot added the Dynamic Instrumentation Dynamic Instrumentation/Live Debugger label Jul 15, 2025
@github-actions github-actions bot requested review from a team as code owners July 15, 2025 09:20
@github-actions github-actions bot added the Dynamic Instrumentation Dynamic Instrumentation/Live Debugger label Jul 15, 2025
@github-actions github-actions bot requested review from lievan and taegyunkim July 15, 2025 09:20
@P403n1x87 P403n1x87 closed this Jul 15, 2025
@P403n1x87 P403n1x87 reopened this Jul 15, 2025
@P403n1x87 P403n1x87 enabled auto-merge (squash) July 15, 2025 09:22
@github-actions
Copy link
Contributor Author

CODEOWNERS have been resolved as:

releasenotes/notes/fix-di-dynamic-discovery-fallback-3a5623e18584cd79.yaml  @DataDog/apm-python
ddtrace/debugging/_function/discovery.py                                @DataDog/debugger-python

@github-actions
Copy link
Contributor Author

github-actions bot commented Jul 15, 2025

Bootstrap import analysis

Comparison of import times between this PR and base.

Summary

The average import time from this PR is: 277 ± 3 ms.

The average import time from base is: 282 ± 5 ms.

The import time difference between this PR and base is: -4.7 ± 0.2 ms.

Import time breakdown

The following import paths have shrunk:

ddtrace.auto 2.177 ms (0.79%)
ddtrace.bootstrap.sitecustomize 1.496 ms (0.54%)
ddtrace.bootstrap.preload 1.496 ms (0.54%)
ddtrace.internal.remoteconfig.client 0.713 ms (0.26%)
ddtrace 0.681 ms (0.25%)
ddtrace.internal._unpatched 0.032 ms (0.01%)
json 0.032 ms (0.01%)
json.decoder 0.032 ms (0.01%)
re 0.032 ms (0.01%)
enum 0.032 ms (0.01%)
types 0.032 ms (0.01%)

@pr-commenter
Copy link

pr-commenter bot commented Jul 15, 2025

Benchmarks

Benchmark execution time: 2025-07-23 19:30:57

Comparing candidate commit 5692354 in PR branch backport-13947-to-3.10 with baseline commit 5b4ad29 in branch 3.10.

Found 0 performance improvements and 0 performance regressions! Performance is the same for 540 metrics, 2 unstable metrics.

We implement a dynamic function discovery fallback when the
function-from-code resolution via the GC fails. This can happen if the
target application has interacted with the GC, e.g. by freezing it at a
time that will prevent the current discovery from being able to resolve
the function from the referenced code object.

## Testing Strategy

The original issue was reproducible with a local deployment of
[synapse](https://github.com/element-hq/synapse). The investigation led
to the conclusion that the issue was caused by the way the application
interacts with the GC
https://github.com/element-hq/synapse/blob/1dc29563c1504a2523e467aa7bef6a7ac05cc60c/synapse/app/_base.py#L623C1-L629C35.
Commenting out these lines makes the issue disappear. We have tested the
fix against the unmodified application to verify that the proposed fix
works.

Refs: [DYNIS-28](https://datadoghq.atlassian.net/browse/DYNIS-28)

## Checklist
- [x] PR author has checked that all the criteria below are met
- The PR description includes an overview of the change
- The PR description articulates the motivation for the change
- The change includes tests OR the PR description describes a testing
strategy
- The PR description notes risks associated with the change, if any
- Newly-added code is easy to change
- The change follows the [library release note
guidelines](https://ddtrace.readthedocs.io/en/stable/releasenotes.html)
- The change includes or references documentation updates if necessary
- Backport labels are set (if
[applicable](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting))

## Reviewer Checklist
- [x] Reviewer has checked that all the criteria below are met
- Title is accurate
- All changes are related to the pull request's stated goal
- Avoids breaking
[API](https://ddtrace.readthedocs.io/en/stable/versioning.html#interfaces)
changes
- Testing strategy adequately addresses listed risks
- Newly-added code is easy to change
- Release note makes sense to a user of the library
- If necessary, author has acknowledged and discussed the performance
implications of this PR as reported in the benchmarks PR comment
- Backport labels are set in a manner that is consistent with the
[release branch maintenance
policy](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting)

[DYNIS-28]:
https://datadoghq.atlassian.net/browse/DYNIS-28?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ

(cherry picked from commit b55f08f)
@tylfin tylfin force-pushed the backport-13947-to-3.10 branch from f5ac3ad to 5692354 Compare July 23, 2025 18:27
@P403n1x87 P403n1x87 merged commit d8b10f5 into 3.10 Jul 23, 2025
396 checks passed
@P403n1x87 P403n1x87 deleted the backport-13947-to-3.10 branch July 23, 2025 19:39
rachelyangdog pushed a commit that referenced this pull request Jul 24, 2025
Backport b55f08f from #13947 to 3.10.

We implement a dynamic function discovery fallback when the
function-from-code resolution via the GC fails. This can happen if the
target application has interacted with the GC, e.g. by freezing it at a
time that will prevent the current discovery from being able to resolve
the function from the referenced code object.

## Testing Strategy

The original issue was reproducible with a local deployment of
[synapse](https://github.com/element-hq/synapse). The investigation led
to the conclusion that the issue was caused by the way the application
interacts with the GC
https://github.com/element-hq/synapse/blob/1dc29563c1504a2523e467aa7bef6a7ac05cc60c/synapse/app/_base.py#L623C1-L629C35.
Commenting out these lines makes the issue disappear. We have tested the
fix against the unmodified application to verify that the proposed fix
works.

Refs: [DYNIS-28](https://datadoghq.atlassian.net/browse/DYNIS-28)

## Checklist
- [x] PR author has checked that all the criteria below are met
- The PR description includes an overview of the change
- The PR description articulates the motivation for the change
- The change includes tests OR the PR description describes a testing
strategy
- The PR description notes risks associated with the change, if any
- Newly-added code is easy to change
- The change follows the [library release note
guidelines](https://ddtrace.readthedocs.io/en/stable/releasenotes.html)
- The change includes or references documentation updates if necessary
- Backport labels are set (if
[applicable](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting))

## Reviewer Checklist
- [x] Reviewer has checked that all the criteria below are met 
- Title is accurate
- All changes are related to the pull request's stated goal
- Avoids breaking
[API](https://ddtrace.readthedocs.io/en/stable/versioning.html#interfaces)
changes
- Testing strategy adequately addresses listed risks
- Newly-added code is easy to change
- Release note makes sense to a user of the library
- If necessary, author has acknowledged and discussed the performance
implications of this PR as reported in the benchmarks PR comment
- Backport labels are set in a manner that is consistent with the
[release branch maintenance
policy](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting)


[DYNIS-28]:
https://datadoghq.atlassian.net/browse/DYNIS-28?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ

Co-authored-by: Gabriele N. Tornetta <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Dynamic Instrumentation Dynamic Instrumentation/Live Debugger

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants