Skip to content

Conversation

@bouwkast
Copy link
Collaborator

@bouwkast bouwkast commented Oct 29, 2025

Summary of changes

Migrates Postgres/Npgsql integration tests from docker-compose to TestContainers.
Disposes / spins down TestContainers after their tests run.

Reason for change

CI is constantly hitting docker issues which seems to be stemming from how many various containers we are running.
This implements the disposal logic for TestContainers when their tests are finished.
Swapped NpgSql/Postgres to be TestContainers as I thought it would be a good simple test, but it was a pain due to the various IAST tests that seemingly use it 🤷

Implementation details

Test coverage

Other details

Note: generated /assisted with Claude Code

@bouwkast bouwkast added the AI Generated Largely based on code generated by an AI or LLM. This label is the same across all dd-trace-* repos label Oct 29, 2025
@bouwkast
Copy link
Collaborator Author

@codex review

Copy link

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

ℹ️ 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".

@bouwkast
Copy link
Collaborator Author

@codex review

Copy link

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

ℹ️ 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".

Comment on lines 1320 to 1335
SetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", "Development");
SetEnvironmentVariable(ConfigurationKeys.AppSec.StackTraceEnabled, "false");
UseNativeLibraryAlpineWorkaround();

if (postgresFixture != null)
{
ConfigureContainers(postgresFixture);
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Postgres Testcontainer never configured in AspNetCore5 IAST tests

As with the .NET Core 2 suite, the new constructor only configures Postgres when a fixture instance is supplied, but the legacy overload at lines 1311‑1313 still calls the new constructor with null and derived classes were left unchanged. After removing Postgres from docker-compose.yml, the tests spin up a Postgres Testcontainer yet the application keeps the default localhost:5432 settings, so database-dependent IAST tests cannot connect. Inject the PostgresFixture into derived constructors and forward it to ConfigureContainers.

Useful? React with 👍 / 👎.

@pr-commenter
Copy link

pr-commenter bot commented Oct 29, 2025

Benchmarks

Benchmarks Report for benchmark platform 🐌

Benchmarks for #7741 compared to master:

  • 1 benchmarks are faster, with geometric mean 1.383
  • 1 benchmarks are slower, with geometric mean 2.472
  • 7 benchmarks have fewer allocations
  • 6 benchmarks have more allocations

The following thresholds were used for comparing the benchmark speeds:

  • Mann–Whitney U test with statistical test for significance of 5%
  • Only results indicating a difference greater than 10% and 0.3 ns are considered.

Allocation changes below 0.5% are ignored.

Benchmark details

Benchmarks.Trace.ActivityBenchmark - Same speed ✔️ More allocations ⚠️

More allocations ⚠️ in #7741

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.ActivityBenchmark.StartStopWithChild‑net6.0 5.5 KB 5.53 KB 35 B 0.64%

Fewer allocations 🎉 in #7741

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.ActivityBenchmark.StartStopWithChild‑net472 6.11 KB 6.07 KB -33 B -0.54%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master StartStopWithChild net6.0 11μs 38.3ns 148ns 0 0 0 5.5 KB
master StartStopWithChild netcoreapp3.1 14.2μs 57.7ns 216ns 0 0 0 5.68 KB
master StartStopWithChild net472 21.9μs 122ns 806ns 0.887 0.222 0 6.11 KB
#7741 StartStopWithChild net6.0 10.4μs 58.4ns 379ns 0 0 0 5.53 KB
#7741 StartStopWithChild netcoreapp3.1 13.9μs 71.3ns 319ns 0 0 0 5.7 KB
#7741 StartStopWithChild net472 21.5μs 119ns 743ns 1.05 0.349 0.116 6.07 KB
Benchmarks.Trace.AgentWriterBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master WriteAndFlushEnrichedTraces net6.0 959μs 139ns 502ns 0 0 0 2.71 KB
master WriteAndFlushEnrichedTraces netcoreapp3.1 1.03ms 84.8ns 306ns 0 0 0 2.7 KB
master WriteAndFlushEnrichedTraces net472 1.2ms 933ns 3.61μs 0 0 0 3.31 KB
#7741 WriteAndFlushEnrichedTraces net6.0 930μs 185ns 718ns 0 0 0 2.7 KB
#7741 WriteAndFlushEnrichedTraces netcoreapp3.1 1.02ms 211ns 789ns 0 0 0 2.7 KB
#7741 WriteAndFlushEnrichedTraces net472 1.2ms 436ns 1.69μs 0 0 0 3.31 KB
Benchmarks.Trace.Asm.AppSecBodyBenchmark - Faster 🎉 Same allocations ✔️

Faster 🎉 in #7741

Benchmark base/diff Base Median (ns) Diff Median (ns) Modality
Benchmarks.Trace.Asm.AppSecBodyBenchmark.ObjectExtractorSimpleBody‑net472 1.383 410.45 296.70

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master AllCycleSimpleBody net6.0 N/A N/A N/A NaN NaN NaN 0 b
master AllCycleSimpleBody netcoreapp3.1 N/A N/A N/A NaN NaN NaN 0 b
master AllCycleSimpleBody net472 N/A N/A N/A NaN NaN NaN 0 b
master AllCycleMoreComplexBody net6.0 N/A N/A N/A NaN NaN NaN 0 b
master AllCycleMoreComplexBody netcoreapp3.1 N/A N/A N/A NaN NaN NaN 0 b
master AllCycleMoreComplexBody net472 N/A N/A N/A NaN NaN NaN 0 b
master ObjectExtractorSimpleBody net6.0 323ns 1.64ns 8.34ns 0 0 0 280 B
master ObjectExtractorSimpleBody netcoreapp3.1 398ns 2.08ns 9.97ns 0 0 0 272 B
master ObjectExtractorSimpleBody net472 410ns 0.0654ns 0.245ns 0.0433 0 0 281 B
master ObjectExtractorMoreComplexBody net6.0 6.29μs 31.2ns 136ns 0 0 0 3.78 KB
master ObjectExtractorMoreComplexBody netcoreapp3.1 7.72μs 35.1ns 140ns 0 0 0 3.69 KB
master ObjectExtractorMoreComplexBody net472 6.64μs 2.57ns 9.25ns 0.6 0 0 3.8 KB
#7741 AllCycleSimpleBody net6.0 N/A N/A N/A NaN NaN NaN 0 b
#7741 AllCycleSimpleBody netcoreapp3.1 N/A N/A N/A NaN NaN NaN 0 b
#7741 AllCycleSimpleBody net472 N/A N/A N/A NaN NaN NaN 0 b
#7741 AllCycleMoreComplexBody net6.0 N/A N/A N/A NaN NaN NaN 0 b
#7741 AllCycleMoreComplexBody netcoreapp3.1 N/A N/A N/A NaN NaN NaN 0 b
#7741 AllCycleMoreComplexBody net472 N/A N/A N/A NaN NaN NaN 0 b
#7741 ObjectExtractorSimpleBody net6.0 329ns 0.208ns 0.807ns 0 0 0 280 B
#7741 ObjectExtractorSimpleBody netcoreapp3.1 406ns 1.97ns 8.36ns 0 0 0 272 B
#7741 ObjectExtractorSimpleBody net472 297ns 0.0836ns 0.324ns 0.0433 0 0 281 B
#7741 ObjectExtractorMoreComplexBody net6.0 6.26μs 28.9ns 112ns 0 0 0 3.78 KB
#7741 ObjectExtractorMoreComplexBody netcoreapp3.1 7.85μs 37.9ns 156ns 0 0 0 3.69 KB
#7741 ObjectExtractorMoreComplexBody net472 6.68μs 4.94ns 19.1ns 0.599 0 0 3.8 KB
Benchmarks.Trace.Asm.AppSecEncoderBenchmark - Same speed ✔️ Fewer allocations 🎉

Fewer allocations 🎉 in #7741

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.Asm.AppSecEncoderBenchmark.EncodeLegacyArgs‑net472 2.17 KB 2.16 KB -13 B -0.60%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EncodeArgs net6.0 78.4μs 229ns 889ns 0 0 0 32.4 KB
master EncodeArgs netcoreapp3.1 97.6μs 10.1ns 36.5ns 0 0 0 32.4 KB
master EncodeArgs net472 109μs 15.3ns 57.2ns 4.91 0 0 32.51 KB
master EncodeLegacyArgs net6.0 143μs 14.1ns 54.5ns 0 0 0 2.15 KB
master EncodeLegacyArgs netcoreapp3.1 200μs 218ns 755ns 0 0 0 2.14 KB
master EncodeLegacyArgs net472 264μs 20.9ns 75.2ns 0 0 0 2.17 KB
#7741 EncodeArgs net6.0 76.9μs 320ns 1.24μs 0 0 0 32.4 KB
#7741 EncodeArgs netcoreapp3.1 97.9μs 235ns 909ns 0 0 0 32.4 KB
#7741 EncodeArgs net472 110μs 16.4ns 63.5ns 4.96 0 0 32.51 KB
#7741 EncodeLegacyArgs net6.0 143μs 209ns 809ns 0 0 0 2.15 KB
#7741 EncodeLegacyArgs netcoreapp3.1 195μs 213ns 825ns 0 0 0 2.15 KB
#7741 EncodeLegacyArgs net472 265μs 334ns 1.29μs 0 0 0 2.16 KB
Benchmarks.Trace.Asm.AppSecWafBenchmark - Slower ⚠️ More allocations ⚠️

Slower ⚠️ in #7741

Benchmark diff/base Base Median (ns) Diff Median (ns) Modality
Benchmarks.Trace.Asm.AppSecWafBenchmark.RunWafRealisticBenchmarkWithAttack‑netcoreapp3.1 2.472 297,665.18 735,780.75

More allocations ⚠️ in #7741

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.Asm.AppSecWafBenchmark.RunWafRealisticBenchmarkWithAttack‑netcoreapp3.1 2.22 KB 2.47 KB 255 B 11.51%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master RunWafRealisticBenchmark net6.0 396μs 179ns 668ns 0 0 0 4.55 KB
master RunWafRealisticBenchmark netcoreapp3.1 848μs 5.27μs 52.5μs 0 0 0 4.48 KB
master RunWafRealisticBenchmark net472 433μs 274ns 1.06μs 0 0 0 4.66 KB
master RunWafRealisticBenchmarkWithAttack net6.0 292μs 35.9ns 139ns 0 0 0 2.24 KB
master RunWafRealisticBenchmarkWithAttack netcoreapp3.1 298μs 50.9ns 183ns 0 0 0 2.22 KB
master RunWafRealisticBenchmarkWithAttack net472 314μs 166ns 644ns 0 0 0 2.29 KB
#7741 RunWafRealisticBenchmark net6.0 392μs 68.9ns 258ns 0 0 0 4.55 KB
#7741 RunWafRealisticBenchmark netcoreapp3.1 853μs 4.45μs 23.5μs 0 0 0 4.48 KB
#7741 RunWafRealisticBenchmark net472 430μs 43ns 167ns 0 0 0 4.66 KB
#7741 RunWafRealisticBenchmarkWithAttack net6.0 283μs 128ns 481ns 0 0 0 2.24 KB
#7741 RunWafRealisticBenchmarkWithAttack netcoreapp3.1 729μs 3.71μs 16.6μs 0 0 0 2.47 KB
#7741 RunWafRealisticBenchmarkWithAttack net472 318μs 42.7ns 165ns 0 0 0 2.29 KB
Benchmarks.Trace.AspNetCoreBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master SendRequest net6.0 62.5μs 51.8ns 201ns 0 0 0 14.52 KB
master SendRequest netcoreapp3.1 71.5μs 164ns 615ns 0 0 0 17.42 KB
master SendRequest net472 0.00133ns 0.000929ns 0.0036ns 0 0 0 0 b
#7741 SendRequest net6.0 61.2μs 71.2ns 257ns 0 0 0 14.52 KB
#7741 SendRequest netcoreapp3.1 71.7μs 127ns 476ns 0 0 0 17.42 KB
#7741 SendRequest net472 0.00621ns 0.00181ns 0.00702ns 0 0 0 0 b
Benchmarks.Trace.CharSliceBenchmark - Same speed ✔️ More allocations ⚠️

More allocations ⚠️ in #7741

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.CharSliceBenchmark.OptimizedCharSlice‑net472 0 b 73 B 73 B
Benchmarks.Trace.CharSliceBenchmark.OptimizedCharSliceWithPool‑net472 0 b 47 B 47 B
Benchmarks.Trace.CharSliceBenchmark.OptimizedCharSliceWithPool‑net6.0 1 B 2 B 1 B 100.00%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master OriginalCharSlice net6.0 1.89ms 1.31μs 4.91μs 0 0 0 640 KB
master OriginalCharSlice netcoreapp3.1 2.13ms 3.53μs 13.7μs 0 0 0 640 KB
master OriginalCharSlice net472 2.56ms 161ns 624ns 100 0 0 641.95 KB
master OptimizedCharSlice net6.0 1.39ms 321ns 1.24μs 0 0 0 4 B
master OptimizedCharSlice netcoreapp3.1 1.87ms 320ns 1.24μs 0 0 0 1 B
master OptimizedCharSlice net472 1.89ms 332ns 1.29μs 0 0 0 0 b
master OptimizedCharSliceWithPool net6.0 879μs 31.7ns 123ns 0 0 0 1 B
master OptimizedCharSliceWithPool netcoreapp3.1 827μs 70.6ns 273ns 0 0 0 0 b
master OptimizedCharSliceWithPool net472 1.16ms 90.5ns 351ns 0 0 0 0 b
#7741 OriginalCharSlice net6.0 1.9ms 483ns 1.81μs 0 0 0 640.01 KB
#7741 OriginalCharSlice netcoreapp3.1 2.09ms 7.76μs 30μs 0 0 0 640 KB
#7741 OriginalCharSlice net472 2.79ms 231ns 893ns 100 0 0 641.95 KB
#7741 OptimizedCharSlice net6.0 1.41ms 452ns 1.75μs 0 0 0 4 B
#7741 OptimizedCharSlice netcoreapp3.1 1.69ms 618ns 2.31μs 0 0 0 1 B
#7741 OptimizedCharSlice net472 2.02ms 247ns 925ns 0 0 0 73 B
#7741 OptimizedCharSliceWithPool net6.0 842μs 35.9ns 139ns 0 0 0 2 B
#7741 OptimizedCharSliceWithPool netcoreapp3.1 808μs 52ns 201ns 0 0 0 0 b
#7741 OptimizedCharSliceWithPool net472 1.14ms 115ns 445ns 0 0 0 47 B
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark - Same speed ✔️ Fewer allocations 🎉

Fewer allocations 🎉 in #7741

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark.WriteAndFlushEnrichedTraces‑netcoreapp3.1 42.66 KB 42.16 KB -495 B -1.16%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master WriteAndFlushEnrichedTraces net6.0 640μs 3.41μs 18.7μs 0 0 0 41.56 KB
master WriteAndFlushEnrichedTraces netcoreapp3.1 792μs 4.58μs 39.6μs 0 0 0 42.66 KB
master WriteAndFlushEnrichedTraces net472 926μs 2.97μs 11.5μs 8.33 0 0 56.08 KB
#7741 WriteAndFlushEnrichedTraces net6.0 632μs 1.33μs 5.14μs 0 0 0 41.64 KB
#7741 WriteAndFlushEnrichedTraces netcoreapp3.1 724μs 3.67μs 17.2μs 0 0 0 42.16 KB
#7741 WriteAndFlushEnrichedTraces net472 900μs 2.87μs 11.1μs 8.33 0 0 56.25 KB
Benchmarks.Trace.DbCommandBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master ExecuteNonQuery net6.0 1.9μs 0.863ns 3.34ns 0 0 0 1.02 KB
master ExecuteNonQuery netcoreapp3.1 2.65μs 2.93ns 11.3ns 0 0 0 1.02 KB
master ExecuteNonQuery net472 2.85μs 4.01ns 15ns 0.143 0.0143 0 987 B
#7741 ExecuteNonQuery net6.0 1.9μs 9.98ns 50.9ns 0 0 0 1.02 KB
#7741 ExecuteNonQuery netcoreapp3.1 2.83μs 8.76ns 33.9ns 0 0 0 1.02 KB
#7741 ExecuteNonQuery net472 2.86μs 3.32ns 11.5ns 0.143 0.0143 0 987 B
Benchmarks.Trace.ElasticsearchBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master CallElasticsearch net6.0 1.66μs 8.69ns 42.6ns 0 0 0 1.03 KB
master CallElasticsearch netcoreapp3.1 2.17μs 11ns 52.7ns 0 0 0 1.03 KB
master CallElasticsearch net472 3.59μs 2.25ns 8.73ns 0.163 0 0 1.04 KB
master CallElasticsearchAsync net6.0 1.81μs 7.58ns 28.4ns 0 0 0 1.01 KB
master CallElasticsearchAsync netcoreapp3.1 2.43μs 11.9ns 53.3ns 0 0 0 1.08 KB
master CallElasticsearchAsync net472 3.65μs 4.9ns 19ns 0.164 0 0 1.1 KB
#7741 CallElasticsearch net6.0 1.67μs 8.38ns 38.4ns 0 0 0 1.03 KB
#7741 CallElasticsearch netcoreapp3.1 2.25μs 1.61ns 6.01ns 0 0 0 1.03 KB
#7741 CallElasticsearch net472 3.69μs 0.873ns 3.02ns 0.166 0 0 1.04 KB
#7741 CallElasticsearchAsync net6.0 1.84μs 9.65ns 46.3ns 0 0 0 1.01 KB
#7741 CallElasticsearchAsync netcoreapp3.1 2.31μs 11.5ns 50ns 0 0 0 1.08 KB
#7741 CallElasticsearchAsync net472 3.63μs 2.06ns 7.99ns 0.163 0 0 1.1 KB
Benchmarks.Trace.GraphQLBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master ExecuteAsync net6.0 1.91μs 2.98ns 10.7ns 0 0 0 952 B
master ExecuteAsync netcoreapp3.1 2.45μs 5.96ns 23.1ns 0 0 0 952 B
master ExecuteAsync net472 2.58μs 2.37ns 9.17ns 0.142 0 0 915 B
#7741 ExecuteAsync net6.0 1.89μs 0.359ns 1.34ns 0 0 0 952 B
#7741 ExecuteAsync netcoreapp3.1 2.48μs 9.4ns 36.4ns 0 0 0 952 B
#7741 ExecuteAsync net472 2.54μs 0.921ns 3.19ns 0.141 0 0 915 B
Benchmarks.Trace.HttpClientBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master SendAsync net6.0 6.74μs 20.9ns 78.1ns 0 0 0 2.36 KB
master SendAsync netcoreapp3.1 8.95μs 32.1ns 124ns 0 0 0 2.9 KB
master SendAsync net472 12.6μs 14.7ns 55.1ns 0.442 0 0 3.18 KB
#7741 SendAsync net6.0 6.88μs 5.71ns 22.1ns 0 0 0 2.36 KB
#7741 SendAsync netcoreapp3.1 8.64μs 14.7ns 53.1ns 0 0 0 2.9 KB
#7741 SendAsync net472 12.5μs 11.1ns 43.1ns 0.497 0 0 3.18 KB
Benchmarks.Trace.Iast.StringAspectsBenchmark - Same speed ✔️ More allocations ⚠️

More allocations ⚠️ in #7741

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatBenchmark‑netcoreapp3.1 43.38 KB 44.19 KB 816 B 1.88%

Fewer allocations 🎉 in #7741

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatBenchmark‑net6.0 43.78 KB 43.34 KB -440 B -1.01%
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatAspectBenchmark‑net472 286.72 KB 278.53 KB -8.19 KB -2.86%
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatAspectBenchmark‑net6.0 274.4 KB 256.82 KB -17.58 KB -6.41%
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatAspectBenchmark‑netcoreapp3.1 273.49 KB 255.01 KB -18.48 KB -6.76%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master StringConcatBenchmark net6.0 44.9μs 253ns 1.56μs 0 0 0 43.78 KB
master StringConcatBenchmark netcoreapp3.1 46.5μs 171ns 1.09μs 0 0 0 43.38 KB
master StringConcatBenchmark net472 57.1μs 272ns 1.12μs 0 0 0 57.34 KB
master StringConcatAspectBenchmark net6.0 474μs 2.18μs 8.18μs 0 0 0 274.4 KB
master StringConcatAspectBenchmark netcoreapp3.1 541μs 2.56μs 9.91μs 0 0 0 273.49 KB
master StringConcatAspectBenchmark net472 397μs 1.97μs 8.81μs 0 0 0 286.72 KB
#7741 StringConcatBenchmark net6.0 46.7μs 408ns 3.78μs 0 0 0 43.34 KB
#7741 StringConcatBenchmark netcoreapp3.1 50.8μs 297ns 2.49μs 0 0 0 44.19 KB
#7741 StringConcatBenchmark net472 57.5μs 274ns 1.06μs 0 0 0 57.34 KB
#7741 StringConcatAspectBenchmark net6.0 462μs 2.24μs 9.24μs 0 0 0 256.82 KB
#7741 StringConcatAspectBenchmark netcoreapp3.1 486μs 1.19μs 4.29μs 0 0 0 255.01 KB
#7741 StringConcatAspectBenchmark net472 407μs 2.18μs 14.2μs 0 0 0 278.53 KB
Benchmarks.Trace.ILoggerBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EnrichedLog net6.0 2.67μs 12.5ns 49.9ns 0 0 0 1.7 KB
master EnrichedLog netcoreapp3.1 3.61μs 3.42ns 13.2ns 0 0 0 1.7 KB
master EnrichedLog net472 3.9μs 2.84ns 11ns 0.254 0 0 1.64 KB
#7741 EnrichedLog net6.0 2.66μs 1.11ns 4.15ns 0 0 0 1.7 KB
#7741 EnrichedLog netcoreapp3.1 3.61μs 17.2ns 66.4ns 0 0 0 1.7 KB
#7741 EnrichedLog net472 3.83μs 2.42ns 8.38ns 0.249 0 0 1.64 KB
Benchmarks.Trace.Log4netBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EnrichedLog net6.0 126μs 620ns 2.56μs 0 0 0 4.31 KB
master EnrichedLog netcoreapp3.1 129μs 204ns 764ns 0 0 0 4.31 KB
master EnrichedLog net472 168μs 93.4ns 362ns 0 0 0 4.52 KB
#7741 EnrichedLog net6.0 124μs 324ns 1.26μs 0 0 0 4.31 KB
#7741 EnrichedLog netcoreapp3.1 127μs 98.1ns 340ns 0 0 0 4.31 KB
#7741 EnrichedLog net472 173μs 370ns 1.43μs 0 0 0 4.52 KB
Benchmarks.Trace.NLogBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EnrichedLog net6.0 4.99μs 5.81ns 22.5ns 0 0 0 2.26 KB
master EnrichedLog netcoreapp3.1 7.04μs 9.76ns 37.8ns 0 0 0 2.26 KB
master EnrichedLog net472 7.51μs 6.12ns 23.7ns 0.299 0 0 2.08 KB
#7741 EnrichedLog net6.0 4.93μs 13.1ns 50.9ns 0 0 0 2.26 KB
#7741 EnrichedLog netcoreapp3.1 6.84μs 13.5ns 48.8ns 0 0 0 2.26 KB
#7741 EnrichedLog net472 7.67μs 6.22ns 24.1ns 0.306 0 0 2.08 KB
Benchmarks.Trace.RedisBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master SendReceive net6.0 2μs 9.15ns 36.6ns 0 0 0 1.2 KB
master SendReceive netcoreapp3.1 2.57μs 10.4ns 39ns 0 0 0 1.2 KB
master SendReceive net472 2.97μs 1.79ns 6.94ns 0.178 0 0 1.2 KB
#7741 SendReceive net6.0 2.01μs 8.61ns 33.4ns 0 0 0 1.2 KB
#7741 SendReceive netcoreapp3.1 2.67μs 13.7ns 64.3ns 0 0 0 1.2 KB
#7741 SendReceive net472 3.14μs 4.33ns 16.8ns 0.187 0 0 1.2 KB
Benchmarks.Trace.SerilogBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EnrichedLog net6.0 4.32μs 3.34ns 12.1ns 0 0 0 1.58 KB
master EnrichedLog netcoreapp3.1 5.69μs 8.52ns 33ns 0 0 0 1.63 KB
master EnrichedLog net472 6.55μs 6.27ns 24.3ns 0.293 0 0 2.03 KB
#7741 EnrichedLog net6.0 4.3μs 14ns 54.2ns 0 0 0 1.58 KB
#7741 EnrichedLog netcoreapp3.1 5.68μs 14.7ns 56.9ns 0 0 0 1.63 KB
#7741 EnrichedLog net472 6.58μs 5.95ns 23ns 0.295 0 0 2.03 KB
Benchmarks.Trace.SpanBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master StartFinishSpan net6.0 776ns 0.328ns 1.27ns 0 0 0 576 B
master StartFinishSpan netcoreapp3.1 980ns 4.26ns 16.5ns 0 0 0 576 B
master StartFinishSpan net472 956ns 0.101ns 0.391ns 0.0912 0 0 578 B
master StartFinishScope net6.0 911ns 4.19ns 15.7ns 0 0 0 696 B
master StartFinishScope netcoreapp3.1 1.19μs 5.85ns 23.4ns 0 0 0 696 B
master StartFinishScope net472 1.14μs 0.245ns 0.947ns 0.103 0 0 658 B
#7741 StartFinishSpan net6.0 775ns 4.01ns 20.1ns 0 0 0 576 B
#7741 StartFinishSpan netcoreapp3.1 968ns 5.05ns 25.2ns 0 0 0 576 B
#7741 StartFinishSpan net472 951ns 0.303ns 1.17ns 0.0903 0 0 578 B
#7741 StartFinishScope net6.0 957ns 4.37ns 17.5ns 0 0 0 696 B
#7741 StartFinishScope netcoreapp3.1 1.21μs 6.42ns 33.4ns 0 0 0 696 B
#7741 StartFinishScope net472 1.14μs 0.548ns 2.12ns 0.103 0 0 658 B
Benchmarks.Trace.TraceAnnotationsBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master RunOnMethodBegin net6.0 1.08μs 1.68ns 6.49ns 0 0 0 696 B
master RunOnMethodBegin netcoreapp3.1 1.39μs 6.1ns 23.6ns 0 0 0 696 B
master RunOnMethodBegin net472 1.44μs 2.44ns 9.45ns 0.101 0 0 658 B
#7741 RunOnMethodBegin net6.0 1.08μs 0.576ns 2.08ns 0 0 0 696 B
#7741 RunOnMethodBegin netcoreapp3.1 1.4μs 6.88ns 30.8ns 0 0 0 696 B
#7741 RunOnMethodBegin net472 1.44μs 0.89ns 3.45ns 0.101 0 0 658 B

@dd-trace-dotnet-ci-bot
Copy link

dd-trace-dotnet-ci-bot bot commented Oct 29, 2025

Execution-Time Benchmarks Report ⏱️

Execution-time results for samples comparing the following branches/commits:

Execution-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 shown in red. The following thresholds were used for comparing the execution times:

  • Welch test with statistical test for significance of 5%
  • Only results indicating a difference greater than 5% and 5 ms are considered.

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).

gantt
    title Execution time (ms) FakeDbCommand (.NET Framework 4.8) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Bailout
    This PR (7741) - mean (78ms)  : 75, 81
     .   : milestone, 78,
    master - mean (79ms)  : 76, 82
     .   : milestone, 79,

    section Baseline
    This PR (7741) - mean (74ms)  : 70, 79
     .   : milestone, 74,
    master - mean (75ms)  : 73, 78
     .   : milestone, 75,

    section CallTarget+Inlining+NGEN
    This PR (7741) - mean (1,088ms)  : 1034, 1143
     .   : milestone, 1088,
    master - mean (1,104ms)  : 1052, 1155
     .   : milestone, 1104,

Loading
gantt
    title Execution time (ms) FakeDbCommand (.NET Core 3.1) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Bailout
    This PR (7741) - mean (117ms)  : 112, 122
     .   : milestone, 117,
    master - mean (118ms)  : 114, 121
     .   : milestone, 118,

    section Baseline
    This PR (7741) - mean (115ms)  : 112, 118
     .   : milestone, 115,
    master - mean (116ms)  : 112, 121
     .   : milestone, 116,

    section CallTarget+Inlining+NGEN
    This PR (7741) - mean (786ms)  : 760, 813
     .   : milestone, 786,
    master - mean (789ms)  : 757, 821
     .   : milestone, 789,

Loading
gantt
    title Execution time (ms) FakeDbCommand (.NET 6) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Bailout
    This PR (7741) - mean (104ms)  : 102, 107
     .   : milestone, 104,
    master - mean (104ms)  : 101, 107
     .   : milestone, 104,

    section Baseline
    This PR (7741) - mean (103ms)  : 100, 106
     .   : milestone, 103,
    master - mean (103ms)  : 100, 107
     .   : milestone, 103,

    section CallTarget+Inlining+NGEN
    This PR (7741) - mean (742ms)  : 713, 771
     .   : milestone, 742,
    master - mean (744ms)  : 718, 770
     .   : milestone, 744,

Loading
gantt
    title Execution time (ms) FakeDbCommand (.NET 8) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Bailout
    This PR (7741) - mean (103ms)  : 99, 106
     .   : milestone, 103,
    master - mean (105ms)  : 98, 112
     .   : milestone, 105,

    section Baseline
    This PR (7741) - mean (102ms)  : 98, 105
     .   : milestone, 102,
    master - mean (103ms)  : 98, 107
     .   : milestone, 103,

    section CallTarget+Inlining+NGEN
    This PR (7741) - mean (704ms)  : 683, 725
     .   : milestone, 704,
    master - mean (710ms)  : 693, 727
     .   : milestone, 710,

Loading
gantt
    title Execution time (ms) HttpMessageHandler (.NET Framework 4.8) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Bailout
    This PR (7741) - mean (198ms)  : 194, 201
     .   : milestone, 198,
    master - mean (196ms)  : 193, 199
     .   : milestone, 196,

    section Baseline
    This PR (7741) - mean (194ms)  : 190, 198
     .   : milestone, 194,
    master - mean (194ms)  : 190, 198
     .   : milestone, 194,

    section CallTarget+Inlining+NGEN
    This PR (7741) - mean (1,163ms)  : 1106, 1221
     .   : milestone, 1163,
    master - mean (1,161ms)  : 1110, 1212
     .   : milestone, 1161,

Loading
gantt
    title Execution time (ms) HttpMessageHandler (.NET Core 3.1) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Bailout
    This PR (7741) - mean (278ms)  : 272, 284
     .   : milestone, 278,
    master - mean (279ms)  : 274, 284
     .   : milestone, 279,

    section Baseline
    This PR (7741) - mean (277ms)  : 272, 282
     .   : milestone, 277,
    master - mean (279ms)  : 273, 285
     .   : milestone, 279,

    section CallTarget+Inlining+NGEN
    This PR (7741) - mean (950ms)  : 911, 990
     .   : milestone, 950,
    master - mean (956ms)  : 912, 1000
     .   : milestone, 956,

Loading
gantt
    title Execution time (ms) HttpMessageHandler (.NET 6) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Bailout
    This PR (7741) - mean (271ms)  : 265, 277
     .   : milestone, 271,
    master - mean (270ms)  : 266, 275
     .   : milestone, 270,

    section Baseline
    This PR (7741) - mean (273ms)  : 266, 281
     .   : milestone, 273,
    master - mean (270ms)  : 264, 276
     .   : milestone, 270,

    section CallTarget+Inlining+NGEN
    This PR (7741) - mean (935ms)  : 877, 993
     .   : milestone, 935,
    master - mean (928ms)  : 882, 973
     .   : milestone, 928,

Loading
gantt
    title Execution time (ms) HttpMessageHandler (.NET 8) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Bailout
    This PR (7741) - mean (271ms)  : 266, 276
     .   : milestone, 271,
    master - mean (271ms)  : 266, 277
     .   : milestone, 271,

    section Baseline
    This PR (7741) - mean (269ms)  : 265, 273
     .   : milestone, 269,
    master - mean (270ms)  : 266, 274
     .   : milestone, 270,

    section CallTarget+Inlining+NGEN
    This PR (7741) - mean (853ms)  : 835, 870
     .   : milestone, 853,
    master - mean (856ms)  : 839, 873
     .   : milestone, 856,

Loading

@datadog-official

This comment has been minimized.

@bouwkast bouwkast force-pushed the steven/test-containers branch from 6a417d8 to 41020d5 Compare October 30, 2025 18:58
- Implement ContainersRegistry with reference counting for container lifecycle management
- Create PostgresFixture using DotNet.Testcontainers library
- Add ContainersCollection for xUnit collection-level disposal
- Migrate NpgsqlCommandTests, DapperTests, and IAST tests to use PostgresFixture
- Remove postgres service from docker-compose.yml as it's now managed by TestContainers
- Update test scrubbers to handle TestContainers dynamic IP addresses

This improves test isolation and reduces dependency on docker-compose for integration tests.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
@bouwkast bouwkast force-pushed the steven/test-containers branch from 20e778f to 57dadbd Compare October 31, 2025 11:52
I think there may be race conditions if we reuse containers.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

AI Generated Largely based on code generated by an AI or LLM. This label is the same across all dd-trace-* repos

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants