[CI Visibility] Avoid oversized coverage IPC messages#8832
Conversation
Execution-Time Benchmarks Report ⏱️Execution-time results for samples comparing This PR (8832) 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 (8832) - mean (70ms) : 68, 72
master - mean (70ms) : 68, 73
section Bailout
This PR (8832) - mean (74ms) : 72, 75
master - mean (74ms) : 73, 76
section CallTarget+Inlining+NGEN
This PR (8832) - mean (1,080ms) : 1028, 1131
master - mean (1,083ms) : 1033, 1133
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 (8832) - mean (108ms) : 105, 111
master - mean (109ms) : 106, 113
section Bailout
This PR (8832) - mean (109ms) : 107, 111
master - mean (110ms) : 109, 112
section CallTarget+Inlining+NGEN
This PR (8832) - mean (777ms) : 754, 800
master - mean (774ms) : 754, 795
FakeDbCommand (.NET 6)gantt
title Execution time (ms) FakeDbCommand (.NET 6)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8832) - mean (96ms) : 94, 99
master - mean (97ms) : 94, 100
section Bailout
This PR (8832) - mean (97ms) : 95, 98
master - mean (98ms) : 96, 99
section CallTarget+Inlining+NGEN
This PR (8832) - mean (937ms) : 906, 969
master - mean (942ms) : 900, 984
FakeDbCommand (.NET 8)gantt
title Execution time (ms) FakeDbCommand (.NET 8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8832) - mean (99ms) : 95, 103
master - mean (95ms) : 92, 97
section Bailout
This PR (8832) - mean (98ms) : 94, 102
master - mean (96ms) : 94, 98
section CallTarget+Inlining+NGEN
This PR (8832) - mean (813ms) : 780, 846
master - mean (813ms) : 777, 849
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 (8832) - mean (201ms) : 195, 206
master - mean (205ms) : 200, 210
section Bailout
This PR (8832) - mean (205ms) : 201, 209
master - mean (209ms) : 204, 213
section CallTarget+Inlining+NGEN
This PR (8832) - mean (1,207ms) : 1172, 1242
master - mean (1,216ms) : 1169, 1264
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 (8832) - mean (288ms) : 283, 294
master - mean (293ms) : 285, 301
section Bailout
This PR (8832) - mean (289ms) : 283, 295
master - mean (295ms) : 288, 301
section CallTarget+Inlining+NGEN
This PR (8832) - mean (965ms) : 938, 992
master - mean (986ms) : 966, 1006
HttpMessageHandler (.NET 6)gantt
title Execution time (ms) HttpMessageHandler (.NET 6)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8832) - mean (284ms) : 278, 290
master - mean (288ms) : 282, 294
section Bailout
This PR (8832) - mean (283ms) : 279, 288
master - mean (287ms) : 282, 291
section CallTarget+Inlining+NGEN
This PR (8832) - mean (1,174ms) : 1141, 1207
master - mean (1,173ms) : 1138, 1208
HttpMessageHandler (.NET 8)gantt
title Execution time (ms) HttpMessageHandler (.NET 8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8832) - mean (282ms) : 275, 289
master - mean (283ms) : 274, 291
section Bailout
This PR (8832) - mean (283ms) : 276, 290
master - mean (283ms) : 277, 288
section CallTarget+Inlining+NGEN
This PR (8832) - mean (1,043ms) : 1001, 1086
master - mean (1,049ms) : 994, 1104
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
BenchmarksBenchmark execution time: 2026-06-26 10:31:39 Comparing candidate commit 0a02348 in PR branch Found 0 performance improvements and 0 performance regressions! Performance is the same for 72 metrics, 0 unstable metrics, 63 known flaky benchmarks, 63 flaky benchmarks without significant changes.
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 50d6bbfae2
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
andrewlock
left a comment
There was a problem hiding this comment.
LGTM, though I confess to only having a vague understanding of how all these bits fit together 😬
Summary of changes
SessionCodeCoverageReferenceMessageand a single-result lookup path inCoverageBackfillDataStore.TestSession, preserving fail-closed behavior only while referenced tool coverage remains unresolved.Reason for change
SessionCodeCoverageMessagecan include backfill validation dictionaries and superseded result ids. On large codebases, the serialized payload can exceed theCircularChannelbody limit and triggerCircularChannel.Writer: Message size exceeds maximum allowed size.(Example, Case)The full coverage payload is already persisted for the parent session fallback path, so the IPC channel only needs to notify the parent session which persisted result to load.
Implementation details
CoverageBackfillDataStore.TryReadCoverageIpcResult(...)reads one persisted result by session id, source, and result id, and rejects mismatched or invalid payloads.TestSessionhandlesSessionCodeCoverageReferenceMessage, records the resolved result through the existing arbitration path, and records an IPC failure marker if the reference cannot be resolved.TestSessiontracks unresolved coverage references by source and result id, so close-time persisted fallback recovery can clear a previously failed immediate reference read before publishing coverage.DotnetCommon.CreateSessionCodeCoverageIpcMessage(...)centralizes producer behavior:SessionCodeCoverageMessageas coverage IPC now also accept reference messages and resolve persisted results before asserting coverage values.TestSessionwould load instead of using the integration-test process run context.Test coverage
git diff --checkdotnet test tracer/test/Datadog.Trace.Tests/Datadog.Trace.Tests.csproj --configuration Release --framework net8.0 --filter "FullyQualifiedName~TestSessionCoverageTests.IpcCoverageReference"dotnet test tracer/test/Datadog.Trace.Tests/Datadog.Trace.Tests.csproj --configuration Release --framework net8.0 --filter "FullyQualifiedName~CoverageBackfillDataStoreTests.TryReadCoverageIpcResult|FullyQualifiedName~IpcTests.IpcClientCanSendCoverageResultReference|FullyQualifiedName~TestSessionCoverageTests.IpcCoverageReference|FullyQualifiedName~TestSessionCoverageTests.CloseProcessesCoverageReferenceDeliveredThroughRealIpc|FullyQualifiedName~TestSessionCoverageTests.CreateSessionCodeCoverageIpcMessage|FullyQualifiedName~TestSessionCoverageTests.TrySendSessionCodeCoverageIpcMessageRecordsFailureWhenMessageFactoryFailsClosed|FullyQualifiedName~ManagedVanguardStopIntegrationTests.SendsReferenceCoverageIpcMessageAndSessionPublishesPersistedMicrosoftCoverage"dotnet build tracer/test/Datadog.Trace.ClrProfiler.IntegrationTests/Datadog.Trace.ClrProfiler.IntegrationTests.csproj --configuration Release --framework net8.0integration_tests_linux: passedintegration_tests_arm64: passedOther details
I also attempted
dotnet test tracer/test/Datadog.Trace.ClrProfiler.IntegrationTests/Datadog.Trace.ClrProfiler.IntegrationTests.csproj --configuration Release --framework net8.0 --no-build --filter "FullyQualifiedName~Datadog.Trace.ClrProfiler.IntegrationTests.CI.TcpXUnitEvpTests.ItrCoverageBackfillSkippableDecisionMatrixMatchesJavaBehavior"locally. On macOS arm64 it failed before reaching the coverage-reference assertions because the sample produced no EVP requests, so the Linux CI matrix is the representative validation for this path.