[Debugger] Report retryable line probe resolution errors#8603
Conversation
BenchmarksBenchmark execution time: 2026-05-20 21:22:38 Comparing candidate commit 9244350 in PR branch Some scenarios are present only in baseline or only in candidate runs. If you didn't create or remove some scenarios in your branch, this maybe a sign of crashed benchmarks 💥💥💥 Scenarios present only in baseline:
Found 2 performance improvements and 3 performance regressions! Performance is the same for 47 metrics, 20 unstable metrics, 84 known flaky benchmarks, 42 flaky benchmarks without significant changes.
|
aa90bcb to
3b4bc30
Compare
Execution-Time Benchmarks Report ⏱️Execution-time results for samples comparing This PR (8603) and master. ✅ No regressions detected - check the details below Full Metrics ComparisonFakeDbCommand
HttpMessageHandler
Comparison explanationExecution-time benchmarks measure the whole time it takes to execute a program, and are intended to measure the one-off costs. Cases where the execution time results for the PR are worse than latest master results are highlighted in **red**. The following thresholds were used for comparing the execution times:
Note that these results are based on a single point-in-time result for each branch. For full results, see the dashboard. Graphs show the p99 interval based on the mean and StdDev of the test run, as well as the mean value of the run (shown as a diamond below the graph). Duration chartsFakeDbCommand (.NET Framework 4.8)gantt
title Execution time (ms) FakeDbCommand (.NET Framework 4.8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8603) - mean (75ms) : 70, 79
master - mean (74ms) : 70, 77
section Bailout
This PR (8603) - mean (78ms) : 75, 81
master - mean (76ms) : 75, 78
section CallTarget+Inlining+NGEN
This PR (8603) - mean (1,108ms) : 1062, 1154
master - mean (1,109ms) : 1058, 1161
FakeDbCommand (.NET Core 3.1)gantt
title Execution time (ms) FakeDbCommand (.NET Core 3.1)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8603) - mean (115ms) : 108, 123
master - mean (115ms) : 111, 119
section Bailout
This PR (8603) - mean (114ms) : 112, 117
master - mean (117ms) : 110, 123
section CallTarget+Inlining+NGEN
This PR (8603) - mean (791ms) : 765, 816
master - mean (796ms) : 766, 825
FakeDbCommand (.NET 6)gantt
title Execution time (ms) FakeDbCommand (.NET 6)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8603) - mean (101ms) : 98, 104
master - mean (101ms) : 98, 104
section Bailout
This PR (8603) - mean (102ms) : 99, 105
master - mean (105ms) : 99, 111
section CallTarget+Inlining+NGEN
This PR (8603) - mean (948ms) : 911, 986
master - mean (949ms) : 910, 988
FakeDbCommand (.NET 8)gantt
title Execution time (ms) FakeDbCommand (.NET 8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8603) - mean (103ms) : 98, 108
master - mean (100ms) : 96, 104
section Bailout
This PR (8603) - mean (101ms) : 97, 105
master - mean (100ms) : 97, 102
section CallTarget+Inlining+NGEN
This PR (8603) - mean (825ms) : 792, 857
master - mean (824ms) : 784, 863
HttpMessageHandler (.NET Framework 4.8)gantt
title Execution time (ms) HttpMessageHandler (.NET Framework 4.8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8603) - mean (201ms) : 196, 206
master - mean (200ms) : 195, 206
section Bailout
This PR (8603) - mean (205ms) : 201, 209
master - mean (204ms) : 198, 210
section CallTarget+Inlining+NGEN
This PR (8603) - mean (1,204ms) : 1162, 1246
master - mean (1,204ms) : 1157, 1251
HttpMessageHandler (.NET Core 3.1)gantt
title Execution time (ms) HttpMessageHandler (.NET Core 3.1)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8603) - mean (291ms) : 283, 299
master - mean (288ms) : 279, 297
section Bailout
This PR (8603) - mean (291ms) : 284, 298
master - mean (289ms) : 280, 297
section CallTarget+Inlining+NGEN
This PR (8603) - mean (968ms) : 950, 986
master - mean (968ms) : 949, 988
HttpMessageHandler (.NET 6)gantt
title Execution time (ms) HttpMessageHandler (.NET 6)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8603) - mean (284ms) : 273, 295
master - mean (281ms) : 277, 286
section Bailout
This PR (8603) - mean (282ms) : 274, 290
master - mean (281ms) : 275, 288
section CallTarget+Inlining+NGEN
This PR (8603) - mean (1,162ms) : 1118, 1206
master - mean (1,163ms) : 1127, 1199
HttpMessageHandler (.NET 8)gantt
title Execution time (ms) HttpMessageHandler (.NET 8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8603) - mean (280ms) : 273, 286
master - mean (281ms) : 274, 287
section Bailout
This PR (8603) - mean (281ms) : 275, 287
master - mean (281ms) : 274, 287
section CallTarget+Inlining+NGEN
This PR (8603) - mean (1,041ms) : 995, 1087
master - mean (1,041ms) : 1001, 1080
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
3b4bc30 to
e8b4868
Compare
There was a problem hiding this comment.
Pull request overview
This PR improves Dynamic Instrumentation line-probe resolution feedback by reporting certain retryable “unbound” resolution failures as backend ERROR statuses (with stable error keys for deduplication), while still keeping those probes retryable so they can bind later when additional assemblies load. It also adjusts probe-status polling to avoid replaying explicitly pushed statuses, and adds test coverage for the new status transitions/deduplication behavior.
Changes:
- Add retryable error reporting metadata to
LineProbeResolveResult(stable error key/details +ReportErrorflag) and enhance source-path mismatch diagnostics. - Update
DynamicInstrumentationto (a) report retryable mismatch failures asERRORwhile keeping probes in the retry set, (b) stop retrying terminal resolver errors, and (c) deduplicate repeated retryable error reports by stable error key. - Update
ProbeStatusPollerbehavior to avoid replaying explicitly pushed statuses during poll cycles; add/extend unit and integration tests for these transitions.
Reviewed changes
Copilot reviewed 7 out of 7 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| tracer/test/Datadog.Trace.Tests/Debugger/ProbeStatusSinkTests.cs | Adds coverage to ensure explicit ERROR statuses aren’t replayed during polling. |
| tracer/test/Datadog.Trace.Tests/Debugger/DynamicInstrumentationTests.cs | Adds unit tests for retryable line-probe error reporting, deduplication, and retry/terminal behavior. |
| tracer/test/Datadog.Trace.Debugger.IntegrationTests/LineProbeResolverTest.cs | Updates/extends integration assertions for retryable mismatch errors and stable key/details payloads. |
| tracer/src/Datadog.Trace/Debugger/ProbeStatuses/ProbeStatusPoller.cs | Stops poll cycles from re-emitting explicit statuses by only polling fetchable (default) probes. |
| tracer/src/Datadog.Trace/Debugger/Models/LineProbeResolveResult.cs | Extends resolve result with stable error key/details and a ReportError signal. |
| tracer/src/Datadog.Trace/Debugger/LineProbeResolver.cs | Produces stable mismatch error keys/details and builds richer mismatch diagnostics messages. |
| tracer/src/Datadog.Trace/Debugger/DynamicInstrumentation.cs | Reports retryable mismatch failures as ERROR (deduped), keeps retry set for non-terminal unbound, stops retrying terminal errors, and adds an injectable native instrumentation delegate for testing. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
31d4d67 to
a1b0c67
Compare
Report retryable source-path mismatches as backend errors while keeping line probes eligible for later binding. Co-authored-by: Cursor <[email protected]>
a1b0c67 to
09ae91f
Compare
Summary of changes
ERRORstatuses with actionable fallback diagnostics.Reason for change
Implementation details
LineProbeResolveResult.ReportErrorto separate retryability from backend status reporting.DynamicInstrumentationcan deduplicate by failure category while still rendering detailed messages.DynamicInstrumentationreportsUnbound + ReportErrorasERROR, keeps those probes retryable, and only reports again when the stable error key changes.Errorresults are reported asERRORand removed from retry tracking.ProbeStatusPollerdrops explicit status updates after they are sent so poll cycles do not replay them.Test coverage
LineProbeResolverTestcoverage for source-file mismatch error keys/details.DynamicInstrumentationTestscoverage for retryable line-probe errors, deduplication when only diagnostic counts change, and reporting again when the stable error key changes.ProbeStatusSinkTestscoverage to ensure explicit error statuses are not replayed on poll.