Skip to content

Use errorMonitor symbol instead of listening to the error event #5682

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

Open
wants to merge 3 commits into
base: master
Choose a base branch
from

Conversation

BridgeAR
Copy link
Collaborator

@BridgeAR BridgeAR commented May 8, 2025

This is important to guarantee user code behaves as it did without
the instrumentation. So user crashes should happen as before.

I did not verify if we handle this else-wise and I mainly wanted to open this to look into this closer to make sure this is indeed what we want or not.

Copy link

github-actions bot commented May 8, 2025

Overall package size

Self size: 9.37 MB
Deduped: 103.4 MB
No deduping: 103.92 MB

Dependency sizes | name | version | self size | total size | |------|---------|-----------|------------| | @datadog/libdatadog | 0.5.1 | 29.73 MB | 29.73 MB | | @datadog/native-appsec | 8.5.2 | 19.33 MB | 19.34 MB | | @datadog/pprof | 5.8.0 | 12.55 MB | 12.92 MB | | @datadog/native-iast-taint-tracking | 4.0.0 | 11.72 MB | 11.73 MB | | @opentelemetry/core | 1.30.1 | 908.66 kB | 7.16 MB | | protobufjs | 7.4.0 | 2.77 MB | 5.42 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 | | import-in-the-middle | 1.13.1 | 117.64 kB | 839.26 kB | | source-map | 0.7.4 | 226 kB | 226 kB | | opentracing | 0.14.7 | 194.81 kB | 194.81 kB | | lru-cache | 7.18.3 | 133.92 kB | 133.92 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 | 5.3.2 | 53.63 kB | 53.63 kB | | istanbul-lib-coverage | 3.2.0 | 29.34 kB | 29.34 kB | | rfdc | 1.4.1 | 27.15 kB | 27.15 kB | | @isaacs/ttlcache | 1.4.1 | 25.2 kB | 25.2 kB | | dc-polyfill | 0.1.8 | 25.08 kB | 25.08 kB | | tlhunter-sorted-set | 0.1.0 | 24.94 kB | 24.94 kB | | shell-quote | 1.8.2 | 23.54 kB | 23.54 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.3 | 4.47 kB | 4.47 kB |

🤖 This report was automatically generated by heaviest-objects-in-the-universe

Copy link

codecov bot commented May 8, 2025

Codecov Report

Attention: Patch coverage is 87.50000% with 2 lines in your changes missing coverage. Please review.

Project coverage is 79.05%. Comparing base (3a2ed10) to head (a08d0a3).
Report is 2 commits behind head on master.

Files with missing lines Patch % Lines
...ckages/datadog-instrumentations/src/http/client.js 50.00% 1 Missing ⚠️
packages/datadog-instrumentations/src/net.js 50.00% 1 Missing ⚠️
Additional details and impacted files
@@           Coverage Diff           @@
##           master    #5682   +/-   ##
=======================================
  Coverage   79.04%   79.05%           
=======================================
  Files         515      515           
  Lines       23589    23590    +1     
=======================================
+ Hits        18647    18648    +1     
  Misses       4942     4942           

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@datadog-datadog-prod-us1
Copy link

datadog-datadog-prod-us1 bot commented May 8, 2025

Datadog Report

Branch report: BridgeAR/safer-on-error
Commit report: 111f041
Test service: dd-trace-js-integration-tests

✅ 0 Failed, 986 Passed, 0 Skipped, 15m 24.78s Total Time

@pr-commenter
Copy link

pr-commenter bot commented May 8, 2025

Benchmarks

Benchmark execution time: 2025-05-15 10:31:48

Comparing candidate commit 0d52cd1 in PR branch BridgeAR/safer-on-error with baseline commit 3a2ed10 in branch master.

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

scenario:appsec-iast-no-vulnerability-iast-enabled-default-config-18

  • 🟥 max_rss_usage [+6.958MB; +11.511MB] or [+5.488%; +9.079%]

This is important to guarantee user code behaves as it did without
the instrumentation. So user crashes should happen as before.
@BridgeAR BridgeAR force-pushed the BridgeAR/safer-on-error branch from dd6a6fb to d6d080c Compare May 14, 2025 23:02
@BridgeAR BridgeAR marked this pull request as ready for review May 14, 2025 23:02
@BridgeAR BridgeAR requested review from a team as code owners May 14, 2025 23:02
@BridgeAR BridgeAR requested review from bengl and rochdev May 14, 2025 23:02
Comment on lines -138 to -146
if (stream) {
newQuery.on('end', () => {
finish(null, [])
})
newQuery.on(errorMonitor, (err) => {
finish(err)
})
}

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

This was actually adding a second listener. Now, it's only a single one and only the monitor one.

Copy link
Collaborator

Choose a reason for hiding this comment

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

Well, it wasn't adding a second listener in case newQuery.callback is truthy. In that case it's the only one. However, one would assume that the callback override above should serve the same purpose, so I agree with you that removing of this if-statement seems like the right move. Have you verified that this code is covered by tests?

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

The time this was added, tests were added that would fail if the above listener is removed. All callback cases are event emitters but it's fine, since we wait for that to finish. It was only important if there was no callback.

I did however do a closer check and added a test for failing cases as well.
Interestingly, the .then part is never going to be reached in any of our cases, even the promise related tests. The pg internals just all work with callbacks. I wonder if we want to remove that condition.

Comment on lines -138 to -146
if (stream) {
newQuery.on('end', () => {
finish(null, [])
})
newQuery.on(errorMonitor, (err) => {
finish(err)
})
}

Copy link
Collaborator

Choose a reason for hiding this comment

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

Well, it wasn't adding a second listener in case newQuery.callback is truthy. In that case it's the only one. However, one would assume that the callback override above should serve the same purpose, so I agree with you that removing of this if-statement seems like the right move. Have you verified that this code is covered by tests?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants