feat(remote-config): add an agentless fetcher constructor - #2456
Conversation
📚 Documentation Check Results📦
|
🔒 Cargo Deny Results✅ No issues found! 📦
|
|
✅ All CI checks and tests passed. 🎉 All green!🧪 All tests passed 🎯 Code Coverage (details) 🔗 Commit SHA: f4e3e5e | Docs | View more details | Give us feedback! |
BenchmarksComparisonBenchmark execution time: 2026-09-09 21:56:20 Comparing candidate commit f4e3e5e in PR branch Found 1 performance improvements and 0 performance regressions! Performance is the same for 12 metrics, 1 unstable metrics.
|
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8175M CPU @ 2.50GHz | f4e3e5e | 1788989402 | BridgeAR/2026-09-03-wasm-remote-agentless |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| flagevaluation_evp/coalescer/scale/2500flags_500users_20fields | execution_time | 5.319ms | 5.335ms ± 0.008ms | 5.335ms ± 0.005ms | 5.340ms | 5.348ms | 5.357ms | 5.364ms | 0.54% | 0.561 | 0.841 | 0.14% | 0.001ms | 1 | 200 |
| flagevaluation_evp/coalescer/scale/2500flags_500users_20fields | throughput | 466102.726op/s | 468581.504op/s ± 665.453op/s | 468628.958op/s ± 406.619op/s | 469010.742op/s | 469547.832op/s | 469961.886op/s | 469991.689op/s | 0.29% | -0.550 | 0.818 | 0.14% | 47.055op/s | 1 | 200 |
| flagevaluation_evp/coalescer/stress/10flags_1000users_250fields | execution_time | 7.930ms | 7.978ms ± 0.013ms | 7.978ms ± 0.004ms | 7.982ms | 7.992ms | 8.021ms | 8.057ms | 0.98% | 0.721 | 10.720 | 0.16% | 0.001ms | 1 | 200 |
| flagevaluation_evp/coalescer/stress/10flags_1000users_250fields | throughput | 124121.915op/s | 125338.397op/s ± 199.956op/s | 125337.793op/s ± 63.706op/s | 125403.462op/s | 125530.455op/s | 126012.646op/s | 126095.677op/s | 0.60% | -0.663 | 10.552 | 0.16% | 14.139op/s | 1 | 200 |
| flagevaluation_evp/coalescer/typical/100flags_50users_10fields | execution_time | 171.024µs | 183.692µs ± 57.335µs | 179.723µs ± 0.248µs | 179.995µs | 180.590µs | 181.257µs | 990.289µs | 451.01% | 14.026 | 194.819 | 31.13% | 4.054µs | 1 | 200 |
| flagevaluation_evp/coalescer/typical/100flags_50users_10fields | throughput | 100980.623op/s | 554420.553op/s ± 32471.801op/s | 556411.497op/s ± 765.797op/s | 557097.907op/s | 558079.943op/s | 583251.590op/s | 584714.539op/s | 5.09% | -13.703 | 189.046 | 5.84% | 2296.103op/s | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| flagevaluation_evp/coalescer/scale/2500flags_500users_20fields | execution_time | [5.334ms; 5.336ms] or [-0.020%; +0.020%] | None | None | None |
| flagevaluation_evp/coalescer/scale/2500flags_500users_20fields | throughput | [468489.278op/s; 468673.729op/s] or [-0.020%; +0.020%] | None | None | None |
| flagevaluation_evp/coalescer/stress/10flags_1000users_250fields | execution_time | [7.977ms; 7.980ms] or [-0.022%; +0.022%] | None | None | None |
| flagevaluation_evp/coalescer/stress/10flags_1000users_250fields | throughput | [125310.685op/s; 125366.109op/s] or [-0.022%; +0.022%] | None | None | None |
| flagevaluation_evp/coalescer/typical/100flags_50users_10fields | execution_time | [175.746µs; 191.638µs] or [-4.326%; +4.326%] | None | None | None |
| flagevaluation_evp/coalescer/typical/100flags_50users_10fields | throughput | [549920.273op/s; 558920.832op/s] or [-0.812%; +0.812%] | None | None | None |
Group 2
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8175M CPU @ 2.50GHz | f4e3e5e | 1788989402 | BridgeAR/2026-09-03-wasm-remote-agentless |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| sdk_test_data/rules-based | execution_time | 256.983µs | 262.914µs ± 12.024µs | 259.972µs ± 1.326µs | 261.914µs | 276.312µs | 312.494µs | 381.544µs | 46.76% | 6.640 | 53.998 | 4.56% | 0.850µs | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| sdk_test_data/rules-based | execution_time | [261.248µs; 264.580µs] or [-0.634%; +0.634%] | None | None | None |
Group 3
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8175M CPU @ 2.50GHz | f4e3e5e | 1788989402 | BridgeAR/2026-09-03-wasm-remote-agentless |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| flagevaluation_evp/payloads/scale/2500flags_500users_20fields | execution_time | 21.737ms | 21.867ms ± 0.076ms | 21.854ms ± 0.045ms | 21.905ms | 22.006ms | 22.082ms | 22.133ms | 1.28% | 1.016 | 1.137 | 0.35% | 0.005ms | 1 | 200 |
| flagevaluation_evp/payloads/scale/2500flags_500users_20fields | throughput | 112951.569op/s | 114329.832op/s ± 396.247op/s | 114396.037op/s ± 233.137op/s | 114609.809op/s | 114836.887op/s | 114942.186op/s | 115011.086op/s | 0.54% | -0.995 | 1.074 | 0.35% | 28.019op/s | 1 | 200 |
| flagevaluation_evp/payloads/stress/10flags_1000users_250fields | execution_time | 102.899ms | 103.593ms ± 0.460ms | 103.479ms ± 0.216ms | 103.824ms | 104.337ms | 104.726ms | 107.474ms | 3.86% | 3.471 | 24.115 | 0.44% | 0.033ms | 1 | 200 |
| flagevaluation_evp/payloads/stress/10flags_1000users_250fields | throughput | 9304.563op/s | 9653.355op/s ± 42.255op/s | 9663.815op/s ± 20.105op/s | 9677.523op/s | 9694.308op/s | 9708.783op/s | 9718.289op/s | 0.56% | -3.291 | 22.073 | 0.44% | 2.988op/s | 1 | 200 |
| flagevaluation_evp/payloads/typical/100flags_50users_10fields | execution_time | 591.867µs | 593.877µs ± 0.612µs | 593.893µs ± 0.407µs | 594.280µs | 594.896µs | 595.328µs | 595.486µs | 0.27% | 0.012 | 0.144 | 0.10% | 0.043µs | 1 | 200 |
| flagevaluation_evp/payloads/typical/100flags_50users_10fields | throughput | 167929.964op/s | 168385.106op/s ± 173.558op/s | 168380.389op/s ± 115.442op/s | 168498.118op/s | 168650.407op/s | 168744.142op/s | 168956.808op/s | 0.34% | -0.006 | 0.146 | 0.10% | 12.272op/s | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| flagevaluation_evp/payloads/scale/2500flags_500users_20fields | execution_time | [21.856ms; 21.877ms] or [-0.048%; +0.048%] | None | None | None |
| flagevaluation_evp/payloads/scale/2500flags_500users_20fields | throughput | [114274.916op/s; 114384.748op/s] or [-0.048%; +0.048%] | None | None | None |
| flagevaluation_evp/payloads/stress/10flags_1000users_250fields | execution_time | [103.529ms; 103.657ms] or [-0.062%; +0.062%] | None | None | None |
| flagevaluation_evp/payloads/stress/10flags_1000users_250fields | throughput | [9647.499op/s; 9659.211op/s] or [-0.061%; +0.061%] | None | None | None |
| flagevaluation_evp/payloads/typical/100flags_50users_10fields | execution_time | [593.793µs; 593.962µs] or [-0.014%; +0.014%] | None | None | None |
| flagevaluation_evp/payloads/typical/100flags_50users_10fields | throughput | [168361.052op/s; 168409.159op/s] or [-0.014%; +0.014%] | None | None | None |
Group 4
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8175M CPU @ 2.50GHz | f4e3e5e | 1788989402 | BridgeAR/2026-09-03-wasm-remote-agentless |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| single_flag_killswitch/rules-based | execution_time | 163.540ns | 166.388ns ± 2.468ns | 165.925ns ± 1.434ns | 167.405ns | 170.539ns | 173.646ns | 180.111ns | 8.55% | 2.249 | 8.390 | 1.48% | 0.175ns | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| single_flag_killswitch/rules-based | execution_time | [166.046ns; 166.731ns] or [-0.206%; +0.206%] | None | None | None |
Baseline
Baseline benchmark details
Group 1
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8175M CPU @ 2.50GHz | a2a1dfb | 1788978547 | main |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| flagevaluation_evp/coalescer/scale/2500flags_500users_20fields | execution_time | 5.352ms | 5.387ms ± 0.027ms | 5.386ms ± 0.009ms | 5.395ms | 5.406ms | 5.413ms | 5.730ms | 6.39% | 9.806 | 120.713 | 0.51% | 0.002ms | 1 | 200 |
| flagevaluation_evp/coalescer/scale/2500flags_500users_20fields | throughput | 436317.117op/s | 464054.777op/s ± 2248.287op/s | 464187.580op/s ± 776.427op/s | 464924.357op/s | 466069.478op/s | 466543.473op/s | 467147.109op/s | 0.64% | -9.403 | 114.149 | 0.48% | 158.978op/s | 1 | 200 |
| flagevaluation_evp/coalescer/stress/10flags_1000users_250fields | execution_time | 7.920ms | 7.951ms ± 0.011ms | 7.950ms ± 0.005ms | 7.957ms | 7.968ms | 7.980ms | 7.999ms | 0.62% | 0.492 | 3.130 | 0.13% | 0.001ms | 1 | 200 |
| flagevaluation_evp/coalescer/stress/10flags_1000users_250fields | throughput | 125013.178op/s | 125769.131op/s ± 167.095op/s | 125786.506op/s ± 78.514op/s | 125847.916op/s | 126026.940op/s | 126191.395op/s | 126270.077op/s | 0.38% | -0.472 | 3.086 | 0.13% | 11.815op/s | 1 | 200 |
| flagevaluation_evp/coalescer/typical/100flags_50users_10fields | execution_time | 178.093µs | 184.104µs ± 51.183µs | 180.346µs ± 0.312µs | 180.778µs | 181.680µs | 182.243µs | 904.264µs | 401.41% | 14.033 | 194.944 | 27.73% | 3.619µs | 1 | 200 |
| flagevaluation_evp/coalescer/typical/100flags_50users_10fields | throughput | 110587.235op/s | 551851.973op/s ± 31418.857op/s | 554490.001op/s ± 961.866op/s | 555315.603op/s | 556043.576op/s | 557922.619op/s | 561505.959op/s | 1.27% | -13.955 | 193.499 | 5.68% | 2221.649op/s | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| flagevaluation_evp/coalescer/scale/2500flags_500users_20fields | execution_time | [5.384ms; 5.391ms] or [-0.070%; +0.070%] | None | None | None |
| flagevaluation_evp/coalescer/scale/2500flags_500users_20fields | throughput | [463743.186op/s; 464366.368op/s] or [-0.067%; +0.067%] | None | None | None |
| flagevaluation_evp/coalescer/stress/10flags_1000users_250fields | execution_time | [7.950ms; 7.953ms] or [-0.018%; +0.018%] | None | None | None |
| flagevaluation_evp/coalescer/stress/10flags_1000users_250fields | throughput | [125745.973op/s; 125792.289op/s] or [-0.018%; +0.018%] | None | None | None |
| flagevaluation_evp/coalescer/typical/100flags_50users_10fields | execution_time | [177.010µs; 191.197µs] or [-3.853%; +3.853%] | None | None | None |
| flagevaluation_evp/coalescer/typical/100flags_50users_10fields | throughput | [547497.621op/s; 556206.324op/s] or [-0.789%; +0.789%] | None | None | None |
Group 2
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8175M CPU @ 2.50GHz | a2a1dfb | 1788978547 | main |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| sdk_test_data/rules-based | execution_time | 279.162µs | 285.431µs ± 11.960µs | 282.516µs ± 1.558µs | 284.518µs | 299.745µs | 335.360µs | 404.960µs | 43.34% | 6.613 | 54.665 | 4.18% | 0.846µs | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| sdk_test_data/rules-based | execution_time | [283.774µs; 287.089µs] or [-0.581%; +0.581%] | None | None | None |
Group 3
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8175M CPU @ 2.50GHz | a2a1dfb | 1788978547 | main |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| flagevaluation_evp/payloads/scale/2500flags_500users_20fields | execution_time | 21.979ms | 22.069ms ± 0.034ms | 22.071ms ± 0.021ms | 22.093ms | 22.123ms | 22.140ms | 22.165ms | 0.42% | -0.282 | 0.267 | 0.16% | 0.002ms | 1 | 200 |
| flagevaluation_evp/payloads/scale/2500flags_500users_20fields | throughput | 112790.010op/s | 113280.583op/s ± 176.224op/s | 113268.729op/s ± 108.623op/s | 113376.943op/s | 113615.208op/s | 113715.337op/s | 113742.832op/s | 0.42% | 0.292 | 0.271 | 0.16% | 12.461op/s | 1 | 200 |
| flagevaluation_evp/payloads/stress/10flags_1000users_250fields | execution_time | 103.660ms | 104.202ms ± 0.502ms | 104.084ms ± 0.180ms | 104.313ms | 104.680ms | 105.382ms | 109.810ms | 5.50% | 7.452 | 77.253 | 0.48% | 0.036ms | 1 | 200 |
| flagevaluation_evp/payloads/stress/10flags_1000users_250fields | throughput | 9106.628op/s | 9596.949op/s ± 44.676op/s | 9607.593op/s ± 16.598op/s | 9615.879op/s | 9630.750op/s | 9635.539op/s | 9646.963op/s | 0.41% | -7.118 | 72.041 | 0.46% | 3.159op/s | 1 | 200 |
| flagevaluation_evp/payloads/typical/100flags_50users_10fields | execution_time | 605.493µs | 607.561µs ± 0.745µs | 607.550µs ± 0.542µs | 608.096µs | 608.745µs | 609.259µs | 609.658µs | 0.35% | -0.005 | -0.183 | 0.12% | 0.053µs | 1 | 200 |
| flagevaluation_evp/payloads/typical/100flags_50users_10fields | throughput | 164026.303op/s | 164592.788op/s ± 201.912op/s | 164595.427op/s ± 146.790op/s | 164739.785op/s | 164890.495op/s | 165065.769op/s | 165154.596op/s | 0.34% | 0.012 | -0.182 | 0.12% | 14.277op/s | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| flagevaluation_evp/payloads/scale/2500flags_500users_20fields | execution_time | [22.064ms; 22.074ms] or [-0.022%; +0.022%] | None | None | None |
| flagevaluation_evp/payloads/scale/2500flags_500users_20fields | throughput | [113256.160op/s; 113305.006op/s] or [-0.022%; +0.022%] | None | None | None |
| flagevaluation_evp/payloads/stress/10flags_1000users_250fields | execution_time | [104.133ms; 104.272ms] or [-0.067%; +0.067%] | None | None | None |
| flagevaluation_evp/payloads/stress/10flags_1000users_250fields | throughput | [9590.757op/s; 9603.140op/s] or [-0.065%; +0.065%] | None | None | None |
| flagevaluation_evp/payloads/typical/100flags_50users_10fields | execution_time | [607.458µs; 607.664µs] or [-0.017%; +0.017%] | None | None | None |
| flagevaluation_evp/payloads/typical/100flags_50users_10fields | throughput | [164564.805op/s; 164620.771op/s] or [-0.017%; +0.017%] | None | None | None |
Group 4
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8175M CPU @ 2.50GHz | a2a1dfb | 1788978547 | main |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| single_flag_killswitch/rules-based | execution_time | 158.880ns | 162.245ns ± 2.771ns | 161.840ns ± 1.409ns | 163.260ns | 166.421ns | 172.725ns | 178.749ns | 10.45% | 2.497 | 9.897 | 1.70% | 0.196ns | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| single_flag_killswitch/rules-based | execution_time | [161.861ns; 162.629ns] or [-0.237%; +0.237%] | None | None | None |
Artifact Size Benchmark Reportaarch64-alpine-linux-musl
aarch64-unknown-linux-gnu
libdatadog-x64-windows
libdatadog-x86-windows
x86_64-alpine-linux-musl
x86_64-unknown-linux-gnu
|
Consumers that require agentless remote config should not have to express that invariant through an optional mode flag. The generic constructor also keeps the agent path reachable in builds that never use it. Add a constructor that accepts validated agentless configuration directly while sharing the common fetcher state. Request-level tests pin endpoint selection for both the dedicated and generic constructors.
3bb89cf to
f4e3e5e
Compare
There was a problem hiding this comment.
More details
The explicit agentless constructor uses one supplied configuration for its state and endpoint. The prior constructor still selects agent mode or agentless mode from the optional setting.
🤖 Datadog Autotest · Commit f4e3e5e · What is Autotest? · @DataDog review to ask questions · Any feedback? Reach out in #autotest
What does this PR do?
Adds an explicit agentless constructor for the single-target remote-config fetcher.
Motivation
Consumers with an agentless-only contract should not express it through an optional mode flag or retain generic transport dispatch.
Additional Notes
The libdatadog-nodejs consumer pins commit
3bb89cfd2ce3c6f4ee3e4009c74a77e4cf89adf8.How to test the change?
Run the remote-config tests, all-feature Clippy, and the no-default-features agentless check.