feat(bench): add managed nightly RPC benchmarks - #3944
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #3944 +/- ##
==========================================
- Coverage 74.77% 74.63% -0.15%
==========================================
Files 461 461
Lines 40928 40928
==========================================
- Hits 30605 30546 -59
- Misses 8223 8282 +59
Partials 2100 2100
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
a70bc65 to
dcb6bf9
Compare
a19dee7 to
17d0c39
Compare
17d0c39 to
72969ea
Compare
72969ea to
a39478c
Compare
a39478c to
49fe138
Compare
49fe138 to
70d5234
Compare
|
Claude finished @danielntmd's task in 8m 14s —— View job Review: managed nightly RPC benchmarks
Solid, careful work — atomic staged generation with The findings below are mostly about operability of the reuse scheme — what happens on the days when inputs change. BlockerNone. Important
Nit
Note: I reviewed by reading — the sandbox here blocked running |
70d5234 to
9fc4bb4
Compare
|
Claude finished @danielntmd's task in 3m 41s —— View job Re-review: managed nightly RPC benchmarks
The two items you marked addressed are genuinely fixed, and both came with test coverage rather than just code:
Everything else stands as you left it — the deferrals (argument normalization, incompatible-case recovery, the warmup cap, corpus shape assertion, the viewer's Four small things on the new code: BlockerNone. Important
Nit
Note: as last time, the sandbox blocked |
| juno: {version: ($juno_version | optional), imageDigest: ($juno_image | optional), chainId: ($chain_id | optional), | ||
| blockNumber: $block_number, rpcVersion: ($rpc_version | optional)}, | ||
| snapshot: {id: ($snapshot_id | optional), sha256: ($snapshot_sha | optional), blockNumber: $block_number}, | ||
| load: {vus: $vus, duration: ($duration | optional)}, |
There was a problem hiding this comment.
important: load is a self-reported claim from the environment, not an observation of what k6 actually ran, so it can disagree with the measurement it annotates.
VUS/DURATION are read from the environment here, while the load profile actually applied comes from K6_ARGS (line 28 → line 203). Nothing ties the two together — run-all.sh never reads VUS for anything except this field.
The new test demonstrates the divergence: run_managed (test-case-artifacts.sh:205) exports VUS=50 DURATION=30s and then invokes run-all.sh "${config}" http://localhost with no k6 flags at all, yet test-case-artifacts.sh:270 asserts .load == {vus: 50, duration: "30s"}. The artifact records a load profile that was never applied, and the test locks that in as correct.
Under nightly.sh the two agree today because run() builds the flags from the same variables, but that's a coincidence of the caller, and this artifact is published as run provenance for exactly the "why did p99 move?" question. Deriving it from what k6 reported (the exported summary carries a vus_max metric — worth confirming the shape against k6 1.7's --summary-export) or, failing that, from "${K6_ARGS[@]}" would make the field an observation instead of a claim.
Package corpus generation and k6 replay in a benchmark image with a stable preflight, generation, and run interface for scheduled execution. Reconcile per-case corpora on persistent storage using snapshot identity, RPC version, generator metadata, and checksums. Warm and replay active cases sequentially, preserve per-case failures, enforce strict k6 checks, and emit compact summaries with canonical load and per-case corpus provenance. Bound preflight RPC requests so stalled nodes fail predictably. Publish latest and commit-addressed images through CI, provide Compose for local execution, and include a static viewer for latest and historical results. ArgoCD supplies the schedule, fixed-snapshot node, persistent volumes, runtime image identities, and result publication.
9fc4bb4 to
9601b24
Compare
|
Claude finished @danielntmd's task in 4m 11s —— View job Re-review: managed nightly RPC benchmarks
Three of the four items from the last round are fixed, each with a test or a doc change behind it:
The fourth ( Nothing regressed. The reuse path, checksum verification, BlockerNone. Important
Nit
Not worth an inline comment: the previously-noted deferrals (argument normalization, incompatible-case recovery, the warmup cap, corpus shape assertion, Note: as in both prior rounds, the sandbox blocked |
Summary