Skip to content

Clean up DSM context injection #8776

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Jun 23, 2025
Merged

Conversation

PerfectSlayer
Copy link
Contributor

@PerfectSlayer PerfectSlayer commented May 7, 2025

What Does This Do

This PR introduce context injection helper methods for HTTP client and server decorators.
Those new methods now handle the Data Streams context injection too, simplifying the instrumentation themselves.
DSM was also refactor to own its data / logic into its own classes rather than relying on the generic tracing ones.
Context API usage was simplified too.

Motivation

This will simplify instrumentation logic by removing most of the DSM code, unless DSM actually has interesting data to send.
This will also reduce context allocation by not updating context if DSM is not enabled.
DSM refactoring should help with code ownership.
Context refactoring should help to set examples about how to use it.

Additional Notes

Injection was moved to the UriBasedClientDecorator rather than the HttpClientDecorator as it is needed for the UrlConnectionDecorator too.
I though about reusing HttpClientDecorator REQUEST type for the injectContext() method and add an abstract setter() method (similar to the HttpServerDecorator.getter() method) but 1. not all setters are stateless (immutable collection make setters need to update their internal references once a field is set) 2. REQUEST and carrier are not always the same type.

Contributor Checklist

Jira ticket: LANGPLAT-474

@PerfectSlayer PerfectSlayer added type: enhancement Enhancements and improvements comp: data streams Data Streams Monitoring labels May 7, 2025
@pr-commenter
Copy link

pr-commenter bot commented May 7, 2025

Benchmarks

Startup

Parameters

Baseline Candidate
baseline_or_candidate baseline candidate
git_branch master bbujon/context-propagation-dsm
git_commit_date 1750674740 1750676824
git_commit_sha 8e58785 e67e217
release_version 1.51.0-SNAPSHOT~8e587850a2 1.51.0-SNAPSHOT~e67e217243
See matching parameters
Baseline Candidate
application insecure-bank insecure-bank
ci_job_date 1750678777 1750678777
ci_job_id 993194267 993194267
ci_pipeline_id 68447752 68447752
cpu_model Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz
kernel_version Linux runner-z-gvyqhn-project-304-concurrent-0-yd2t43df 6.8.0-1029-aws #31~22.04.1-Ubuntu SMP Thu Apr 24 21:16:18 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux Linux runner-z-gvyqhn-project-304-concurrent-0-yd2t43df 6.8.0-1029-aws #31~22.04.1-Ubuntu SMP Thu Apr 24 21:16:18 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
module Agent Agent
parent None None

Summary

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

Startup time reports for insecure-bank
gantt
    title insecure-bank - global startup overhead: candidate=1.51.0-SNAPSHOT~e67e217243, baseline=1.51.0-SNAPSHOT~8e587850a2

    dateFormat X
    axisFormat %s
section tracing
Agent [baseline] (1.037 s) : 0, 1036825
Total [baseline] (8.59 s) : 0, 8590004
Agent [candidate] (1.038 s) : 0, 1037861
Total [candidate] (8.573 s) : 0, 8573374
section iast
Agent [baseline] (1.163 s) : 0, 1162948
Total [baseline] (9.25 s) : 0, 9250024
Agent [candidate] (1.161 s) : 0, 1161408
Total [candidate] (9.247 s) : 0, 9246735
Loading
  • baseline results
Module Variant Duration Δ tracing
Agent tracing 1.037 s -
Agent iast 1.163 s 126.123 ms (12.2%)
Total tracing 8.59 s -
Total iast 9.25 s 660.02 ms (7.7%)
  • candidate results
Module Variant Duration Δ tracing
Agent tracing 1.038 s -
Agent iast 1.161 s 123.547 ms (11.9%)
Total tracing 8.573 s -
Total iast 9.247 s 673.361 ms (7.9%)
gantt
    title insecure-bank - break down per module: candidate=1.51.0-SNAPSHOT~e67e217243, baseline=1.51.0-SNAPSHOT~8e587850a2

    dateFormat X
    axisFormat %s
section tracing
BytebuddyAgent [baseline] (695.41 ms) : 0, 695410
BytebuddyAgent [candidate] (695.866 ms) : 0, 695866
GlobalTracer [baseline] (244.223 ms) : 0, 244223
GlobalTracer [candidate] (243.659 ms) : 0, 243659
AppSec [baseline] (57.663 ms) : 0, 57663
AppSec [candidate] (57.408 ms) : 0, 57408
Debugger [baseline] (6.364 ms) : 0, 6364
Debugger [candidate] (7.628 ms) : 0, 7628
Remote Config [baseline] (691.396 µs) : 0, 691
Remote Config [candidate] (680.678 µs) : 0, 681
Telemetry [baseline] (11.369 ms) : 0, 11369
Telemetry [candidate] (11.486 ms) : 0, 11486
section iast
BytebuddyAgent [baseline] (813.04 ms) : 0, 813040
BytebuddyAgent [candidate] (813.087 ms) : 0, 813087
GlobalTracer [baseline] (234.246 ms) : 0, 234246
GlobalTracer [candidate] (233.117 ms) : 0, 233117
AppSec [baseline] (52.047 ms) : 0, 52047
AppSec [candidate] (51.912 ms) : 0, 51912
Debugger [baseline] (5.964 ms) : 0, 5964
Debugger [candidate] (5.965 ms) : 0, 5965
Remote Config [baseline] (618.269 µs) : 0, 618
Remote Config [candidate] (612.015 µs) : 0, 612
Telemetry [baseline] (8.098 ms) : 0, 8098
Telemetry [candidate] (7.968 ms) : 0, 7968
IAST [baseline] (28.038 ms) : 0, 28038
IAST [candidate] (27.727 ms) : 0, 27727
Loading
Startup time reports for petclinic
gantt
    title petclinic - global startup overhead: candidate=1.51.0-SNAPSHOT~e67e217243, baseline=1.51.0-SNAPSHOT~8e587850a2

    dateFormat X
    axisFormat %s
section tracing
Agent [baseline] (1.024 s) : 0, 1024135
Total [baseline] (10.52 s) : 0, 10520274
Agent [candidate] (1.026 s) : 0, 1026105
Total [candidate] (10.498 s) : 0, 10498110
section appsec
Agent [baseline] (1.178 s) : 0, 1178074
Total [baseline] (10.703 s) : 0, 10702661
Agent [candidate] (1.186 s) : 0, 1185962
Total [candidate] (10.753 s) : 0, 10752508
section iast
Agent [baseline] (1.152 s) : 0, 1152418
Total [baseline] (10.841 s) : 0, 10840617
Agent [candidate] (1.149 s) : 0, 1148615
Total [candidate] (10.881 s) : 0, 10880850
section profiling
Agent [baseline] (1.27 s) : 0, 1269935
Total [baseline] (10.927 s) : 0, 10926848
Agent [candidate] (1.268 s) : 0, 1267705
Total [candidate] (10.94 s) : 0, 10940430
Loading
  • baseline results
Module Variant Duration Δ tracing
Agent tracing 1.024 s -
Agent appsec 1.178 s 153.939 ms (15.0%)
Agent iast 1.152 s 128.283 ms (12.5%)
Agent profiling 1.27 s 245.8 ms (24.0%)
Total tracing 10.52 s -
Total appsec 10.703 s 182.387 ms (1.7%)
Total iast 10.841 s 320.343 ms (3.0%)
Total profiling 10.927 s 406.574 ms (3.9%)
  • candidate results
Module Variant Duration Δ tracing
Agent tracing 1.026 s -
Agent appsec 1.186 s 159.857 ms (15.6%)
Agent iast 1.149 s 122.509 ms (11.9%)
Agent profiling 1.268 s 241.6 ms (23.5%)
Total tracing 10.498 s -
Total appsec 10.753 s 254.398 ms (2.4%)
Total iast 10.881 s 382.74 ms (3.6%)
Total profiling 10.94 s 442.32 ms (4.2%)
gantt
    title petclinic - break down per module: candidate=1.51.0-SNAPSHOT~e67e217243, baseline=1.51.0-SNAPSHOT~8e587850a2

    dateFormat X
    axisFormat %s
section tracing
BytebuddyAgent [baseline] (684.514 ms) : 0, 684514
BytebuddyAgent [candidate] (686.394 ms) : 0, 686394
GlobalTracer [baseline] (241.261 ms) : 0, 241261
GlobalTracer [candidate] (242.534 ms) : 0, 242534
AppSec [baseline] (56.361 ms) : 0, 56361
AppSec [candidate] (58.47 ms) : 0, 58470
Debugger [baseline] (7.816 ms) : 0, 7816
Debugger [candidate] (7.591 ms) : 0, 7591
Remote Config [baseline] (680.825 µs) : 0, 681
Remote Config [candidate] (658.81 µs) : 0, 659
Telemetry [baseline] (12.611 ms) : 0, 12611
Telemetry [candidate] (9.605 ms) : 0, 9605
section appsec
BytebuddyAgent [baseline] (707.819 ms) : 0, 707819
BytebuddyAgent [candidate] (712.931 ms) : 0, 712931
GlobalTracer [baseline] (234.739 ms) : 0, 234739
GlobalTracer [candidate] (236.2 ms) : 0, 236200
IAST [baseline] (21.956 ms) : 0, 21956
IAST [candidate] (22.038 ms) : 0, 22038
AppSec [baseline] (179.21 ms) : 0, 179210
AppSec [candidate] (180.12 ms) : 0, 180120
Debugger [baseline] (5.772 ms) : 0, 5772
Debugger [candidate] (5.862 ms) : 0, 5862
Remote Config [baseline] (598.677 µs) : 0, 599
Remote Config [candidate] (618.338 µs) : 0, 618
Telemetry [baseline] (7.246 ms) : 0, 7246
Telemetry [candidate] (7.305 ms) : 0, 7305
section iast
BytebuddyAgent [baseline] (806.298 ms) : 0, 806298
BytebuddyAgent [candidate] (803.45 ms) : 0, 803450
GlobalTracer [baseline] (232.098 ms) : 0, 232098
GlobalTracer [candidate] (230.963 ms) : 0, 230963
IAST [baseline] (28.219 ms) : 0, 28219
IAST [candidate] (26.044 ms) : 0, 26044
AppSec [baseline] (50.466 ms) : 0, 50466
AppSec [candidate] (52.968 ms) : 0, 52968
Debugger [baseline] (5.897 ms) : 0, 5897
Debugger [candidate] (5.891 ms) : 0, 5891
Remote Config [baseline] (602.339 µs) : 0, 602
Remote Config [candidate] (602.699 µs) : 0, 603
Telemetry [baseline] (7.998 ms) : 0, 7998
Telemetry [candidate] (7.854 ms) : 0, 7854
section profiling
BytebuddyAgent [baseline] (676.366 ms) : 0, 676366
BytebuddyAgent [candidate] (676.152 ms) : 0, 676152
GlobalTracer [baseline] (360.899 ms) : 0, 360899
GlobalTracer [candidate] (360.375 ms) : 0, 360375
AppSec [baseline] (62.173 ms) : 0, 62173
AppSec [candidate] (62.286 ms) : 0, 62286
Debugger [baseline] (6.145 ms) : 0, 6145
Debugger [candidate] (6.096 ms) : 0, 6096
Remote Config [baseline] (695.919 µs) : 0, 696
Remote Config [candidate] (686.826 µs) : 0, 687
Telemetry [baseline] (8.063 ms) : 0, 8063
Telemetry [candidate] (8.113 ms) : 0, 8113
ProfilingAgent [baseline] (107.083 ms) : 0, 107083
ProfilingAgent [candidate] (105.424 ms) : 0, 105424
Profiling [baseline] (107.108 ms) : 0, 107108
Profiling [candidate] (105.448 ms) : 0, 105448
Loading

Load

Parameters

Baseline Candidate
baseline_or_candidate baseline candidate
git_branch master bbujon/context-propagation-dsm
git_commit_date 1750674740 1750676824
git_commit_sha 8e58785 e67e217
release_version 1.51.0-SNAPSHOT~8e587850a2 1.51.0-SNAPSHOT~e67e217243
See matching parameters
Baseline Candidate
application insecure-bank insecure-bank
ci_job_date 1750678561 1750678561
ci_job_id 993194268 993194268
ci_pipeline_id 68447752 68447752
cpu_model Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz
kernel_version Linux runner-4rcvxfax-project-304-concurrent-0-qrgt7lq2 6.8.0-1029-aws #31~22.04.1-Ubuntu SMP Thu Apr 24 21:16:18 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux Linux runner-4rcvxfax-project-304-concurrent-0-qrgt7lq2 6.8.0-1029-aws #31~22.04.1-Ubuntu SMP Thu Apr 24 21:16:18 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux

Summary

Found 1 performance improvements and 2 performance regressions! Performance is the same for 9 metrics, 12 unstable metrics.

scenario Δ mean http_req_duration Δ mean throughput candidate mean http_req_duration candidate mean throughput baseline mean http_req_duration baseline mean throughput
scenario:load:insecure-bank:no_agent:high_load better
[-452.564µs; -333.263µs] or [-9.694%; -7.139%]
unstable
[-18.292op/s; +203.730op/s] or [-1.858%; +20.696%]
4.276ms 1077.094op/s 4.668ms 984.375op/s
scenario:load:insecure-bank:iast:high_load worse
[+256.578µs; +574.051µs] or [+2.896%; +6.479%]
unstable
[-85.142op/s; +38.642op/s] or [-16.261%; +7.380%]
9.275ms 500.344op/s 8.860ms 523.594op/s
scenario:load:petclinic:iast:high_load worse
[+2.048ms; +2.849ms] or [+4.848%; +6.746%]
unstable
[-13.665op/s; +1.640op/s] or [-12.338%; +1.481%]
44.681ms 104.737op/s 42.233ms 110.750op/s
Request duration reports for insecure-bank
gantt
    title insecure-bank - request duration [CI 0.99] : candidate=1.51.0-SNAPSHOT~e67e217243, baseline=1.51.0-SNAPSHOT~8e587850a2
    dateFormat X
    axisFormat %s
section baseline
no_agent (4.668 ms) : 4613, 4724
.   : milestone, 4668,
iast (8.86 ms) : 8716, 9003
.   : milestone, 8860,
iast_FULL (13.768 ms) : 13497, 14039
.   : milestone, 13768,
iast_GLOBAL (10.007 ms) : 9829, 10184
.   : milestone, 10007,
profiling (8.684 ms) : 8546, 8822
.   : milestone, 8684,
tracing (7.498 ms) : 7393, 7604
.   : milestone, 7498,
section candidate
no_agent (4.276 ms) : 4220, 4331
.   : milestone, 4276,
iast (9.275 ms) : 9124, 9427
.   : milestone, 9275,
iast_FULL (13.453 ms) : 13190, 13715
.   : milestone, 13453,
iast_GLOBAL (10.391 ms) : 10201, 10581
.   : milestone, 10391,
profiling (8.936 ms) : 8796, 9076
.   : milestone, 8936,
tracing (7.539 ms) : 7425, 7654
.   : milestone, 7539,
Loading
  • baseline results
Variant Request duration [CI 0.99] Δ no_agent
no_agent 4.668 ms [4.613 ms, 4.724 ms] -
iast 8.86 ms [8.716 ms, 9.003 ms] 4.191 ms (89.8%)
iast_FULL 13.768 ms [13.497 ms, 14.039 ms] 9.1 ms (194.9%)
iast_GLOBAL 10.007 ms [9.829 ms, 10.184 ms] 5.338 ms (114.3%)
profiling 8.684 ms [8.546 ms, 8.822 ms] 4.015 ms (86.0%)
tracing 7.498 ms [7.393 ms, 7.604 ms] 2.83 ms (60.6%)
  • candidate results
Variant Request duration [CI 0.99] Δ no_agent
no_agent 4.276 ms [4.22 ms, 4.331 ms] -
iast 9.275 ms [9.124 ms, 9.427 ms] 5.0 ms (116.9%)
iast_FULL 13.453 ms [13.19 ms, 13.715 ms] 9.177 ms (214.6%)
iast_GLOBAL 10.391 ms [10.201 ms, 10.581 ms] 6.116 ms (143.0%)
profiling 8.936 ms [8.796 ms, 9.076 ms] 4.66 ms (109.0%)
tracing 7.539 ms [7.425 ms, 7.654 ms] 3.264 ms (76.3%)
Request duration reports for petclinic
gantt
    title petclinic - request duration [CI 0.99] : candidate=1.51.0-SNAPSHOT~e67e217243, baseline=1.51.0-SNAPSHOT~8e587850a2
    dateFormat X
    axisFormat %s
section baseline
no_agent (37.3 ms) : 36996, 37603
.   : milestone, 37300,
appsec (47.26 ms) : 46848, 47673
.   : milestone, 47260,
code_origins (44.182 ms) : 43834, 44530
.   : milestone, 44182,
iast (42.233 ms) : 41863, 42603
.   : milestone, 42233,
profiling (48.317 ms) : 47889, 48745
.   : milestone, 48317,
tracing (44.679 ms) : 44316, 45042
.   : milestone, 44679,
section candidate
no_agent (36.995 ms) : 36698, 37292
.   : milestone, 36995,
appsec (48.398 ms) : 47978, 48819
.   : milestone, 48398,
code_origins (43.403 ms) : 43049, 43757
.   : milestone, 43403,
iast (44.681 ms) : 44307, 45056
.   : milestone, 44681,
profiling (48.644 ms) : 48150, 49139
.   : milestone, 48644,
tracing (43.757 ms) : 43405, 44110
.   : milestone, 43757,
Loading
  • baseline results
Variant Request duration [CI 0.99] Δ no_agent
no_agent 37.3 ms [36.996 ms, 37.603 ms] -
appsec 47.26 ms [46.848 ms, 47.673 ms] 9.961 ms (26.7%)
code_origins 44.182 ms [43.834 ms, 44.53 ms] 6.883 ms (18.5%)
iast 42.233 ms [41.863 ms, 42.603 ms] 4.934 ms (13.2%)
profiling 48.317 ms [47.889 ms, 48.745 ms] 11.017 ms (29.5%)
tracing 44.679 ms [44.316 ms, 45.042 ms] 7.379 ms (19.8%)
  • candidate results
Variant Request duration [CI 0.99] Δ no_agent
no_agent 36.995 ms [36.698 ms, 37.292 ms] -
appsec 48.398 ms [47.978 ms, 48.819 ms] 11.404 ms (30.8%)
code_origins 43.403 ms [43.049 ms, 43.757 ms] 6.408 ms (17.3%)
iast 44.681 ms [44.307 ms, 45.056 ms] 7.687 ms (20.8%)
profiling 48.644 ms [48.15 ms, 49.139 ms] 11.65 ms (31.5%)
tracing 43.757 ms [43.405 ms, 44.11 ms] 6.762 ms (18.3%)

Dacapo

Parameters

Baseline Candidate
baseline_or_candidate baseline candidate
git_branch master bbujon/context-propagation-dsm
git_commit_date 1750674740 1750676824
git_commit_sha 8e58785 e67e217
release_version 1.51.0-SNAPSHOT~8e587850a2 1.51.0-SNAPSHOT~e67e217243
See matching parameters
Baseline Candidate
application biojava biojava
ci_job_date 1750679001 1750679001
ci_job_id 993194270 993194270
ci_pipeline_id 68447752 68447752
cpu_model Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz
kernel_version Linux runner-z-gvyqhn-project-304-concurrent-1-do1gwo09 6.8.0-1029-aws #31~22.04.1-Ubuntu SMP Thu Apr 24 21:16:18 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux Linux runner-z-gvyqhn-project-304-concurrent-1-do1gwo09 6.8.0-1029-aws #31~22.04.1-Ubuntu SMP Thu Apr 24 21:16:18 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux

Summary

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

Execution time for tomcat
gantt
    title tomcat - execution time [CI 0.99] : candidate=1.51.0-SNAPSHOT~e67e217243, baseline=1.51.0-SNAPSHOT~8e587850a2
    dateFormat X
    axisFormat %s
section baseline
no_agent (1.47 ms) : 1458, 1481
.   : milestone, 1470,
appsec (2.393 ms) : 2344, 2442
.   : milestone, 2393,
iast (2.182 ms) : 2121, 2244
.   : milestone, 2182,
iast_GLOBAL (2.233 ms) : 2170, 2295
.   : milestone, 2233,
profiling (2.016 ms) : 1967, 2066
.   : milestone, 2016,
tracing (2.001 ms) : 1953, 2049
.   : milestone, 2001,
section candidate
no_agent (1.472 ms) : 1461, 1484
.   : milestone, 1472,
appsec (2.393 ms) : 2344, 2442
.   : milestone, 2393,
iast (2.185 ms) : 2123, 2247
.   : milestone, 2185,
iast_GLOBAL (2.226 ms) : 2164, 2288
.   : milestone, 2226,
profiling (2.024 ms) : 1974, 2073
.   : milestone, 2024,
tracing (1.996 ms) : 1948, 2043
.   : milestone, 1996,
Loading
  • baseline results
Variant Execution Time [CI 0.99] Δ no_agent
no_agent 1.47 ms [1.458 ms, 1.481 ms] -
appsec 2.393 ms [2.344 ms, 2.442 ms] 923.356 µs (62.8%)
iast 2.182 ms [2.121 ms, 2.244 ms] 712.125 µs (48.4%)
iast_GLOBAL 2.233 ms [2.17 ms, 2.295 ms] 762.734 µs (51.9%)
profiling 2.016 ms [1.967 ms, 2.066 ms] 546.593 µs (37.2%)
tracing 2.001 ms [1.953 ms, 2.049 ms] 531.132 µs (36.1%)
  • candidate results
Variant Execution Time [CI 0.99] Δ no_agent
no_agent 1.472 ms [1.461 ms, 1.484 ms] -
appsec 2.393 ms [2.344 ms, 2.442 ms] 920.731 µs (62.5%)
iast 2.185 ms [2.123 ms, 2.247 ms] 713.027 µs (48.4%)
iast_GLOBAL 2.226 ms [2.164 ms, 2.288 ms] 753.694 µs (51.2%)
profiling 2.024 ms [1.974 ms, 2.073 ms] 551.551 µs (37.5%)
tracing 1.996 ms [1.948 ms, 2.043 ms] 523.448 µs (35.6%)
Execution time for biojava
gantt
    title biojava - execution time [CI 0.99] : candidate=1.51.0-SNAPSHOT~e67e217243, baseline=1.51.0-SNAPSHOT~8e587850a2
    dateFormat X
    axisFormat %s
section baseline
no_agent (15.072 s) : 15072000, 15072000
.   : milestone, 15072000,
appsec (14.948 s) : 14948000, 14948000
.   : milestone, 14948000,
iast (19.016 s) : 19016000, 19016000
.   : milestone, 19016000,
iast_GLOBAL (17.835 s) : 17835000, 17835000
.   : milestone, 17835000,
profiling (15.303 s) : 15303000, 15303000
.   : milestone, 15303000,
tracing (15.143 s) : 15143000, 15143000
.   : milestone, 15143000,
section candidate
no_agent (15.236 s) : 15236000, 15236000
.   : milestone, 15236000,
appsec (15.116 s) : 15116000, 15116000
.   : milestone, 15116000,
iast (18.568 s) : 18568000, 18568000
.   : milestone, 18568000,
iast_GLOBAL (17.962 s) : 17962000, 17962000
.   : milestone, 17962000,
profiling (15.083 s) : 15083000, 15083000
.   : milestone, 15083000,
tracing (15.064 s) : 15064000, 15064000
.   : milestone, 15064000,
Loading
  • baseline results
Variant Execution Time [CI 0.99] Δ no_agent
no_agent 15.072 s [15.072 s, 15.072 s] -
appsec 14.948 s [14.948 s, 14.948 s] -124.0 ms (-0.8%)
iast 19.016 s [19.016 s, 19.016 s] 3.944 s (26.2%)
iast_GLOBAL 17.835 s [17.835 s, 17.835 s] 2.763 s (18.3%)
profiling 15.303 s [15.303 s, 15.303 s] 231.0 ms (1.5%)
tracing 15.143 s [15.143 s, 15.143 s] 71.0 ms (0.5%)
  • candidate results
Variant Execution Time [CI 0.99] Δ no_agent
no_agent 15.236 s [15.236 s, 15.236 s] -
appsec 15.116 s [15.116 s, 15.116 s] -120.0 ms (-0.8%)
iast 18.568 s [18.568 s, 18.568 s] 3.332 s (21.9%)
iast_GLOBAL 17.962 s [17.962 s, 17.962 s] 2.726 s (17.9%)
profiling 15.083 s [15.083 s, 15.083 s] -153.0 ms (-1.0%)
tracing 15.064 s [15.064 s, 15.064 s] -172.0 ms (-1.1%)

@PerfectSlayer PerfectSlayer added type: refactoring and removed type: enhancement Enhancements and improvements labels May 7, 2025
@PerfectSlayer PerfectSlayer force-pushed the bbujon/context-propagation-dsm branch from 5f1247d to 3b7384c Compare May 26, 2025 08:43
@@ -8,16 +8,47 @@
public class DataStreamsContext implements ImplicitContextKeyed {
private static final ContextKey<DataStreamsContext> CONTEXT_KEY =
ContextKey.named("dsm-context-key");
private static final LinkedHashMap<String, String> CLIENT_PATHWAY_EDGE_TAGS;
private static final LinkedHashMap<String, String> SERVER_PATHWAY_EDGE_TAGS;
Copy link
Contributor

Choose a reason for hiding this comment

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

Code Quality Violation

Suggested change
private static final LinkedHashMap<String, String> SERVER_PATHWAY_EDGE_TAGS;
private static final Map<String, String> SERVER_PATHWAY_EDGE_TAGS;
Avoid using a specific implementation type; use the more general Map instead (...read more)

Relying on particular implementation types, such as, HashSet or LinkedList can limit your adaptability to embrace alternative implementations in the future, particularly as your requirements change and your code needs to undergo changes.

It is recommended to opt for general types such as Set or List when declaring variables and parameters.

View in Datadog  Leave us feedback  Documentation

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yeah... We asked the DSM team to create their own data structure but not much update about it 🤷

@@ -8,16 +8,47 @@
public class DataStreamsContext implements ImplicitContextKeyed {
private static final ContextKey<DataStreamsContext> CONTEXT_KEY =
ContextKey.named("dsm-context-key");
private static final LinkedHashMap<String, String> CLIENT_PATHWAY_EDGE_TAGS;
Copy link
Contributor

Choose a reason for hiding this comment

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

Code Quality Violation

Suggested change
private static final LinkedHashMap<String, String> CLIENT_PATHWAY_EDGE_TAGS;
private static final Map<String, String> CLIENT_PATHWAY_EDGE_TAGS;
Avoid using a specific implementation type; use the more general Map instead (...read more)

Relying on particular implementation types, such as, HashSet or LinkedList can limit your adaptability to embrace alternative implementations in the future, particularly as your requirements change and your code needs to undergo changes.

It is recommended to opt for general types such as Set or List when declaring variables and parameters.

View in Datadog  Leave us feedback  Documentation

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yeah... We asked the DSM team to create their own data structure but not much update about it 🤷

@PerfectSlayer PerfectSlayer force-pushed the bbujon/context-propagation-dsm branch 3 times, most recently from 08df84e to 9889997 Compare May 26, 2025 13:37
@PerfectSlayer PerfectSlayer marked this pull request as ready for review May 26, 2025 15:56
@PerfectSlayer PerfectSlayer requested review from a team as code owners May 26, 2025 15:56
@PerfectSlayer PerfectSlayer requested a review from smola May 26, 2025 15:56
Copy link
Contributor

@mhlidd mhlidd left a comment

Choose a reason for hiding this comment

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

Looks much cleaner now! Just a few small comments/questions, but otherwise the DSM context specific changes look good. I'll defer the other changes (StatsBucket) to another reviewer.

final TraceConfig tracerConfig;
return (agentSpan = AgentSpan.fromContext(context)) != null
&& (tracerConfig = agentSpan.traceConfig()) != null
&& tracerConfig.isDataStreamsEnabled();
Copy link
Contributor

Choose a reason for hiding this comment

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

Why do we need to fetch the isDataStreamsEnabled() through tracerConfig? How is this different from getting it directly from Config.get()?

Also this seems to be also added in DataStreamsMonitoring.java. Do we need it in both places or can we remove it here?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Why do we need to fetch the isDataStreamsEnabled() through tracerConfig? How is this different from getting it directly from Config.get()?

Not sure but I think it might be related to remove config. I would need more details from the DSM team itself. I will ping it from its channel.

Do we need it in both places or can we remove it here?

There is one in decorator to avoid DSM context allocation and new context creation (the context.with() call).
While the one in the propagator is here to make sure we don't propagate if the feature is not enabled.
While the later is product related, the former is for performance concern.
If we can simplify the check, I would not mind having him twice. Let's see what the DSM team think about it first.

Copy link
Contributor

Choose a reason for hiding this comment

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

for the first one, Data Streams can be enabled via remote configuration. I don't know if Config.get() only returns the initial configuration or not.

Copy link
Contributor

Choose a reason for hiding this comment

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

for the second one, it makes sense to me. I agree it's annoying to have to get the config from the span though, in other languages, I believe we are able to get the config even when there is no active span.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I don't know if Config.get() only returns the initial configuration or not.

Yes, it will return the ones from the system properties or environment variables and will have the same value during the whole runtime.

I agree it's annoying to have to get the config from the span though

I end up using dynamic config for the instrumentation then. The tracer as a dynamic config that always has the latest state. You can get it by AgentTracer.traceConfig(), no span needed. That will decouple DSM from active span.

But I would recommend you would go over the whole code base as there are parts where you use (the static) Config and where you might want to move to the dynamic config instead. And some part where you get the dynamic config from spans, where you can get the last one from "tracer" (where tracer is basically the main entry point for all things, including dynamic config 🤷 )

@@ -11,6 +17,7 @@ public class RequestDispatcherDecorator extends BaseDecorator {
UTF8BytesString.create("java-web-servlet-dispatcher");
public static final String DD_CONTEXT_PATH_ATTRIBUTE = "datadog.context.path";
public static final String DD_SERVLET_PATH_ATTRIBUTE = "datadog.servlet.path";
private static final boolean DATA_STREAMS_ENABLED = Config.get().isDataStreamsEnabled();
Copy link
Contributor

Choose a reason for hiding this comment

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

Same question as above.

Comment on lines 54 to 56
|| (dsmContext = DataStreamsContext.fromContext(context)) == null
|| (traceConfig = span.traceConfig()) == null
|| !traceConfig.isDataStreamsEnabled()) {
Copy link
Contributor

Choose a reason for hiding this comment

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

I see this check is the same as the one in UriBasedClientDecorator.java. Is there a need to have it in both places? I would understand that having this check in UriBasedClientDecorator and the 2 GrpcClientDecorator could be repetitive, so could we remove all checks to traceConfig except this one?

Copy link
Contributor

@piochelepiotr piochelepiotr left a comment

Choose a reason for hiding this comment

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

Looks good to me, a few notes on context that might impact this work:

  1. We are looking into enabling Data Streams by default in the tracer (we are doing .NET first)
  2. We might drop HTTP & Grpc support by default for Data Streams, since most of the time, HTTP & Grpc calls are synchronous, and don't belong in data streams.

Copy link
Contributor

@piochelepiotr piochelepiotr left a comment

Choose a reason for hiding this comment

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

I didn't look into the difference between tracerConfig and the global Config.get(), so I don't know if there is a difference.
However, Data Streams can be enabled at runtime via remote configuration. So it's important we don't store is_data_streams_enabled in a long lived variable.

final TraceConfig tracerConfig;
return (agentSpan = AgentSpan.fromContext(context)) != null
&& (tracerConfig = agentSpan.traceConfig()) != null
&& tracerConfig.isDataStreamsEnabled();
Copy link
Contributor

Choose a reason for hiding this comment

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

for the first one, Data Streams can be enabled via remote configuration. I don't know if Config.get() only returns the initial configuration or not.

final TraceConfig tracerConfig;
return (agentSpan = AgentSpan.fromContext(context)) != null
&& (tracerConfig = agentSpan.traceConfig()) != null
&& tracerConfig.isDataStreamsEnabled();
Copy link
Contributor

Choose a reason for hiding this comment

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

for the second one, it makes sense to me. I agree it's annoying to have to get the config from the span though, in other languages, I believe we are able to get the config even when there is no active span.

public static final GrpcClientDecorator DECORATE = new GrpcClientDecorator();

private static final Set<String> IGNORED_METHODS = Config.get().getGrpcIgnoredOutboundMethods();
private static final BitSet CLIENT_ERROR_STATUSES = Config.get().getGrpcClientErrorStatuses();
private static final boolean DATA_STREAMS_ENABLED = Config.get().isDataStreamsEnabled();
Copy link
Contributor

Choose a reason for hiding this comment

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

same here, not sure if this is compatible with activation via remote configuration

@PerfectSlayer PerfectSlayer force-pushed the bbujon/context-propagation-dsm branch from 9889997 to e67e217 Compare June 23, 2025 11:08
@PerfectSlayer PerfectSlayer requested a review from a team as a code owner June 23, 2025 11:08
@PerfectSlayer
Copy link
Contributor Author

We are looking into enabling Data Streams by default in the tracer (we are doing .NET first)

Nice, it could be the right time to write some benchmarks (cc @bric3 about providing support and doc for) and consider moving the PathwayContext away from the span context, into the new DataStreamsContext.

That will help with the incoming modularization effort too (cc @dougqh).

@pr-commenter
Copy link

pr-commenter bot commented Jun 23, 2025

Kafka / producer-benchmark

Parameters

Baseline Candidate
baseline_or_candidate baseline candidate
git_branch master bbujon/context-propagation-dsm
git_commit_date 1750674740 1750676824
git_commit_sha 8e58785 e67e217
See matching parameters
Baseline Candidate
ci_job_date 1750678085 1750678085
ci_job_id 993194273 993194273
ci_pipeline_id 68447752 68447752
cpu_model Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz
jdkVersion 11.0.25 11.0.25
jmhVersion 1.36 1.36
jvm /usr/lib/jvm/java-11-openjdk-amd64/bin/java /usr/lib/jvm/java-11-openjdk-amd64/bin/java
jvmArgs -Dfile.encoding=UTF-8 -Djava.io.tmpdir=/go/src/github.com/DataDog/apm-reliability/dd-trace-java/platform/src/producer-benchmark/build/tmp/jmh -Duser.country=US -Duser.language=en -Duser.variant -Dfile.encoding=UTF-8 -Djava.io.tmpdir=/go/src/github.com/DataDog/apm-reliability/dd-trace-java/platform/src/producer-benchmark/build/tmp/jmh -Duser.country=US -Duser.language=en -Duser.variant
vmName OpenJDK 64-Bit Server VM OpenJDK 64-Bit Server VM
vmVersion 11.0.25+9-post-Ubuntu-1ubuntu122.04 11.0.25+9-post-Ubuntu-1ubuntu122.04

Summary

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

See unchanged results
scenario Δ mean throughput
scenario:not-instrumented/KafkaProduceBenchmark.benchProduce same
scenario:only-tracing-dsm-disabled-benchmarks/KafkaProduceBenchmark.benchProduce same
scenario:only-tracing-dsm-enabled-benchmarks/KafkaProduceBenchmark.benchProduce same

@pr-commenter
Copy link

pr-commenter bot commented Jun 23, 2025

Kafka / consumer-benchmark

Parameters

Baseline Candidate
baseline_or_candidate baseline candidate
git_branch master bbujon/context-propagation-dsm
git_commit_date 1750674740 1750676824
git_commit_sha 8e58785 e67e217
See matching parameters
Baseline Candidate
ci_job_date 1750678166 1750678166
ci_job_id 993194274 993194274
ci_pipeline_id 68447752 68447752
cpu_model Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz
jdkVersion 11.0.25 11.0.25
jmhVersion 1.36 1.36
jvm /usr/lib/jvm/java-11-openjdk-amd64/bin/java /usr/lib/jvm/java-11-openjdk-amd64/bin/java
jvmArgs -Dfile.encoding=UTF-8 -Djava.io.tmpdir=/go/src/github.com/DataDog/apm-reliability/dd-trace-java/platform/src/consumer-benchmark/build/tmp/jmh -Duser.country=US -Duser.language=en -Duser.variant -Dfile.encoding=UTF-8 -Djava.io.tmpdir=/go/src/github.com/DataDog/apm-reliability/dd-trace-java/platform/src/consumer-benchmark/build/tmp/jmh -Duser.country=US -Duser.language=en -Duser.variant
vmName OpenJDK 64-Bit Server VM OpenJDK 64-Bit Server VM
vmVersion 11.0.25+9-post-Ubuntu-1ubuntu122.04 11.0.25+9-post-Ubuntu-1ubuntu122.04

Summary

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

See unchanged results
scenario Δ mean throughput
scenario:not-instrumented/KafkaConsumerBenchmark.benchConsume same
scenario:only-tracing-dsm-disabled-benchmarks/KafkaConsumerBenchmark.benchConsume same
scenario:only-tracing-dsm-enabled-benchmarks/KafkaConsumerBenchmark.benchConsume same

@PerfectSlayer PerfectSlayer merged commit 3a5c47b into master Jun 23, 2025
486 checks passed
@PerfectSlayer PerfectSlayer deleted the bbujon/context-propagation-dsm branch June 23, 2025 14:20
@github-actions github-actions bot added this to the 1.51.0 milestone Jun 23, 2025
svc-squareup-copybara pushed a commit to cashapp/misk that referenced this pull request Jul 10, 2025
| Package | Type | Package file | Manager | Update | Change |
|---|---|---|---|---|---|
|
[com.google.errorprone:error_prone_annotations](https://errorprone.info)
([source](https://github.com/google/error-prone)) | dependencies |
misk/gradle/libs.versions.toml | gradle | minor | `2.39.0` -> `2.40.0` |
|
[org.apache.commons:commons-lang3](https://commons.apache.org/proper/commons-lang/)
([source](https://gitbox.apache.org/repos/asf/commons-lang.git)) |
dependencies | misk/gradle/libs.versions.toml | gradle | minor |
`3.17.0` -> `3.18.0` |
|
[org.jetbrains.kotlinx.binary-compatibility-validator](https://github.com/Kotlin/binary-compatibility-validator)
| plugin | misk/gradle/libs.versions.toml | gradle | patch | `0.18.0` ->
`0.18.1` |
| [com.datadoghq:dd-trace-api](https://github.com/datadog/dd-trace-java)
| dependencies | misk/gradle/libs.versions.toml | gradle | minor |
`1.50.1` -> `1.51.0` |
| [software.amazon.awssdk:sdk-core](https://aws.amazon.com/sdkforjava) |
dependencies | misk/gradle/libs.versions.toml | gradle | patch |
`2.31.77` -> `2.31.78` |
| [software.amazon.awssdk:sqs](https://aws.amazon.com/sdkforjava) |
dependencies | misk/gradle/libs.versions.toml | gradle | patch |
`2.31.77` -> `2.31.78` |
|
[software.amazon.awssdk:dynamodb-enhanced](https://aws.amazon.com/sdkforjava)
| dependencies | misk/gradle/libs.versions.toml | gradle | patch |
`2.31.77` -> `2.31.78` |
| [software.amazon.awssdk:dynamodb](https://aws.amazon.com/sdkforjava) |
dependencies | misk/gradle/libs.versions.toml | gradle | patch |
`2.31.77` -> `2.31.78` |
| [software.amazon.awssdk:aws-core](https://aws.amazon.com/sdkforjava) |
dependencies | misk/gradle/libs.versions.toml | gradle | patch |
`2.31.77` -> `2.31.78` |
| [software.amazon.awssdk:bom](https://aws.amazon.com/sdkforjava) |
dependencies | misk/gradle/libs.versions.toml | gradle | patch |
`2.31.77` -> `2.31.78` |
| [software.amazon.awssdk:auth](https://aws.amazon.com/sdkforjava) |
dependencies | misk/gradle/libs.versions.toml | gradle | patch |
`2.31.77` -> `2.31.78` |

---

### Release Notes

<details>
<summary>google/error-prone
(com.google.errorprone:error_prone_annotations)</summary>

###
[`v2.40.0`](https://github.com/google/error-prone/releases/tag/v2.40.0):
Error Prone 2.40.0

Changes:

- Bug fixes and improvements
- Releases (including snapshots) have migrated from [OSSRH to the
Central Publisher
Portal](https://central.sonatype.org/pages/ossrh-eol/#process-to-migrate)

Full changelog:
google/error-prone@v2.39.0...v2.40.0

</details>

<details>
<summary>Kotlin/binary-compatibility-validator
(org.jetbrains.kotlinx.binary-compatibility-validator)</summary>

###
[`v0.18.1`](https://github.com/Kotlin/binary-compatibility-validator/releases/tag/0.18.1)

[Compare
Source](Kotlin/binary-compatibility-validator@0.18.0...0.18.1)

#### What's Changed

- Fixed a bug preventing use of cross-compilation support during KLIB
dump validation
\[[#&#8203;304](https://github.com/Kotlin/binary-compatibility-validator/issues/304)]\[[#&#8203;306](https://github.com/Kotlin/binary-compatibility-validator/issues/306)]

</details>

<details>
<summary>datadog/dd-trace-java (com.datadoghq:dd-trace-api)</summary>

###
[`v1.51.0`](https://github.com/DataDog/dd-trace-java/releases/tag/v1.51.0):
1.51.0

### Components

#### Application Security Management (IAST)

- 🐛 Fix verify error when ctor params are used after a call site
([#&#8203;9083](DataDog/dd-trace-java#9083) -
[@&#8203;manuel-alvarez-alvarez](https://github.com/manuel-alvarez-alvarez))
- 🐛 Limit the maximum size of the location path in IAST
vulnerabilities
([#&#8203;9028](DataDog/dd-trace-java#9028) -
[@&#8203;jandro996](https://github.com/jandro996))
- 🐛 Fix IAST gRPC handler with null superclass
([#&#8203;8984](DataDog/dd-trace-java#8984) -
[@&#8203;smola](https://github.com/smola))
- ✨ Optimize IAST Vulnerability Detection
([#&#8203;8885](DataDog/dd-trace-java#8885) -
[@&#8203;jandro996](https://github.com/jandro996))

#### Application Security Management (WAF)

- ✨ Upgrade libddwaf-java to 15.0.0
([#&#8203;9022](DataDog/dd-trace-java#9022) -
[@&#8203;sezen-datadog](https://github.com/sezen-datadog))
- ✨ Extract RestEasy json body response schemas
([#&#8203;9015](DataDog/dd-trace-java#9015) -
[@&#8203;jandro996](https://github.com/jandro996))
- ✨ Extract Jersey json body response schemas
([#&#8203;9014](DataDog/dd-trace-java#9014) -
[@&#8203;jandro996](https://github.com/jandro996))
- ✨ Extract Ratpack json body response schemas
([#&#8203;9013](DataDog/dd-trace-java#9013) -
[@&#8203;manuel-alvarez-alvarez](https://github.com/manuel-alvarez-alvarez))
- ✨ Enable API Security by default and make it lazy loading
([#&#8203;9009](DataDog/dd-trace-java#9009) -
[@&#8203;smola](https://github.com/smola))
- ✨ Extract Vert.x json body response schemas
([#&#8203;9001](DataDog/dd-trace-java#9001) -
[@&#8203;manuel-alvarez-alvarez](https://github.com/manuel-alvarez-alvarez))
- ✨ Extract Play json body response schemas
([#&#8203;8995](DataDog/dd-trace-java#8995) -
[@&#8203;manuel-alvarez-alvarez](https://github.com/manuel-alvarez-alvarez))
- 🐛 Fix Jackson nodes introspection for request/response schema
extraction
([#&#8203;8980](DataDog/dd-trace-java#8980) -
[@&#8203;manuel-alvarez-alvarez](https://github.com/manuel-alvarez-alvarez))
- ✨ Extract Spring json body response schemas
([#&#8203;8938](DataDog/dd-trace-java#8938) -
[@&#8203;sezen-datadog](https://github.com/sezen-datadog))
- ✨ Default obfuscation regexp update
([#&#8203;8937](DataDog/dd-trace-java#8937) -
[@&#8203;sezen-datadog](https://github.com/sezen-datadog))

#### Build & Tooling

- ✨ Cancel GitLab running pipeline on new PR push
([#&#8203;9023](DataDog/dd-trace-java#9023) -
[@&#8203;PerfectSlayer](https://github.com/PerfectSlayer))
- ✨ Migrate publishing to Maven Central Portal
([#&#8203;8807](DataDog/dd-trace-java#8807) -
[@&#8203;sarahchen6](https://github.com/sarahchen6))

#### Continuous Integration Visibility

- 🐛 Fix Test Optimization to work with JDK 24
([#&#8203;9114](DataDog/dd-trace-java#9114) -
[@&#8203;nikita-tkachenko-datadog](https://github.com/nikita-tkachenko-datadog))
- ✨ Add repo root as safe directory on git client creation
([#&#8203;9033](DataDog/dd-trace-java#9033) -
[@&#8203;daniel-mohedano](https://github.com/daniel-mohedano))
- ✨ Add PR number tag and improve PR information building
([#&#8203;8990](DataDog/dd-trace-java#8990) -
[@&#8203;daniel-mohedano](https://github.com/daniel-mohedano))
- ✨ Update impacted tests logic
([#&#8203;8923](DataDog/dd-trace-java#8923) -
[@&#8203;daniel-mohedano](https://github.com/daniel-mohedano))

#### Data Streams Monitoring

- 🧹 Clean up DSM context injection
([#&#8203;8776](DataDog/dd-trace-java#8776) -
[@&#8203;PerfectSlayer](https://github.com/PerfectSlayer))

#### Database Monitoring

- 🐛 Set trace\_injected in try block
([#&#8203;9025](DataDog/dd-trace-java#9025) -
[@&#8203;natashadada](https://github.com/natashadada))

#### Dynamic Instrumentation

- 🐛 Add source file tracking enable option
([#&#8203;9115](DataDog/dd-trace-java#9115) -
[@&#8203;jpbempel](https://github.com/jpbempel))
- ✨ Add java.util.Date support
([#&#8203;9111](DataDog/dd-trace-java#9111) -
[@&#8203;jpbempel](https://github.com/jpbempel))
- ✨ Update file probe format
([#&#8203;9047](DataDog/dd-trace-java#9047) -
[@&#8203;jpbempel](https://github.com/jpbempel))
- ✨ add safe local var hoisting
([#&#8203;9034](DataDog/dd-trace-java#9034) -
[@&#8203;jpbempel](https://github.com/jpbempel))
- 🧹 Add new config for debugger upload interval
([#&#8203;8959](DataDog/dd-trace-java#8959) -
[@&#8203;jpbempel](https://github.com/jpbempel))
- ✨ Enable Code Origin with Dynamic instrumentation
([#&#8203;8940](DataDog/dd-trace-java#8940) -
[@&#8203;jpbempel](https://github.com/jpbempel))

#### ML Observability (LLMObs)

- 💡 LLM Observability SDK
([#&#8203;8781](DataDog/dd-trace-java#8781) -
[@&#8203;gary-huang](https://github.com/gary-huang),
[@&#8203;nayeem-kamal](https://github.com/nayeem-kamal))

#### Metrics

- 🐛 Ensure client stat reporter is started when the agent is not
available at bootstrap
([#&#8203;9082](DataDog/dd-trace-java#9082) -
[@&#8203;amarziali](https://github.com/amarziali))
- ✨ Create metric: appsec.waf.config\_errors
([#&#8203;8394](DataDog/dd-trace-java#8394) -
[@&#8203;sezen-datadog](https://github.com/sezen-datadog))

#### Platform components

- ✨ Introduce environment component
([#&#8203;9071](DataDog/dd-trace-java#9071) -
[@&#8203;PerfectSlayer](https://github.com/PerfectSlayer))

#### Profiling

- 🐛 Remove annoying warning for smap event parsing
([#&#8203;9119](DataDog/dd-trace-java#9119) -
[@&#8203;jbachorik](https://github.com/jbachorik))
- 🐛 Fix ByteCountingInputStream when reading past EOF
([#&#8203;8988](DataDog/dd-trace-java#8988) -
[@&#8203;manuel-alvarez-alvarez](https://github.com/manuel-alvarez-alvarez))

#### Realtime User Monitoring

- ✨ Add RUM SDK injection for servlet based web servers
([#&#8203;9110](DataDog/dd-trace-java#9110) -
[@&#8203;PerfectSlayer](https://github.com/PerfectSlayer)
[@&#8203;amarziali](https://github.com/amarziali))

#### Telemetry

- ✨ Update the config origin metric to match what it's mapping
([#&#8203;9045](DataDog/dd-trace-java#9045) -
[@&#8203;sezen-datadog](https://github.com/sezen-datadog))

#### Testing

- ✨ Add testing for latest stable version (JDK 24)
([#&#8203;8875](DataDog/dd-trace-java#8875) -
[@&#8203;sarahchen6](https://github.com/sarahchen6))

#### Trace context propagation

- 🐛 Fix bug with dropping baggage when
`TracePropagationBehaviorExtract=IGNORE`
([#&#8203;9037](DataDog/dd-trace-java#9037) -
[@&#8203;mhlidd](https://github.com/mhlidd))
- 🐛 Fix ArrayIndexOutOfBoundsException in PercentEscaper
([#&#8203;9032](DataDog/dd-trace-java#9032) -
[@&#8203;mhlidd](https://github.com/mhlidd))

#### Tracer core

- 🐛 Fix `Error` handling for trace interceptors
([#&#8203;9097](DataDog/dd-trace-java#9097) -
[@&#8203;AlexeyKuznetsov-DD](https://github.com/AlexeyKuznetsov-DD))
- 💡 Add wildcard feature for `DD_TRACE_HEADER_TAGS` and enabling
for Http Response headers
([#&#8203;9067](DataDog/dd-trace-java#9067) -
[@&#8203;mhlidd](https://github.com/mhlidd))

#### Tracer public API

- 💡 Add LLM Observability SDK
([#&#8203;8781](DataDog/dd-trace-java#8781) -
[@&#8203;gary-huang](https://github.com/gary-huang))

### Instrumentations

#### Akka instrumentation

- 🐛 Fix NPE in akka-http and pekko-http integrations
([#&#8203;9019](DataDog/dd-trace-java#9019) -
[@&#8203;mcculls](https://github.com/mcculls))

#### Eclipse Vert.x instrumentation

- ✨ Extract Vert.x json body response schemas
([#&#8203;9001](DataDog/dd-trace-java#9001) -
[@&#8203;manuel-alvarez-alvarez](https://github.com/manuel-alvarez-alvarez))
- ✨ Write http.route tag as soon as possible in vert.x
([#&#8203;8952](DataDog/dd-trace-java#8952) -
[@&#8203;manuel-alvarez-alvarez](https://github.com/manuel-alvarez-alvarez))

#### JAX-WS instrumentation

- 💡⚠️ Enable jax-ws integration by default
([#&#8203;9030](DataDog/dd-trace-java#9030) -
[@&#8203;bm1549](https://github.com/bm1549))
- ✨ Extract Jersey json body response schemas
([#&#8203;9014](DataDog/dd-trace-java#9014) -
[@&#8203;jandro996](https://github.com/jandro996))

#### Mule instrumentation

- 🐛 Propagate grizzly http span in filters if nothing is active
([#&#8203;9016](DataDog/dd-trace-java#9016) -
[@&#8203;amarziali](https://github.com/amarziali))

#### Play Framework instrumentation

- ✨ Extract Play json body response schemas
([#&#8203;8995](DataDog/dd-trace-java#8995) -
[@&#8203;manuel-alvarez-alvarez](https://github.com/manuel-alvarez-alvarez))

#### Ratpack instrumentation

- ✨ Extract Ratpack json body response schemas
([#&#8203;9013](DataDog/dd-trace-java#9013) -
[@&#8203;manuel-alvarez-alvarez](https://github.com/manuel-alvarez-alvarez))

#### Spring instrumentation

- ✨ Extract Spring json body response schemas
([#&#8203;8938](DataDog/dd-trace-java#8938) -
[@&#8203;sezen-datadog](https://github.com/sezen-datadog))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "after 6pm every weekday,before 2am
every weekday" in timezone Australia/Melbourne, Automerge - At any time
(no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Never, or you tick the rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config help](https://github.com/renovatebot/renovate/discussions) if
that's undesired.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Renovate
Bot](https://github.com/renovatebot/renovate).

GitOrigin-RevId: 649b690d4c9d7dcb572c457f0802b42b8e3e682e
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants