Skip to content

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
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 🤷

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

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.


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

3 participants