Skip to content

feat(debugger): add snapshot time budget#6952

Closed
watson wants to merge 5 commits intomasterfrom
watson/DEBUG-4727/debugger-snapshot-time-budget2
Closed

feat(debugger): add snapshot time budget#6952
watson wants to merge 5 commits intomasterfrom
watson/DEBUG-4727/debugger-snapshot-time-budget2

Conversation

@watson
Copy link
Copy Markdown
Collaborator

@watson watson commented Nov 20, 2025

This PR is a re-creating of #6897 which GitLab somehow got confused about and failed to check out.

What does this PR do?

  • Enforces a per-snapshot time budget for Dynamic Instrumentation debugger snapshots.
  • Default budget is 15ms; configurable via:
    • Env var: DD_DYNAMIC_INSTRUMENTATION_CAPTURE_TIMEOUT_MS
    • Programmatic: tracer.init({ dynamicInstrumentation: { captureTimeoutMs }})
  • When the budget is exceeded, remaining values that are not already resolved or in the process of being resolved (awaiting a session.post promise), are marked with notCapturedReason: 'timeout'.
  • Enforce max concurrency when resolving object properties (previously objects would have their properties resolved in parallel, now we enforce a max concurrency of two)
  • Adds unit and integration tests to validate partial snapshots under tight budgets.

Motivation

Prevent snapshot collection from exceeding acceptable latency and resource usage in complex/large object graphs.

Additional Notes

Depends on DataDog/system-tests#5705

Not covered by this PR:

Enforce a per-snapshot time budget. By default this budget is 10ms, but
can be modified by the experimental config, either as an environment
variable:

    DD_DYNAMIC_INSTRUMENTATION_CAPTURE_TIMEOUT_MS=20

Or programatically:

    tracer.init({
      dynamicInstrumentation: {
        captureTimeoutMs: 20
      }
    })

When the budget is exceeded, remaining values that are not already
resolved, are marked with `notCapturedReason: 'timeout'`.
@watson watson requested review from a team as code owners November 20, 2025 12:46
@watson watson requested review from BridgeAR and removed request for a team November 20, 2025 12:46
@github-actions
Copy link
Copy Markdown
Contributor

Overall package size

Self size: 13.26 MB
Deduped: 116.17 MB
No deduping: 131.18 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/native-iast-taint-tracking | 4.0.0 | 11.72 MB | 11.73 MB | | @datadog/pprof | 5.12.0 | 11.19 MB | 11.57 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.1 | 90.58 kB | 90.58 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

@watson watson self-assigned this Nov 20, 2025
@watson watson closed this Nov 20, 2025
@watson watson deleted the watson/DEBUG-4727/debugger-snapshot-time-budget2 branch November 20, 2025 13:07
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.

1 participant