Skip to content

[v3] Update behavior of header tags parsing (AIT-8600)#5438

Merged
andrewlock merged 5 commits into
v3-mainfrom
zach/v3/header-tags
May 2, 2024
Merged

[v3] Update behavior of header tags parsing (AIT-8600)#5438
andrewlock merged 5 commits into
v3-mainfrom
zach/v3/header-tags

Conversation

@zacharycmontoya

@zacharycmontoya zacharycmontoya commented Apr 12, 2024

Copy link
Copy Markdown
Contributor

Summary of changes

Updates the behavior of header tags parsing, which occurs in the tracer code when StringConfigurationSource.ParseCustomKeyValues is invoked with parameter allowOptionalMappings=true.

The new BREAKING behavior (again, limited to header tags parsing) is the following:

  • Input strings that end in a colon are now considered invalid
  • To create the key-value pair, the input string is split by the last : char in the string instead of the first one

Reason for change

This behavior will be breaking for some inputs, so it would be best to include this in a major version update.

Implementation details

Test coverage

Updated the unit tests and ran the in-progress build against the following system-tests test cases with success:

  • test_library_conf.py::Test_HeaderTags_Colon_Trailing
  • test_library_conf.py::Test_HeaderTags_Whitespace_Tag

As a result of the system-tests updates, .NET will pass all of the HeaderTags tests in test_library_conf.py

Other details

Fixes AIT-8600

@datadog-ddstaging

datadog-ddstaging Bot commented Apr 16, 2024

Copy link
Copy Markdown

Datadog Report

Branch report: zach/v3/header-tags
Commit report: 5da1d18
Test service: dd-trace-dotnet

✅ 0 Failed, 333033 Passed, 2297 Skipped, 48m 36.76s Wall Time

@andrewlock

andrewlock commented Apr 16, 2024

Copy link
Copy Markdown
Member

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.6.2) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Baseline
    This PR (5438) - mean (75ms)  : 66, 84
     .   : milestone, 75,
    master - mean (73ms)  : 65, 82
     .   : milestone, 73,

    section CallTarget+Inlining+NGEN
    This PR (5438) - mean (1,045ms)  : 1019, 1072
     .   : milestone, 1045,
    master - mean (1,026ms)  : 1008, 1044
     .   : milestone, 1026,

Loading
gantt
    title Execution time (ms) FakeDbCommand (.NET Core 3.1) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Baseline
    This PR (5438) - mean (110ms)  : 107, 113
     .   : milestone, 110,
    master - mean (110ms)  : 107, 114
     .   : milestone, 110,

    section CallTarget+Inlining+NGEN
    This PR (5438) - mean (762ms)  : 740, 785
     .   : milestone, 762,
    master - mean (749ms)  : 722, 776
     .   : milestone, 749,

Loading
gantt
    title Execution time (ms) FakeDbCommand (.NET 6) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Baseline
    This PR (5438) - mean (94ms)  : 91, 97
     .   : milestone, 94,
    master - mean (95ms)  : 92, 98
     .   : milestone, 95,

    section CallTarget+Inlining+NGEN
    This PR (5438) - mean (714ms)  : 691, 737
     .   : milestone, 714,
    master - mean (692ms)  : 669, 715
     .   : milestone, 692,

Loading
gantt
    title Execution time (ms) HttpMessageHandler (.NET Framework 4.6.2) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Baseline
    This PR (5438) - mean (191ms)  : 187, 194
     .   : milestone, 191,
    master - mean (191ms)  : 187, 194
     .   : milestone, 191,

    section CallTarget+Inlining+NGEN
    This PR (5438) - mean (1,120ms)  : 1092, 1147
     .   : milestone, 1120,
    master - mean (1,094ms)  : 1066, 1123
     .   : milestone, 1094,

Loading
gantt
    title Execution time (ms) HttpMessageHandler (.NET Core 3.1) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Baseline
    This PR (5438) - mean (275ms)  : 270, 281
     .   : milestone, 275,
    master - mean (276ms)  : 271, 281
     .   : milestone, 276,

    section CallTarget+Inlining+NGEN
    This PR (5438) - mean (902ms)  : 877, 928
     .   : milestone, 902,
    master - mean (884ms)  : 863, 905
     .   : milestone, 884,

Loading
gantt
    title Execution time (ms) HttpMessageHandler (.NET 6) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Baseline
    This PR (5438) - mean (265ms)  : 259, 270
     .   : milestone, 265,
    master - mean (265ms)  : 261, 269
     .   : milestone, 265,

    section CallTarget+Inlining+NGEN
    This PR (5438) - mean (897ms)  : 869, 926
     .   : milestone, 897,
    master - mean (876ms)  : 852, 901
     .   : milestone, 876,

Loading

@andrewlock

andrewlock commented Apr 16, 2024

Copy link
Copy Markdown
Member

Benchmarks Report for tracer 🐌

Benchmarks for #5438 compared to master:

  • 1 benchmarks are faster, with geometric mean 1.115
  • 2 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 ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master StartStopWithChild net6.0 8.5μs 43.3ns 198ns 0.0209 0.00834 0 7.56 KB
master StartStopWithChild netcoreapp3.1 10.7μs 58.6ns 321ns 0.0323 0.0108 0 7.65 KB
master StartStopWithChild net472 17μs 59.2ns 221ns 1.36 0.386 0.12 8.11 KB
#5438 StartStopWithChild net6.0 8.69μs 42.3ns 174ns 0.0217 0.00868 0 7.55 KB
#5438 StartStopWithChild netcoreapp3.1 10.9μs 58.1ns 296ns 0.0272 0.0109 0 7.65 KB
#5438 StartStopWithChild net472 17.4μs 50ns 180ns 1.36 0.372 0.115 8.1 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 460μs 191ns 715ns 0 0 0 2.7 KB
master WriteAndFlushEnrichedTraces netcoreapp3.1 622μs 568ns 2.2μs 0 0 0 2.7 KB
master WriteAndFlushEnrichedTraces net472 828μs 627ns 2.43μs 0.414 0 0 3.3 KB
#5438 WriteAndFlushEnrichedTraces net6.0 453μs 152ns 570ns 0 0 0 2.7 KB
#5438 WriteAndFlushEnrichedTraces netcoreapp3.1 629μs 123ns 461ns 0 0 0 2.7 KB
#5438 WriteAndFlushEnrichedTraces net472 837μs 398ns 1.54μs 0.417 0 0 3.3 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 169μs 175ns 655ns 0.168 0 0 18.49 KB
master SendRequest netcoreapp3.1 190μs 303ns 1.17μs 0.19 0 0 20.65 KB
master SendRequest net472 0.000447ns 0.000196ns 0.000758ns 0 0 0 0 b
#5438 SendRequest net6.0 170μs 107ns 401ns 0.256 0 0 18.49 KB
#5438 SendRequest netcoreapp3.1 190μs 342ns 1.32μs 0.19 0 0 20.65 KB
#5438 SendRequest net472 0.00141ns 0.000429ns 0.00166ns 0 0 0 0 b
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark - Same speed ✔️ More allocations ⚠️

More allocations ⚠️ in #5438

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark.WriteAndFlushEnrichedTraces‑net6.0 41.45 KB 41.75 KB 294 B 0.71%
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark.WriteAndFlushEnrichedTraces‑netcoreapp3.1 41.57 KB 41.86 KB 287 B 0.69%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master WriteAndFlushEnrichedTraces net6.0 549μs 980ns 3.8μs 0.546 0 0 41.45 KB
master WriteAndFlushEnrichedTraces netcoreapp3.1 660μs 1.25μs 4.51μs 0.332 0 0 41.57 KB
master WriteAndFlushEnrichedTraces net472 847μs 3.79μs 14.7μs 8.08 2.55 0.425 53.22 KB
#5438 WriteAndFlushEnrichedTraces net6.0 579μs 718ns 2.68μs 0.563 0 0 41.75 KB
#5438 WriteAndFlushEnrichedTraces netcoreapp3.1 653μs 1.51μs 5.86μs 0.326 0 0 41.86 KB
#5438 WriteAndFlushEnrichedTraces net472 863μs 4.17μs 18.2μs 8.13 2.57 0.428 53.27 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.14μs 0.764ns 2.96ns 0.0114 0 0 808 B
master ExecuteNonQuery netcoreapp3.1 1.51μs 0.688ns 2.66ns 0.0106 0 0 808 B
master ExecuteNonQuery net472 1.83μs 4.13ns 16ns 0.122 0 0 770 B
#5438 ExecuteNonQuery net6.0 1.19μs 1.1ns 4.25ns 0.0114 0 0 808 B
#5438 ExecuteNonQuery netcoreapp3.1 1.54μs 1.05ns 3.92ns 0.0108 0 0 808 B
#5438 ExecuteNonQuery net472 1.81μs 0.529ns 1.98ns 0.122 0 0 770 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.27μs 0.968ns 3.35ns 0.0146 0 0 1.03 KB
master CallElasticsearch netcoreapp3.1 1.59μs 1.64ns 6.13ns 0.0144 0 0 1.03 KB
master CallElasticsearch net472 2.45μs 1.74ns 6.74ns 0.165 0 0 1.04 KB
master CallElasticsearchAsync net6.0 1.38μs 0.613ns 2.29ns 0.0144 0 0 1.01 KB
master CallElasticsearchAsync netcoreapp3.1 1.72μs 0.858ns 3.21ns 0.0146 0 0 1.08 KB
master CallElasticsearchAsync net472 2.59μs 1.47ns 5.7ns 0.174 0 0 1.1 KB
#5438 CallElasticsearch net6.0 1.33μs 0.923ns 3.57ns 0.0142 0 0 1.03 KB
#5438 CallElasticsearch netcoreapp3.1 1.56μs 1.07ns 4ns 0.0132 0 0 1.03 KB
#5438 CallElasticsearch net472 2.61μs 1.19ns 4.28ns 0.166 0 0 1.04 KB
#5438 CallElasticsearchAsync net6.0 1.31μs 0.833ns 3.12ns 0.0139 0 0 1.01 KB
#5438 CallElasticsearchAsync netcoreapp3.1 1.78μs 0.88ns 3.29ns 0.0143 0 0 1.08 KB
#5438 CallElasticsearchAsync net472 2.59μs 1.34ns 5.02ns 0.174 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.3μs 0.692ns 2.68ns 0.013 0 0 952 B
master ExecuteAsync netcoreapp3.1 1.72μs 0.882ns 3.41ns 0.0127 0 0 952 B
master ExecuteAsync net472 1.77μs 1.11ns 4.31ns 0.145 0 0 915 B
#5438 ExecuteAsync net6.0 1.33μs 0.504ns 1.88ns 0.0134 0 0 952 B
#5438 ExecuteAsync netcoreapp3.1 1.64μs 2.23ns 8.33ns 0.0131 0 0 952 B
#5438 ExecuteAsync net472 1.87μs 0.942ns 3.65ns 0.145 0.000924 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 4.11μs 1.25ns 4.86ns 0.0309 0 0 2.27 KB
master SendAsync netcoreapp3.1 5.18μs 2.53ns 9.8ns 0.0365 0 0 2.81 KB
master SendAsync net472 7.92μs 1.9ns 6.85ns 0.504 0 0 3.18 KB
#5438 SendAsync net6.0 4.28μs 1.78ns 6.91ns 0.0321 0 0 2.27 KB
#5438 SendAsync netcoreapp3.1 5.08μs 2.71ns 10.5ns 0.0379 0 0 2.81 KB
#5438 SendAsync net472 7.7μs 3.36ns 13ns 0.504 0 0 3.18 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 1.55μs 1.03ns 3.84ns 0.0236 0 0 1.7 KB
master EnrichedLog netcoreapp3.1 2.31μs 2.8ns 10.8ns 0.0228 0 0 1.7 KB
master EnrichedLog net472 2.75μs 2.01ns 6.95ns 0.257 0 0 1.62 KB
#5438 EnrichedLog net6.0 1.56μs 0.838ns 3.24ns 0.0242 0 0 1.7 KB
#5438 EnrichedLog netcoreapp3.1 2.31μs 2.2ns 8.54ns 0.0226 0 0 1.7 KB
#5438 EnrichedLog net472 2.71μs 1.58ns 5.7ns 0.258 0 0 1.62 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 113μs 222ns 861ns 0.0565 0 0 4.28 KB
master EnrichedLog netcoreapp3.1 119μs 153ns 552ns 0 0 0 4.28 KB
master EnrichedLog net472 150μs 163ns 630ns 0.668 0.223 0 4.46 KB
#5438 EnrichedLog net6.0 112μs 190ns 734ns 0.056 0 0 4.28 KB
#5438 EnrichedLog netcoreapp3.1 119μs 203ns 785ns 0 0 0 4.28 KB
#5438 EnrichedLog net472 153μs 208ns 805ns 0.685 0.228 0 4.46 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 3.07μs 1.22ns 4.56ns 0.0321 0 0 2.25 KB
master EnrichedLog netcoreapp3.1 4.34μs 1.89ns 7.07ns 0.03 0 0 2.25 KB
master EnrichedLog net472 4.96μs 0.952ns 3.69ns 0.328 0 0 2.07 KB
#5438 EnrichedLog net6.0 2.96μs 0.872ns 3.26ns 0.0311 0 0 2.25 KB
#5438 EnrichedLog netcoreapp3.1 4.19μs 4.5ns 16.8ns 0.0292 0 0 2.25 KB
#5438 EnrichedLog net472 4.79μs 1.74ns 6.73ns 0.328 0 0 2.07 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 1.41μs 0.792ns 2.96ns 0.017 0 0 1.2 KB
master SendReceive netcoreapp3.1 1.79μs 2.24ns 8.69ns 0.0162 0 0 1.2 KB
master SendReceive net472 2.27μs 1.85ns 7.16ns 0.191 0 0 1.2 KB
#5438 SendReceive net6.0 1.55μs 1.04ns 4.02ns 0.017 0 0 1.2 KB
#5438 SendReceive netcoreapp3.1 1.94μs 1.13ns 4.23ns 0.0165 0 0 1.2 KB
#5438 SendReceive net472 2.28μs 3.88ns 15ns 0.191 0.00113 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 2.71μs 1.23ns 4.75ns 0.0217 0 0 1.6 KB
master EnrichedLog netcoreapp3.1 3.93μs 1.82ns 6.83ns 0.0215 0 0 1.65 KB
master EnrichedLog net472 4.38μs 1.64ns 5.92ns 0.322 0 0 2.04 KB
#5438 EnrichedLog net6.0 2.73μs 0.993ns 3.71ns 0.0217 0 0 1.6 KB
#5438 EnrichedLog netcoreapp3.1 4.08μs 1.86ns 7.19ns 0.0224 0 0 1.65 KB
#5438 EnrichedLog net472 4.5μs 1.56ns 5.84ns 0.323 0 0 2.04 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 542ns 0.209ns 0.781ns 0.00819 0 0 576 B
master StartFinishSpan netcoreapp3.1 736ns 0.46ns 1.59ns 0.00773 0 0 576 B
master StartFinishSpan net472 792ns 0.288ns 1.11ns 0.0916 0 0 578 B
master StartFinishScope net6.0 611ns 0.188ns 0.702ns 0.0098 0 0 696 B
master StartFinishScope netcoreapp3.1 795ns 0.314ns 1.18ns 0.00943 0 0 696 B
master StartFinishScope net472 997ns 0.638ns 2.47ns 0.104 0 0 658 B
#5438 StartFinishSpan net6.0 527ns 0.208ns 0.778ns 0.00804 0 0 576 B
#5438 StartFinishSpan netcoreapp3.1 682ns 0.53ns 2.05ns 0.00787 0 0 576 B
#5438 StartFinishSpan net472 841ns 0.398ns 1.54ns 0.0915 0 0 578 B
#5438 StartFinishScope net6.0 598ns 0.223ns 0.835ns 0.00964 0 0 696 B
#5438 StartFinishScope netcoreapp3.1 865ns 2.47ns 9.24ns 0.00944 0 0 696 B
#5438 StartFinishScope net472 941ns 0.442ns 1.71ns 0.104 0 0 658 B
Benchmarks.Trace.TraceAnnotationsBenchmark - Faster 🎉 Same allocations ✔️

Faster 🎉 in #5438

Benchmark base/diff Base Median (ns) Diff Median (ns) Modality
Benchmarks.Trace.TraceAnnotationsBenchmark.RunOnMethodBegin‑net6.0 1.115 692.11 621.00

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master RunOnMethodBegin net6.0 692ns 0.118ns 0.425ns 0.00975 0 0 696 B
master RunOnMethodBegin netcoreapp3.1 935ns 2.12ns 8.21ns 0.00952 0 0 696 B
master RunOnMethodBegin net472 1.15μs 0.409ns 1.58ns 0.104 0 0 658 B
#5438 RunOnMethodBegin net6.0 621ns 0.349ns 1.35ns 0.00972 0 0 696 B
#5438 RunOnMethodBegin netcoreapp3.1 970ns 0.366ns 1.42ns 0.00926 0 0 696 B
#5438 RunOnMethodBegin net472 1.12μs 0.511ns 1.98ns 0.104 0 0 658 B

@andrewlock

andrewlock commented Apr 16, 2024

Copy link
Copy Markdown
Member

Benchmarks Report for appsec 🐌

Benchmarks for #5438 compared to master:

  • All benchmarks have the same speed
  • 2 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.Asm.AppSecBodyBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master AllCycleSimpleBody net6.0 71.4μs 101ns 390ns 0.0711 0 0 6 KB
master AllCycleSimpleBody netcoreapp3.1 62.8μs 78.5ns 304ns 0.0632 0 0 6.94 KB
master AllCycleSimpleBody net472 48.3μs 50.1ns 194ns 1.31 0 0 8.33 KB
master AllCycleMoreComplexBody net6.0 77.6μs 104ns 388ns 0.116 0 0 9.5 KB
master AllCycleMoreComplexBody netcoreapp3.1 69.7μs 73.8ns 286ns 0.139 0 0 10.36 KB
master AllCycleMoreComplexBody net472 55μs 58.9ns 228ns 1.86 0.0274 0 11.84 KB
master ObjectExtractorSimpleBody net6.0 135ns 0.0695ns 0.251ns 0.0039 0 0 280 B
master ObjectExtractorSimpleBody netcoreapp3.1 201ns 0.127ns 0.493ns 0.00368 0 0 272 B
master ObjectExtractorSimpleBody net472 170ns 0.106ns 0.395ns 0.0446 0 0 281 B
master ObjectExtractorMoreComplexBody net6.0 3.04μs 2.51ns 9.04ns 0.0533 0 0 3.78 KB
master ObjectExtractorMoreComplexBody netcoreapp3.1 3.99μs 2.86ns 11.1ns 0.0508 0 0 3.69 KB
master ObjectExtractorMoreComplexBody net472 3.82μs 1.87ns 7.01ns 0.602 0.00574 0 3.8 KB
#5438 AllCycleSimpleBody net6.0 72.4μs 113ns 436ns 0.0727 0 0 6 KB
#5438 AllCycleSimpleBody netcoreapp3.1 62.5μs 57.4ns 222ns 0.0926 0 0 6.94 KB
#5438 AllCycleSimpleBody net472 47.7μs 47.4ns 171ns 1.32 0 0 8.33 KB
#5438 AllCycleMoreComplexBody net6.0 79.7μs 124ns 482ns 0.118 0 0 9.5 KB
#5438 AllCycleMoreComplexBody netcoreapp3.1 68.4μs 116ns 450ns 0.136 0 0 10.36 KB
#5438 AllCycleMoreComplexBody net472 54.9μs 57.1ns 214ns 1.86 0.0277 0 11.84 KB
#5438 ObjectExtractorSimpleBody net6.0 147ns 0.151ns 0.564ns 0.00395 0 0 280 B
#5438 ObjectExtractorSimpleBody netcoreapp3.1 198ns 0.0845ns 0.293ns 0.00379 0 0 272 B
#5438 ObjectExtractorSimpleBody net472 166ns 0.12ns 0.466ns 0.0446 0 0 281 B
#5438 ObjectExtractorMoreComplexBody net6.0 3.03μs 3.58ns 13.4ns 0.0538 0 0 3.78 KB
#5438 ObjectExtractorMoreComplexBody netcoreapp3.1 3.97μs 1.98ns 7.4ns 0.0498 0 0 3.69 KB
#5438 ObjectExtractorMoreComplexBody net472 3.98μs 7.75ns 30ns 0.602 0.00598 0 3.8 KB
Benchmarks.Trace.Asm.AppSecEncoderBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EncodeArgs net6.0 40.7μs 111ns 415ns 0.443 0 0 32.4 KB
master EncodeArgs netcoreapp3.1 54.8μs 18.5ns 71.8ns 0.435 0 0 32.4 KB
master EncodeArgs net472 68.2μs 56.2ns 210ns 5.15 0.0678 0 32.5 KB
master EncodeLegacyArgs net6.0 75.5μs 411ns 2.47μs 0 0 0 2.14 KB
master EncodeLegacyArgs netcoreapp3.1 106μs 106ns 410ns 0 0 0 2.14 KB
master EncodeLegacyArgs net472 152μs 130ns 504ns 0.303 0 0 2.15 KB
#5438 EncodeArgs net6.0 40.3μs 21.4ns 82.8ns 0.443 0 0 32.4 KB
#5438 EncodeArgs netcoreapp3.1 55.1μs 15.8ns 61.3ns 0.44 0 0 32.4 KB
#5438 EncodeArgs net472 70.2μs 95.1ns 368ns 5.13 0.0698 0 32.5 KB
#5438 EncodeLegacyArgs net6.0 71.8μs 48.5ns 188ns 0.0381 0 0 2.14 KB
#5438 EncodeLegacyArgs netcoreapp3.1 105μs 365ns 1.42μs 0 0 0 2.14 KB
#5438 EncodeLegacyArgs net472 152μs 149ns 558ns 0.304 0 0 2.15 KB
Benchmarks.Trace.Asm.AppSecWafBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master RunWafRealisticBenchmark net6.0 187μs 139ns 540ns 0 0 0 2.32 KB
master RunWafRealisticBenchmark netcoreapp3.1 199μs 233ns 840ns 0 0 0 2.27 KB
master RunWafRealisticBenchmark net472 219μs 233ns 901ns 0.326 0 0 2.34 KB
master RunWafRealisticBenchmarkWithAttack net6.0 123μs 82.2ns 307ns 0 0 0 1.43 KB
master RunWafRealisticBenchmarkWithAttack netcoreapp3.1 131μs 119ns 446ns 0 0 0 1.42 KB
master RunWafRealisticBenchmarkWithAttack net472 144μs 50.9ns 197ns 0.215 0 0 1.45 KB
#5438 RunWafRealisticBenchmark net6.0 190μs 176ns 681ns 0 0 0 2.32 KB
#5438 RunWafRealisticBenchmark netcoreapp3.1 200μs 122ns 474ns 0 0 0 2.27 KB
#5438 RunWafRealisticBenchmark net472 217μs 120ns 464ns 0.326 0 0 2.34 KB
#5438 RunWafRealisticBenchmarkWithAttack net6.0 124μs 55.9ns 201ns 0 0 0 1.43 KB
#5438 RunWafRealisticBenchmarkWithAttack netcoreapp3.1 133μs 82.7ns 320ns 0 0 0 1.42 KB
#5438 RunWafRealisticBenchmarkWithAttack net472 143μs 113ns 437ns 0.214 0 0 1.45 KB
Benchmarks.Trace.Iast.StringAspectsBenchmark - Same speed ✔️ More allocations ⚠️

More allocations ⚠️ in #5438

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatAspectBenchmark‑netcoreapp3.1 201.65 KB 213.38 KB 11.74 KB 5.82%
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatBenchmark‑net472 59.39 KB 62.48 KB 3.09 KB 5.20%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master StringConcatBenchmark net6.0 62.1μs 730ns 7.15μs 0 0 0 43.44 KB
master StringConcatBenchmark netcoreapp3.1 52.7μs 144ns 718ns 0 0 0 42.64 KB
master StringConcatBenchmark net472 37.9μs 70.8ns 265ns 0 0 0 59.39 KB
master StringConcatAspectBenchmark net6.0 286μs 977ns 3.91μs 0 0 0 203.15 KB
master StringConcatAspectBenchmark netcoreapp3.1 315μs 1.23μs 6.53μs 0 0 0 201.65 KB
master StringConcatAspectBenchmark net472 223μs 1.74μs 16.1μs 0 0 0 221.18 KB
#5438 StringConcatBenchmark net6.0 59.9μs 691ns 6.87μs 0 0 0 43.44 KB
#5438 StringConcatBenchmark netcoreapp3.1 53.1μs 270ns 1.18μs 0 0 0 42.64 KB
#5438 StringConcatBenchmark net472 37.9μs 102ns 382ns 0 0 0 62.48 KB
#5438 StringConcatAspectBenchmark net6.0 284μs 1.16μs 5.92μs 0 0 0 203.02 KB
#5438 StringConcatAspectBenchmark netcoreapp3.1 327μs 1.47μs 7.05μs 0 0 0 213.38 KB
#5438 StringConcatAspectBenchmark net472 242μs 1.14μs 4.43μs 0 0 0 221.18 KB

@andrewlock

andrewlock commented Apr 16, 2024

Copy link
Copy Markdown
Member

Throughput/Crank Report ⚡

Throughput results for AspNetCoreSimpleController comparing the following branches/commits:

Cases where throughput results for the PR are worse than latest master (5% drop or greater), results are shown in red.

Note that these results are based on a single point-in-time result for each branch. For full results, see one of the many, many dashboards!

gantt
    title Throughput Linux x64 (Total requests) 
    dateFormat  X
    axisFormat %s
    section Baseline
    This PR (5438) (12.014M)   : 0, 12014447
    master (11.872M)   : 0, 11871853
    benchmarks/2.9.0 (11.789M)   : 0, 11788701

    section Automatic
    This PR (5438) (7.980M)   : 0, 7980244
    master (8.122M)   : 0, 8121974
    benchmarks/2.9.0 (8.425M)   : 0, 8424917

    section Trace stats
    master (8.406M)   : 0, 8405590

    section Manual
    master (10.271M)   : 0, 10270624

    section Manual + Automatic
    This PR (5438) (7.384M)   : 0, 7383847
    master (7.695M)   : 0, 7695217

Loading
gantt
    title Throughput Linux arm64 (Total requests) 
    dateFormat  X
    axisFormat %s
    section Baseline
    This PR (5438) (9.602M)   : 0, 9602262
    master (9.545M)   : 0, 9545003
    benchmarks/2.9.0 (9.662M)   : 0, 9661917

    section Automatic
    This PR (5438) (6.601M)   : 0, 6600926
    master (6.566M)   : 0, 6565524

    section Trace stats
    master (6.959M)   : 0, 6959490

    section Manual
    master (8.429M)   : 0, 8429188

    section Manual + Automatic
    This PR (5438) (6.201M)   : 0, 6201062
    master (6.070M)   : 0, 6070479

Loading
gantt
    title Throughput Windows x64 (Total requests) 
    dateFormat  X
    axisFormat %s
    section Baseline
    This PR (5438) (9.378M)   : 0, 9378121
    master (9.920M)   : 0, 9919790
    benchmarks/2.9.0 (10.112M)   : 0, 10112480

    section Automatic
    This PR (5438) (6.898M)   : 0, 6897873
    master (6.995M)   : 0, 6995276
    benchmarks/2.9.0 (7.493M)   : 0, 7492592

    section Trace stats
    master (7.366M)   : 0, 7365716

    section Manual
    master (8.548M)   : 0, 8547650

    section Manual + Automatic
    This PR (5438) (6.423M)   : 0, 6422662
    master (6.725M)   : 0, 6725243

Loading

@zacharycmontoya zacharycmontoya self-assigned this Apr 17, 2024
@zacharycmontoya
zacharycmontoya marked this pull request as ready for review April 17, 2024 16:17
@zacharycmontoya
zacharycmontoya requested a review from a team as a code owner April 17, 2024 16:17
@zacharycmontoya
zacharycmontoya requested review from a team as code owners April 17, 2024 16:33
@andrewlock andrewlock added area:tracer The core tracer library (Datadog.Trace, does not include OpenTracing, native code, or integrations) breaking-change labels Apr 18, 2024

@andrewlock andrewlock left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM, could you also update the migration doc? Not sure if need to update the "changes to settings" doc, or a general "changes to behaviour" section?

@andrewlock
andrewlock force-pushed the zach/v3/header-tags branch 3 times, most recently from 4bcd729 to 2d299eb Compare May 1, 2024 16:33
@andrewlock
andrewlock force-pushed the zach/v3/header-tags branch from 2d299eb to 5da1d18 Compare May 1, 2024 16:34
@andrewlock
andrewlock merged commit cafd56e into v3-main May 2, 2024
@andrewlock
andrewlock deleted the zach/v3/header-tags branch May 2, 2024 06:50
andrewlock added a commit that referenced this pull request May 24, 2024
* Update TracerSettingsTests to assert current HeaderTags behaviors

* BREAKING CHANGE

GetDictionary has some new behaviors when allowOptionalMappings is true, to reflect the true usage where this flag indicates whether we are parsing header tags or not. The new behaviors include:
- In this scenario, strings that end in a colon are now considered invalid
- In this scenario, the last colon in the  string is used to determine the key-value split, not the first colon

* Update tracer/src/Datadog.Trace/Configuration/ConfigurationSources/StringConfigurationSource.cs

Co-authored-by: Steven Bouwkamp <[email protected]>

* nit: update comment

* Add migration guide

---------

Co-authored-by: Andrew Lock <[email protected]>
Co-authored-by: Steven Bouwkamp <[email protected]>
andrewlock added a commit that referenced this pull request May 24, 2024
* Update TracerSettingsTests to assert current HeaderTags behaviors

* BREAKING CHANGE

GetDictionary has some new behaviors when allowOptionalMappings is true, to reflect the true usage where this flag indicates whether we are parsing header tags or not. The new behaviors include:
- In this scenario, strings that end in a colon are now considered invalid
- In this scenario, the last colon in the  string is used to determine the key-value split, not the first colon

* Update tracer/src/Datadog.Trace/Configuration/ConfigurationSources/StringConfigurationSource.cs

Co-authored-by: Steven Bouwkamp <[email protected]>

* nit: update comment

* Add migration guide

---------

Co-authored-by: Andrew Lock <[email protected]>
Co-authored-by: Steven Bouwkamp <[email protected]>
andrewlock added a commit that referenced this pull request May 30, 2024
* Update TracerSettingsTests to assert current HeaderTags behaviors

* BREAKING CHANGE

GetDictionary has some new behaviors when allowOptionalMappings is true, to reflect the true usage where this flag indicates whether we are parsing header tags or not. The new behaviors include:
- In this scenario, strings that end in a colon are now considered invalid
- In this scenario, the last colon in the  string is used to determine the key-value split, not the first colon

* Update tracer/src/Datadog.Trace/Configuration/ConfigurationSources/StringConfigurationSource.cs

Co-authored-by: Steven Bouwkamp <[email protected]>

* nit: update comment

* Add migration guide

---------

Co-authored-by: Andrew Lock <[email protected]>
Co-authored-by: Steven Bouwkamp <[email protected]>
andrewlock added a commit that referenced this pull request Jun 5, 2024
* Update TracerSettingsTests to assert current HeaderTags behaviors

* BREAKING CHANGE

GetDictionary has some new behaviors when allowOptionalMappings is true, to reflect the true usage where this flag indicates whether we are parsing header tags or not. The new behaviors include:
- In this scenario, strings that end in a colon are now considered invalid
- In this scenario, the last colon in the  string is used to determine the key-value split, not the first colon

* Update tracer/src/Datadog.Trace/Configuration/ConfigurationSources/StringConfigurationSource.cs

Co-authored-by: Steven Bouwkamp <[email protected]>

* nit: update comment

* Add migration guide

---------

Co-authored-by: Andrew Lock <[email protected]>
Co-authored-by: Steven Bouwkamp <[email protected]>
andrewlock added a commit that referenced this pull request Jun 12, 2024
* Update TracerSettingsTests to assert current HeaderTags behaviors

* BREAKING CHANGE

GetDictionary has some new behaviors when allowOptionalMappings is true, to reflect the true usage where this flag indicates whether we are parsing header tags or not. The new behaviors include:
- In this scenario, strings that end in a colon are now considered invalid
- In this scenario, the last colon in the  string is used to determine the key-value split, not the first colon

* Update tracer/src/Datadog.Trace/Configuration/ConfigurationSources/StringConfigurationSource.cs

Co-authored-by: Steven Bouwkamp <[email protected]>

* nit: update comment

* Add migration guide

---------

Co-authored-by: Andrew Lock <[email protected]>
Co-authored-by: Steven Bouwkamp <[email protected]>
andrewlock added a commit that referenced this pull request Jun 24, 2024
* Update TracerSettingsTests to assert current HeaderTags behaviors

* BREAKING CHANGE

GetDictionary has some new behaviors when allowOptionalMappings is true, to reflect the true usage where this flag indicates whether we are parsing header tags or not. The new behaviors include:
- In this scenario, strings that end in a colon are now considered invalid
- In this scenario, the last colon in the  string is used to determine the key-value split, not the first colon

* Update tracer/src/Datadog.Trace/Configuration/ConfigurationSources/StringConfigurationSource.cs

Co-authored-by: Steven Bouwkamp <[email protected]>

* nit: update comment

* Add migration guide

---------

Co-authored-by: Andrew Lock <[email protected]>
Co-authored-by: Steven Bouwkamp <[email protected]>
andrewlock added a commit that referenced this pull request Jun 26, 2024
* Update TracerSettingsTests to assert current HeaderTags behaviors

* BREAKING CHANGE

GetDictionary has some new behaviors when allowOptionalMappings is true, to reflect the true usage where this flag indicates whether we are parsing header tags or not. The new behaviors include:
- In this scenario, strings that end in a colon are now considered invalid
- In this scenario, the last colon in the  string is used to determine the key-value split, not the first colon

* Update tracer/src/Datadog.Trace/Configuration/ConfigurationSources/StringConfigurationSource.cs

Co-authored-by: Steven Bouwkamp <[email protected]>

* nit: update comment

* Add migration guide

---------

Co-authored-by: Andrew Lock <[email protected]>
Co-authored-by: Steven Bouwkamp <[email protected]>
andrewlock added a commit that referenced this pull request Jun 27, 2024
* Update TracerSettingsTests to assert current HeaderTags behaviors

* BREAKING CHANGE

GetDictionary has some new behaviors when allowOptionalMappings is true, to reflect the true usage where this flag indicates whether we are parsing header tags or not. The new behaviors include:
- In this scenario, strings that end in a colon are now considered invalid
- In this scenario, the last colon in the  string is used to determine the key-value split, not the first colon

* Update tracer/src/Datadog.Trace/Configuration/ConfigurationSources/StringConfigurationSource.cs

Co-authored-by: Steven Bouwkamp <[email protected]>

* nit: update comment

* Add migration guide

---------

Co-authored-by: Andrew Lock <[email protected]>
Co-authored-by: Steven Bouwkamp <[email protected]>
andrewlock added a commit that referenced this pull request Jul 1, 2024
* Update TracerSettingsTests to assert current HeaderTags behaviors

* BREAKING CHANGE

GetDictionary has some new behaviors when allowOptionalMappings is true, to reflect the true usage where this flag indicates whether we are parsing header tags or not. The new behaviors include:
- In this scenario, strings that end in a colon are now considered invalid
- In this scenario, the last colon in the  string is used to determine the key-value split, not the first colon

* Update tracer/src/Datadog.Trace/Configuration/ConfigurationSources/StringConfigurationSource.cs

Co-authored-by: Steven Bouwkamp <[email protected]>

* nit: update comment

* Add migration guide

---------

Co-authored-by: Andrew Lock <[email protected]>
Co-authored-by: Steven Bouwkamp <[email protected]>
andrewlock added a commit that referenced this pull request Jul 1, 2024
* Update TracerSettingsTests to assert current HeaderTags behaviors

* BREAKING CHANGE

GetDictionary has some new behaviors when allowOptionalMappings is true, to reflect the true usage where this flag indicates whether we are parsing header tags or not. The new behaviors include:
- In this scenario, strings that end in a colon are now considered invalid
- In this scenario, the last colon in the  string is used to determine the key-value split, not the first colon

* Update tracer/src/Datadog.Trace/Configuration/ConfigurationSources/StringConfigurationSource.cs

Co-authored-by: Steven Bouwkamp <[email protected]>

* nit: update comment

* Add migration guide

---------

Co-authored-by: Andrew Lock <[email protected]>
Co-authored-by: Steven Bouwkamp <[email protected]>
andrewlock added a commit that referenced this pull request Jul 2, 2024
* Update TracerSettingsTests to assert current HeaderTags behaviors

* BREAKING CHANGE

GetDictionary has some new behaviors when allowOptionalMappings is true, to reflect the true usage where this flag indicates whether we are parsing header tags or not. The new behaviors include:
- In this scenario, strings that end in a colon are now considered invalid
- In this scenario, the last colon in the  string is used to determine the key-value split, not the first colon

* Update tracer/src/Datadog.Trace/Configuration/ConfigurationSources/StringConfigurationSource.cs

Co-authored-by: Steven Bouwkamp <[email protected]>

* nit: update comment

* Add migration guide

---------

Co-authored-by: Andrew Lock <[email protected]>
Co-authored-by: Steven Bouwkamp <[email protected]>
andrewlock added a commit that referenced this pull request Jul 2, 2024
* Update TracerSettingsTests to assert current HeaderTags behaviors

* BREAKING CHANGE

GetDictionary has some new behaviors when allowOptionalMappings is true, to reflect the true usage where this flag indicates whether we are parsing header tags or not. The new behaviors include:
- In this scenario, strings that end in a colon are now considered invalid
- In this scenario, the last colon in the  string is used to determine the key-value split, not the first colon

* Update tracer/src/Datadog.Trace/Configuration/ConfigurationSources/StringConfigurationSource.cs

Co-authored-by: Steven Bouwkamp <[email protected]>

* nit: update comment

* Add migration guide

---------

Co-authored-by: Andrew Lock <[email protected]>
Co-authored-by: Steven Bouwkamp <[email protected]>
andrewlock added a commit that referenced this pull request Jul 2, 2024
* Update TracerSettingsTests to assert current HeaderTags behaviors

* BREAKING CHANGE

GetDictionary has some new behaviors when allowOptionalMappings is true, to reflect the true usage where this flag indicates whether we are parsing header tags or not. The new behaviors include:
- In this scenario, strings that end in a colon are now considered invalid
- In this scenario, the last colon in the  string is used to determine the key-value split, not the first colon

* Update tracer/src/Datadog.Trace/Configuration/ConfigurationSources/StringConfigurationSource.cs

Co-authored-by: Steven Bouwkamp <[email protected]>

* nit: update comment

* Add migration guide

---------

Co-authored-by: Andrew Lock <[email protected]>
Co-authored-by: Steven Bouwkamp <[email protected]>
andrewlock added a commit that referenced this pull request Jul 3, 2024
* Update TracerSettingsTests to assert current HeaderTags behaviors

* BREAKING CHANGE

GetDictionary has some new behaviors when allowOptionalMappings is true, to reflect the true usage where this flag indicates whether we are parsing header tags or not. The new behaviors include:
- In this scenario, strings that end in a colon are now considered invalid
- In this scenario, the last colon in the  string is used to determine the key-value split, not the first colon

* Update tracer/src/Datadog.Trace/Configuration/ConfigurationSources/StringConfigurationSource.cs

Co-authored-by: Steven Bouwkamp <[email protected]>

* nit: update comment

* Add migration guide

---------

Co-authored-by: Andrew Lock <[email protected]>
Co-authored-by: Steven Bouwkamp <[email protected]>
andrewlock added a commit that referenced this pull request Jul 4, 2024
* Update TracerSettingsTests to assert current HeaderTags behaviors

* BREAKING CHANGE

GetDictionary has some new behaviors when allowOptionalMappings is true, to reflect the true usage where this flag indicates whether we are parsing header tags or not. The new behaviors include:
- In this scenario, strings that end in a colon are now considered invalid
- In this scenario, the last colon in the  string is used to determine the key-value split, not the first colon

* Update tracer/src/Datadog.Trace/Configuration/ConfigurationSources/StringConfigurationSource.cs

Co-authored-by: Steven Bouwkamp <[email protected]>

* nit: update comment

* Add migration guide

---------

Co-authored-by: Andrew Lock <[email protected]>
Co-authored-by: Steven Bouwkamp <[email protected]>
andrewlock added a commit that referenced this pull request Jul 4, 2024
* Update TracerSettingsTests to assert current HeaderTags behaviors

* BREAKING CHANGE

GetDictionary has some new behaviors when allowOptionalMappings is true, to reflect the true usage where this flag indicates whether we are parsing header tags or not. The new behaviors include:
- In this scenario, strings that end in a colon are now considered invalid
- In this scenario, the last colon in the  string is used to determine the key-value split, not the first colon

* Update tracer/src/Datadog.Trace/Configuration/ConfigurationSources/StringConfigurationSource.cs

Co-authored-by: Steven Bouwkamp <[email protected]>

* nit: update comment

* Add migration guide

---------

Co-authored-by: Andrew Lock <[email protected]>
Co-authored-by: Steven Bouwkamp <[email protected]>
@lucaspimentel lucaspimentel added this to the vNext-v3 milestone Jul 10, 2024
andrewlock added a commit that referenced this pull request Jul 16, 2024
* Update TracerSettingsTests to assert current HeaderTags behaviors

* BREAKING CHANGE

GetDictionary has some new behaviors when allowOptionalMappings is true, to reflect the true usage where this flag indicates whether we are parsing header tags or not. The new behaviors include:
- In this scenario, strings that end in a colon are now considered invalid
- In this scenario, the last colon in the  string is used to determine the key-value split, not the first colon

* Update tracer/src/Datadog.Trace/Configuration/ConfigurationSources/StringConfigurationSource.cs

Co-authored-by: Steven Bouwkamp <[email protected]>

* nit: update comment

* Add migration guide

---------

Co-authored-by: Andrew Lock <[email protected]>
Co-authored-by: Steven Bouwkamp <[email protected]>
andrewlock added a commit that referenced this pull request Jul 18, 2024
* Update TracerSettingsTests to assert current HeaderTags behaviors

* BREAKING CHANGE

GetDictionary has some new behaviors when allowOptionalMappings is true, to reflect the true usage where this flag indicates whether we are parsing header tags or not. The new behaviors include:
- In this scenario, strings that end in a colon are now considered invalid
- In this scenario, the last colon in the  string is used to determine the key-value split, not the first colon

* Update tracer/src/Datadog.Trace/Configuration/ConfigurationSources/StringConfigurationSource.cs

Co-authored-by: Steven Bouwkamp <[email protected]>

* nit: update comment

* Add migration guide

---------

Co-authored-by: Andrew Lock <[email protected]>
Co-authored-by: Steven Bouwkamp <[email protected]>
andrewlock added a commit that referenced this pull request Jul 24, 2024
* Update TracerSettingsTests to assert current HeaderTags behaviors

* BREAKING CHANGE

GetDictionary has some new behaviors when allowOptionalMappings is true, to reflect the true usage where this flag indicates whether we are parsing header tags or not. The new behaviors include:
- In this scenario, strings that end in a colon are now considered invalid
- In this scenario, the last colon in the  string is used to determine the key-value split, not the first colon

* Update tracer/src/Datadog.Trace/Configuration/ConfigurationSources/StringConfigurationSource.cs

Co-authored-by: Steven Bouwkamp <[email protected]>

* nit: update comment

* Add migration guide

---------

Co-authored-by: Andrew Lock <[email protected]>
Co-authored-by: Steven Bouwkamp <[email protected]>
andrewlock added a commit that referenced this pull request Jul 25, 2024
* Update TracerSettingsTests to assert current HeaderTags behaviors

* BREAKING CHANGE

GetDictionary has some new behaviors when allowOptionalMappings is true, to reflect the true usage where this flag indicates whether we are parsing header tags or not. The new behaviors include:
- In this scenario, strings that end in a colon are now considered invalid
- In this scenario, the last colon in the  string is used to determine the key-value split, not the first colon

* Update tracer/src/Datadog.Trace/Configuration/ConfigurationSources/StringConfigurationSource.cs

Co-authored-by: Steven Bouwkamp <[email protected]>

* nit: update comment

* Add migration guide

---------

Co-authored-by: Andrew Lock <[email protected]>
Co-authored-by: Steven Bouwkamp <[email protected]>
andrewlock added a commit that referenced this pull request Jul 25, 2024
* Update TracerSettingsTests to assert current HeaderTags behaviors

* BREAKING CHANGE

GetDictionary has some new behaviors when allowOptionalMappings is true, to reflect the true usage where this flag indicates whether we are parsing header tags or not. The new behaviors include:
- In this scenario, strings that end in a colon are now considered invalid
- In this scenario, the last colon in the  string is used to determine the key-value split, not the first colon

* Update tracer/src/Datadog.Trace/Configuration/ConfigurationSources/StringConfigurationSource.cs

Co-authored-by: Steven Bouwkamp <[email protected]>

* nit: update comment

* Add migration guide

---------

Co-authored-by: Andrew Lock <[email protected]>
Co-authored-by: Steven Bouwkamp <[email protected]>
andrewlock added a commit that referenced this pull request Jul 25, 2024
* Update TracerSettingsTests to assert current HeaderTags behaviors

* BREAKING CHANGE

GetDictionary has some new behaviors when allowOptionalMappings is true, to reflect the true usage where this flag indicates whether we are parsing header tags or not. The new behaviors include:
- In this scenario, strings that end in a colon are now considered invalid
- In this scenario, the last colon in the  string is used to determine the key-value split, not the first colon

* Update tracer/src/Datadog.Trace/Configuration/ConfigurationSources/StringConfigurationSource.cs

Co-authored-by: Steven Bouwkamp <[email protected]>

* nit: update comment

* Add migration guide

---------

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

Labels

area:tracer The core tracer library (Datadog.Trace, does not include OpenTracing, native code, or integrations) breaking-change

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants