fix(remote-config): refresh fetcher identity - #2469
Conversation
A resumed process changes its client and runtime identifiers, but an existing fetcher keeps the snapshot identity. Updating the identity in place preserves client and file state for later polls. Refs: DataDog/dd-trace-js#10067 (comment)
BenchmarksComparisonBenchmark execution time: 2026-09-04 18:19:45 Comparing candidate commit 0e3783a in PR branch Found 0 performance improvements and 0 performance regressions! Performance is the same for 14 metrics, 0 unstable metrics.
|
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8175M CPU @ 2.50GHz | 0e3783a | 1788545147 | BridgeAR/2026-09-04-microvm-rc-identity |
| 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.442ms | 21.525ms ± 0.029ms | 21.523ms ± 0.019ms | 21.544ms | 21.575ms | 21.588ms | 21.611ms | 0.41% | 0.121 | 0.082 | 0.14% | 0.002ms | 1 | 200 |
| flagevaluation_evp/payloads/scale/2500flags_500users_20fields | throughput | 115683.753op/s | 116144.077op/s ± 158.549op/s | 116157.327op/s ± 103.688op/s | 116246.565op/s | 116382.557op/s | 116510.960op/s | 116596.214op/s | 0.38% | -0.113 | 0.081 | 0.14% | 11.211op/s | 1 | 200 |
| flagevaluation_evp/payloads/stress/10flags_1000users_250fields | execution_time | 95.932ms | 96.577ms ± 0.489ms | 96.529ms ± 0.146ms | 96.737ms | 96.882ms | 97.045ms | 102.656ms | 6.35% | 9.584 | 117.645 | 0.51% | 0.035ms | 1 | 200 |
| flagevaluation_evp/payloads/stress/10flags_1000users_250fields | throughput | 9741.230op/s | 10354.656op/s ± 50.074op/s | 10359.594op/s ± 15.633op/s | 10369.381op/s | 10403.190op/s | 10421.247op/s | 10424.094op/s | 0.62% | -9.164 | 110.943 | 0.48% | 3.541op/s | 1 | 200 |
| flagevaluation_evp/payloads/typical/100flags_50users_10fields | execution_time | 594.425µs | 596.478µs ± 0.897µs | 596.484µs ± 0.589µs | 597.075µs | 597.972µs | 598.872µs | 599.201µs | 0.46% | 0.232 | -0.054 | 0.15% | 0.063µs | 1 | 200 |
| flagevaluation_evp/payloads/typical/100flags_50users_10fields | throughput | 166888.812op/s | 167651.017op/s ± 251.978op/s | 167649.012op/s ± 165.536op/s | 167813.956op/s | 168051.564op/s | 168194.561op/s | 168229.823op/s | 0.35% | -0.224 | -0.062 | 0.15% | 17.818op/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.521ms; 21.529ms] or [-0.019%; +0.019%] | None | None | None |
| flagevaluation_evp/payloads/scale/2500flags_500users_20fields | throughput | [116122.103op/s; 116166.050op/s] or [-0.019%; +0.019%] | None | None | None |
| flagevaluation_evp/payloads/stress/10flags_1000users_250fields | execution_time | [96.509ms; 96.645ms] or [-0.070%; +0.070%] | None | None | None |
| flagevaluation_evp/payloads/stress/10flags_1000users_250fields | throughput | [10347.716op/s; 10361.595op/s] or [-0.067%; +0.067%] | None | None | None |
| flagevaluation_evp/payloads/typical/100flags_50users_10fields | execution_time | [596.354µs; 596.603µs] or [-0.021%; +0.021%] | None | None | None |
| flagevaluation_evp/payloads/typical/100flags_50users_10fields | throughput | [167616.095op/s; 167685.938op/s] or [-0.021%; +0.021%] | None | None | None |
Group 2
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8175M CPU @ 2.50GHz | 0e3783a | 1788545147 | BridgeAR/2026-09-04-microvm-rc-identity |
| 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 | 257.147µs | 263.403µs ± 12.163µs | 260.423µs ± 1.213µs | 262.491µs | 275.325µs | 323.648µs | 384.584µs | 47.68% | 6.837 | 56.148 | 4.61% | 0.860µ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.717µs; 265.088µs] or [-0.640%; +0.640%] | None | None | None |
Group 3
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8175M CPU @ 2.50GHz | 0e3783a | 1788545147 | BridgeAR/2026-09-04-microvm-rc-identity |
| 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 | 156.023ns | 159.622ns ± 2.727ns | 159.094ns ± 1.606ns | 160.858ns | 164.318ns | 167.239ns | 171.436ns | 7.76% | 1.176 | 2.073 | 1.70% | 0.193ns | 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 | [159.244ns; 160.000ns] or [-0.237%; +0.237%] | None | None | None |
Group 4
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8175M CPU @ 2.50GHz | 0e3783a | 1788545147 | BridgeAR/2026-09-04-microvm-rc-identity |
| 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.343ms | 5.363ms ± 0.008ms | 5.363ms ± 0.005ms | 5.369ms | 5.375ms | 5.382ms | 5.392ms | 0.54% | 0.214 | 0.426 | 0.14% | 0.001ms | 1 | 200 |
| flagevaluation_evp/coalescer/scale/2500flags_500users_20fields | throughput | 463656.021op/s | 466145.076op/s ± 659.218op/s | 466170.975op/s ± 462.990op/s | 466553.911op/s | 467146.083op/s | 467485.156op/s | 467862.370op/s | 0.36% | -0.204 | 0.408 | 0.14% | 46.614op/s | 1 | 200 |
| flagevaluation_evp/coalescer/stress/10flags_1000users_250fields | execution_time | 7.904ms | 7.936ms ± 0.012ms | 7.935ms ± 0.005ms | 7.942ms | 7.957ms | 7.977ms | 8.002ms | 0.84% | 1.100 | 4.907 | 0.16% | 0.001ms | 1 | 200 |
| flagevaluation_evp/coalescer/stress/10flags_1000users_250fields | throughput | 124975.885op/s | 126005.668op/s ± 196.041op/s | 126026.705op/s ± 86.066op/s | 126092.141op/s | 126353.491op/s | 126442.357op/s | 126511.277op/s | 0.38% | -1.074 | 4.806 | 0.16% | 13.862op/s | 1 | 200 |
| flagevaluation_evp/coalescer/typical/100flags_50users_10fields | execution_time | 177.811µs | 181.694µs ± 0.826µs | 181.595µs ± 0.333µs | 182.015µs | 182.869µs | 183.278µs | 187.870µs | 3.46% | 1.167 | 18.801 | 0.45% | 0.058µs | 1 | 200 |
| flagevaluation_evp/coalescer/typical/100flags_50users_10fields | throughput | 532284.378op/s | 550386.994op/s ± 2490.773op/s | 550675.601op/s ± 1010.789op/s | 551593.573op/s | 552243.069op/s | 558973.227op/s | 562395.430op/s | 2.13% | -0.907 | 17.662 | 0.45% | 176.124op/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.362ms; 5.364ms] or [-0.020%; +0.020%] | None | None | None |
| flagevaluation_evp/coalescer/scale/2500flags_500users_20fields | throughput | [466053.715op/s; 466236.437op/s] or [-0.020%; +0.020%] | None | None | None |
| flagevaluation_evp/coalescer/stress/10flags_1000users_250fields | execution_time | [7.934ms; 7.938ms] or [-0.022%; +0.022%] | None | None | None |
| flagevaluation_evp/coalescer/stress/10flags_1000users_250fields | throughput | [125978.499op/s; 126032.838op/s] or [-0.022%; +0.022%] | None | None | None |
| flagevaluation_evp/coalescer/typical/100flags_50users_10fields | execution_time | [181.580µs; 181.809µs] or [-0.063%; +0.063%] | None | None | None |
| flagevaluation_evp/coalescer/typical/100flags_50users_10fields | throughput | [550041.797op/s; 550732.191op/s] or [-0.063%; +0.063%] | 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 | 64ad2ed | 1788533433 | 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.404ms | 21.490ms ± 0.041ms | 21.484ms ± 0.028ms | 21.526ms | 21.557ms | 21.567ms | 21.571ms | 0.41% | 0.145 | -0.850 | 0.19% | 0.003ms | 1 | 200 |
| flagevaluation_evp/payloads/scale/2500flags_500users_20fields | throughput | 115893.691op/s | 116332.926op/s ± 223.693op/s | 116365.172op/s ± 150.714op/s | 116490.662op/s | 116697.021op/s | 116766.585op/s | 116803.133op/s | 0.38% | -0.139 | -0.849 | 0.19% | 15.817op/s | 1 | 200 |
| flagevaluation_evp/payloads/stress/10flags_1000users_250fields | execution_time | 94.925ms | 95.561ms ± 0.490ms | 95.493ms ± 0.323ms | 95.833ms | 95.917ms | 96.116ms | 100.910ms | 5.67% | 6.545 | 68.933 | 0.51% | 0.035ms | 1 | 200 |
| flagevaluation_evp/payloads/stress/10flags_1000users_250fields | throughput | 9909.803op/s | 10464.769op/s ± 52.020op/s | 10471.970op/s ± 35.394op/s | 10490.596op/s | 10517.253op/s | 10521.006op/s | 10534.627op/s | 0.60% | -6.125 | 62.938 | 0.50% | 3.678op/s | 1 | 200 |
| flagevaluation_evp/payloads/typical/100flags_50users_10fields | execution_time | 597.401µs | 598.770µs ± 0.560µs | 598.765µs ± 0.363µs | 599.134µs | 599.614µs | 600.277µs | 600.673µs | 0.32% | 0.122 | 0.546 | 0.09% | 0.040µs | 1 | 200 |
| flagevaluation_evp/payloads/typical/100flags_50users_10fields | throughput | 166479.837op/s | 167009.160op/s ± 156.045op/s | 167010.389op/s ± 101.236op/s | 167102.676op/s | 167264.390op/s | 167378.061op/s | 167391.622op/s | 0.23% | -0.115 | 0.539 | 0.09% | 11.034op/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.484ms; 21.496ms] or [-0.027%; +0.027%] | None | None | None |
| flagevaluation_evp/payloads/scale/2500flags_500users_20fields | throughput | [116301.924op/s; 116363.928op/s] or [-0.027%; +0.027%] | None | None | None |
| flagevaluation_evp/payloads/stress/10flags_1000users_250fields | execution_time | [95.493ms; 95.629ms] or [-0.071%; +0.071%] | None | None | None |
| flagevaluation_evp/payloads/stress/10flags_1000users_250fields | throughput | [10457.559op/s; 10471.978op/s] or [-0.069%; +0.069%] | None | None | None |
| flagevaluation_evp/payloads/typical/100flags_50users_10fields | execution_time | [598.693µs; 598.848µs] or [-0.013%; +0.013%] | None | None | None |
| flagevaluation_evp/payloads/typical/100flags_50users_10fields | throughput | [166987.533op/s; 167030.786op/s] or [-0.013%; +0.013%] | None | None | None |
Group 2
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8175M CPU @ 2.50GHz | 64ad2ed | 1788533433 | 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 | 257.170µs | 263.156µs ± 12.315µs | 260.251µs ± 1.123µs | 261.852µs | 274.181µs | 309.060µs | 393.246µs | 51.10% | 7.385 | 66.722 | 4.67% | 0.871µ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.449µs; 264.862µs] or [-0.649%; +0.649%] | None | None | None |
Group 3
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8175M CPU @ 2.50GHz | 64ad2ed | 1788533433 | 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 | 156.199ns | 159.107ns ± 2.339ns | 158.763ns ± 1.605ns | 160.495ns | 163.502ns | 165.780ns | 166.841ns | 5.09% | 0.903 | 0.520 | 1.47% | 0.165ns | 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 | [158.782ns; 159.431ns] or [-0.204%; +0.204%] | None | None | None |
Group 4
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8175M CPU @ 2.50GHz | 64ad2ed | 1788533433 | 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.329ms | 5.345ms ± 0.008ms | 5.344ms ± 0.004ms | 5.349ms | 5.357ms | 5.363ms | 5.395ms | 0.95% | 1.434 | 6.920 | 0.15% | 0.001ms | 1 | 200 |
| flagevaluation_evp/coalescer/scale/2500flags_500users_20fields | throughput | 463388.615op/s | 467749.241op/s ± 691.955op/s | 467788.745op/s ± 393.880op/s | 468162.021op/s | 468695.550op/s | 468968.751op/s | 469157.383op/s | 0.29% | -1.404 | 6.703 | 0.15% | 48.929op/s | 1 | 200 |
| flagevaluation_evp/coalescer/stress/10flags_1000users_250fields | execution_time | 7.971ms | 8.008ms ± 0.011ms | 8.007ms ± 0.006ms | 8.014ms | 8.023ms | 8.036ms | 8.046ms | 0.49% | -0.201 | 1.423 | 0.14% | 0.001ms | 1 | 200 |
| flagevaluation_evp/coalescer/stress/10flags_1000users_250fields | throughput | 124284.638op/s | 124879.274op/s ± 175.368op/s | 124890.271op/s ± 89.438op/s | 124964.100op/s | 125200.171op/s | 125407.072op/s | 125451.705op/s | 0.45% | 0.215 | 1.430 | 0.14% | 12.400op/s | 1 | 200 |
| flagevaluation_evp/coalescer/typical/100flags_50users_10fields | execution_time | 180.188µs | 183.851µs ± 0.741µs | 183.753µs ± 0.360µs | 184.304µs | 185.057µs | 185.516µs | 186.115µs | 1.29% | -0.968 | 5.944 | 0.40% | 0.052µs | 1 | 200 |
| flagevaluation_evp/coalescer/typical/100flags_50users_10fields | throughput | 537303.080op/s | 543928.545op/s ± 2199.744op/s | 544207.492op/s ± 1065.911op/s | 545115.964op/s | 546002.485op/s | 551830.080op/s | 554977.454op/s | 1.98% | 1.054 | 6.306 | 0.40% | 155.545op/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.344ms; 5.346ms] or [-0.021%; +0.021%] | None | None | None |
| flagevaluation_evp/coalescer/scale/2500flags_500users_20fields | throughput | [467653.343op/s; 467845.139op/s] or [-0.021%; +0.021%] | None | None | None |
| flagevaluation_evp/coalescer/stress/10flags_1000users_250fields | execution_time | [8.006ms; 8.009ms] or [-0.019%; +0.019%] | None | None | None |
| flagevaluation_evp/coalescer/stress/10flags_1000users_250fields | throughput | [124854.970op/s; 124903.579op/s] or [-0.019%; +0.019%] | None | None | None |
| flagevaluation_evp/coalescer/typical/100flags_50users_10fields | execution_time | [183.748µs; 183.953µs] or [-0.056%; +0.056%] | None | None | None |
| flagevaluation_evp/coalescer/typical/100flags_50users_10fields | throughput | [543623.682op/s; 544233.409op/s] or [-0.056%; +0.056%] | None | None | None |
📚 Documentation Check Results📦
|
🔒 Cargo Deny Results📦
|
|
For MicroVMs, we need to be able to refresh the IDs, thus the PR. |
There was a problem hiding this comment.
More details
The new setter updates all request identity fields. It keeps the existing client and file state.
🤖 Datadog Autotest · Commit 5d495df · What is Autotest? · @DataDog review to ask questions · Any feedback? Reach out in #autotest
|
✅ All CI checks and tests passed. 🎉 All green!🧪 All tests passed 🎯 Code Coverage (details) 🔗 Commit SHA: 0e3783a | Docs | View more details | Give us feedback! |
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
|
This comes from a signature change on Fetcher::fetch_once()
bwoebi
left a comment
There was a problem hiding this comment.
I left a small change dropping the Arc<> altogether. Looks good.
A resumed process changes its client and runtime identifiers, but an existing fetcher keeps the snapshot identity. Updating the identity in place preserves client and file state for later polls. Refs: DataDog/dd-trace-js#10067 (comment)