Skip to content

Conversation

@sabrenner
Copy link
Collaborator

@sabrenner sabrenner commented Nov 25, 2025

What does this PR do?

Makes sure we do not patch client.config.protocol.deserializeResponse multiple times, as shimmer.wrap does not check if the target object's method has already been patched.

Perhaps we should patch the base protocol's prototype, but looking at the source code, it seems all of the base classes are either abstract or just type interfaces, and/or the deserializeResponse method is also abstract. But, maybe we can just wrap the one that BedrockRuntime uses, as it's the one this change was introduced for.

Motivation

Fixes #6985

Testing

I created an integration test in order to set a super small max call stack size, and was able to reproduce the issue from the linked issue locally:

RangeError: Maximum call stack size exceeded
  Deserialization error: to see the raw response, inspect the hidden field {error}.$response on this object.
    at deref (/private/var/folders/94/lnn2crkx7914c2835zmwrwvh0000gq/T/7e02ad1fc7294706/1cc97b417deae3ae/node_modules/@smithy/core/dist-cjs/submodules/schema/index.js:8:16)
    at NormalizedSchema.of (/private/var/folders/94/lnn2crkx7914c2835zmwrwvh0000gq/T/7e02ad1fc7294706/1cc97b417deae3ae/node_modules/@smithy/core/dist-cjs/submodules/schema/index.js:307:20)
    at AwsJson1_0Protocol.deserializeResponse (/private/var/folders/94/lnn2crkx7914c2835zmwrwvh0000gq/T/7e02ad1fc7294706/1cc97b417deae3ae/node_modules/@smithy/core/dist-cjs/submodules/protocols/index.js:466:44)
    at AwsJson1_0Protocol.deserializeResponse (/private/var/folders/94/lnn2crkx7914c2835zmwrwvh0000gq/T/7e02ad1fc7294706/1cc97b417deae3ae/node_modules/dd-trace/packages/datadog-instrumentations/src/aws-sdk.js:46:24)
    at AwsJson1_0Protocol.deserializeResponse (/private/var/folders/94/lnn2crkx7914c2835zmwrwvh0000gq/T/7e02ad1fc7294706/1cc97b417deae3ae/node_modules/dd-trace/packages/datadog-instrumentations/src/aws-sdk.js:46:24)
    at AwsJson1_0Protocol.deserializeResponse (/private/var/folders/94/lnn2crkx7914c2835zmwrwvh0000gq/T/7e02ad1fc7294706/1cc97b417deae3ae/node_modules/dd-trace/packages/datadog-instrumentations/src/aws-sdk.js:46:24)
    at AwsJson1_0Protocol.deserializeResponse (/private/var/folders/94/lnn2crkx7914c2835zmwrwvh0000gq/T/7e02ad1fc7294706/1cc97b417deae3ae/node_modules/dd-trace/packages/datadog-instrumentations/src/aws-sdk.js:46:24)
    at AwsJson1_0Protocol.deserializeResponse (/private/var/folders/94/lnn2crkx7914c2835zmwrwvh0000gq/T/7e02ad1fc7294706/1cc97b417deae3ae/node_modules/dd-trace/packages/datadog-instrumentations/src/aws-sdk.js:46:24)
    at AwsJson1_0Protocol.deserializeResponse (/private/var/folders/94/lnn2crkx7914c2835zmwrwvh0000gq/T/7e02ad1fc7294706/1cc97b417deae3ae/node_modules/dd-trace/packages/datadog-instrumentations/src/aws-sdk.js:46:24)
    at AwsJson1_0Protocol.deserializeResponse (/private/var/folders/94/lnn2crkx7914c2835zmwrwvh0000gq/T/7e02ad1fc7294706/1cc97b417deae3ae/node_modules/dd-trace/packages/datadog-instrumentations/src/aws-sdk.js:46:24) {
  '$metadata': {
    httpStatusCode: 200,
    requestId: 'a769fd06-6640-4205-9c3f-2561a886b8a9',
    extendedRequestId: undefined,
    cfId: undefined,
    attempts: 1,
    totalRetryDelay: 0
  }
}

Node.js v22.17.0

@github-actions
Copy link

github-actions bot commented Nov 25, 2025

Overall package size

Self size: 13.62 MB
Deduped: 113.82 MB
No deduping: 128.83 MB

Dependency sizes | name | version | self size | total size | |------|---------|-----------|------------| | @datadog/libdatadog | 0.7.0 | 35.02 MB | 35.02 MB | | @datadog/native-appsec | 10.3.0 | 20.73 MB | 20.74 MB | | @datadog/pprof | 5.12.0 | 11.19 MB | 11.57 MB | | @datadog/native-iast-taint-tracking | 4.1.0 | 9.01 MB | 9.02 MB | | @opentelemetry/resources | 1.30.1 | 557.67 kB | 7.71 MB | | @opentelemetry/core | 1.30.1 | 908.66 kB | 7.16 MB | | protobufjs | 7.5.4 | 2.95 MB | 5.83 MB | | @datadog/wasm-js-rewriter | 5.0.1 | 2.82 MB | 3.53 MB | | @datadog/native-metrics | 3.1.1 | 1.02 MB | 1.43 MB | | @opentelemetry/api-logs | 0.208.0 | 199.48 kB | 1.42 MB | | @opentelemetry/api | 1.9.0 | 1.22 MB | 1.22 MB | | jsonpath-plus | 10.3.0 | 617.18 kB | 1.08 MB | | import-in-the-middle | 1.15.0 | 127.66 kB | 856.24 kB | | lru-cache | 10.4.3 | 804.3 kB | 804.3 kB | | @datadog/openfeature-node-server | 0.2.0 | 118.51 kB | 437.19 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.2.1 | 163.06 kB | 163.06 kB | | @datadog/sketches-js | 2.1.1 | 109.9 kB | 109.9 kB | | @isaacs/ttlcache | 2.1.3 | 90.79 kB | 90.79 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 | | 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 | | module-details-from-path | 1.0.4 | 3.96 kB | 3.96 kB | | escape-string-regexp | 5.0.0 | 3.66 kB | 3.66 kB |

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

@pr-commenter
Copy link

pr-commenter bot commented Nov 25, 2025

Benchmarks

Benchmark execution time: 2025-12-08 15:12:38

Comparing candidate commit 621b928 in PR branch sabrenner/aws-sqs-regression-recursion with baseline commit 4b11d91 in branch master.

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

@codecov
Copy link

codecov bot commented Nov 25, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 84.83%. Comparing base (4b11d91) to head (621b928).
⚠️ Report is 3 commits behind head on master.

Additional details and impacted files
@@           Coverage Diff           @@
##           master    #6991   +/-   ##
=======================================
  Coverage   84.83%   84.83%           
=======================================
  Files         517      517           
  Lines       22050    22050           
=======================================
  Hits        18707    18707           
  Misses       3343     3343           

☔ 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.

@sabrenner sabrenner marked this pull request as ready for review November 26, 2025 14:58
@sabrenner sabrenner requested review from a team as code owners November 26, 2025 14:58
Copy link
Collaborator

@BridgeAR BridgeAR left a comment

Choose a reason for hiding this comment

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

Do you know why this method would be wrapped multiple times while the main part would not cause the same problem? I am confused about that part.

@datadog-datadog-prod-us1
Copy link

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

✅ Tests

🎉 All green!

❄️ No new flaky tests detected
🧪 All tests passed

This comment will be updated automatically if new data arrives.
🔗 Commit SHA: 621b928 | Docs | Datadog PR Page | Was this helpful? Give us feedback!

@BridgeAR BridgeAR enabled auto-merge (squash) December 8, 2025 15:09
@BridgeAR BridgeAR disabled auto-merge December 8, 2025 15:09
@BridgeAR BridgeAR enabled auto-merge (squash) December 8, 2025 15:10
@BridgeAR BridgeAR merged commit 46db106 into master Dec 8, 2025
787 checks passed
@BridgeAR BridgeAR deleted the sabrenner/aws-sqs-regression-recursion branch December 8, 2025 15:20
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.

[BUG]: Infinite recursion in aws-sdk instrumentation on dd-trace 5.80.0

3 participants