-
Notifications
You must be signed in to change notification settings - Fork 345
Fix log injection and applied sampling rule bug #6299
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
Fix log injection and applied sampling rule bug #6299
Conversation
Overall package sizeSelf size: 11.87 MB Dependency sizes| name | version | self size | total size | |------|---------|-----------|------------| | @datadog/libdatadog | 0.7.0 | 35.02 MB | 35.02 MB | | @datadog/native-appsec | 10.1.0 | 20.37 MB | 20.37 MB | | @datadog/native-iast-taint-tracking | 4.0.0 | 11.72 MB | 11.73 MB | | @datadog/pprof | 5.9.0 | 9.77 MB | 10.1 MB | | @opentelemetry/core | 1.30.1 | 908.66 kB | 7.16 MB | | protobufjs | 7.5.4 | 2.95 MB | 5.6 MB | | @datadog/wasm-js-rewriter | 4.0.1 | 2.85 MB | 3.58 MB | | @datadog/native-metrics | 3.1.1 | 1.02 MB | 1.43 MB | | @opentelemetry/api | 1.8.0 | 1.21 MB | 1.21 MB | | jsonpath-plus | 10.3.0 | 617.18 kB | 1.08 MB | | import-in-the-middle | 1.14.2 | 122.36 kB | 850.93 kB | | lru-cache | 10.4.3 | 804.3 kB | 804.3 kB | | opentracing | 0.14.7 | 194.81 kB | 194.81 kB | | source-map | 0.7.6 | 185.63 kB | 185.63 kB | | pprof-format | 2.1.0 | 111.69 kB | 111.69 kB | | @datadog/sketches-js | 2.1.1 | 109.9 kB | 109.9 kB | | lodash.sortby | 4.7.0 | 75.76 kB | 75.76 kB | | ignore | 7.0.5 | 63.38 kB | 63.38 kB | | istanbul-lib-coverage | 3.2.2 | 34.37 kB | 34.37 kB | | rfdc | 1.4.1 | 27.15 kB | 27.15 kB | | dc-polyfill | 0.1.10 | 26.73 kB | 26.73 kB | | @isaacs/ttlcache | 1.4.1 | 25.2 kB | 25.2 kB | | tlhunter-sorted-set | 0.1.0 | 24.94 kB | 24.94 kB | | shell-quote | 1.8.3 | 23.74 kB | 23.74 kB | | limiter | 1.1.5 | 23.17 kB | 23.17 kB | | retry | 0.13.1 | 18.85 kB | 18.85 kB | | semifies | 1.0.0 | 15.84 kB | 15.84 kB | | jest-docblock | 29.7.0 | 8.99 kB | 12.76 kB | | crypto-randomuuid | 1.0.0 | 11.18 kB | 11.18 kB | | ttl-set | 1.0.0 | 4.61 kB | 9.69 kB | | mutexify | 1.4.0 | 5.71 kB | 8.74 kB | | path-to-regexp | 0.1.12 | 6.6 kB | 6.6 kB | | koalas | 1.0.2 | 6.47 kB | 6.47 kB | | module-details-from-path | 1.0.4 | 3.96 kB | 3.96 kB |🤖 This report was automatically generated by heaviest-objects-in-the-universe |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #6299 +/- ##
=======================================
Coverage 83.72% 83.72%
=======================================
Files 476 476
Lines 20001 20001
=======================================
Hits 16745 16745
Misses 3256 3256 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
BenchmarksBenchmark execution time: 2025-08-20 14:07:15 Comparing candidate commit 8b53aea in PR branch Found 0 performance improvements and 0 performance regressions! Performance is the same for 1271 metrics, 52 unstable metrics. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Functionality wise this is LGTM, I believe the overall fix should be implemented somewhere else.
I think we could for example look into setting the resource.name earlier. If we manage that, the bug should also be fixed and it would likely also fix more situations (I could imagine this is also tricky in case other functionality relies on it as well).
This should for example not come with the performance overhead that this currently comes with.
assert.isArray(payload) | ||
assert.strictEqual(payload.length, 1) | ||
// Bug: previously got USER_REJECT instead of USER_KEEP when log injection is enabled, | ||
// meaning resource rules are not applied & instead global sampling is applied | ||
// Now gets USER_KEEP because resource rules are applied | ||
assert.propertyVal(payload[0][0].metrics, '_sampling_priority_v1', USER_KEEP) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nit: please change this to use our helper assertObjectContains
for partial deep equal checks. That way there is additional debugging information in case of a failure and we don't add additional chai usage, which we want to prevent in the future (using Node.js assert instead).
The same applies to the other test.
…om:DataDog/dd-trace-js into khanayan123/fix-log-injection-sampling-bug
Co-authored-by: Ruben Bridgewater <ruben@bridgewater.de>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
* fix log injection and sampling rule bug * instead of deferring sampling decision seperate log injection from sampling * revert * address feedback
* fix log injection and sampling rule bug * instead of deferring sampling decision seperate log injection from sampling * revert * address feedback
* fix log injection and sampling rule bug * instead of deferring sampling decision seperate log injection from sampling * revert * address feedback
* fix log injection and sampling rule bug * instead of deferring sampling decision seperate log injection from sampling * revert * address feedback
What does this PR do?
Fix: Log injection no longer triggers sampling, preventing resource-based rules from being bypassed.
Changes:
Motivation
Since v5.57 a log injection bug was surfaced where default log injection caused sampling to run before web frameworks set resource names, bypassing resource-based rules. This issue has existed since v4.23.0 when we introduced resource based sampling