Repository navigation
v6.2.0
Stroppy 6.2.0
Stroppy 6.2.0 expands the Go-native workload SDK, adds standalone workload authoring and distribution, and turns saved run reports into a local analysis workflow.
Highlights
Saved reports, capture, and comparison
- Manage saved runs with
stroppy reports: list/filter, retrieve, remove/prune, and inspect history health. - Browse a local report catalog with
stroppy reports serve, or export self-contained HTML readable offline and without JavaScript. - Independently capture timestamped metrics and structured logs with
--capture-metricsand--capture-logs. Download complete recording bundles; inspect timelines, phase events, and expandable logs. - Compare saved runs in the CLI or catalog: exact numeric deltas, configuration differences, elapsed-time timelines, grouped histogram summaries, and stable run colors. Missing measurements remain missing, not zero.
- Reports use Stroppy kit 0.1.0 styling, embedded fonts, and optional interactive charts with static SVG and numeric-table fallbacks. Catalog filters include saved workload/driver values and complete metric/log capture toggles.
Go workload authoring and distribution
- Define workloads with
bench.Test, typed parameters, named drivers, immediate execution steps, typed metrics, and structured report contributions. - Scaffold and publish source with
stroppy init/eject; build and manage custom workloads withbuild,list,remove, andcache inspect. - Export portable binaries containing built-in and selected custom workloads. Local builds support explicit
--source-rootSDK selection and report the SDK origin they use. - Use public noop/recording test helpers and runnable authoring examples.
Workloads, drivers, and performance
- Add
crdb,yugabyte, andtidbdriver presets with engine-aware SQL assets and transaction defaults, including TPC-H CockroachDB support and TiDB transaction assets for TPC-B/TPC-C. - Add
bankingbalance/token invariant checks and the PostgreSQLbanking/injectfault-injection variant. Read the verification limitation below before relying on its verdict. - TPC-C supports optional warmup and spreading each VU's transactions across warehouses, independently of concurrency.
- Reduce metric-update contention and repeated-query allocation overhead; improve transaction error accounting, cancellation/drain behavior, report handling, and author tooling diagnostics.
Migration from 6.1.x
This release is versioned 6.2.0 but includes source and configuration incompatibilities.
- Change Go imports to
github.com/stroppy-io/stroppy/v6. Source builds require Go 1.27. Prebuilt binaries need no local Go installation for built-in workloads. - Migrate custom workloads from the former
Workloadlifecycle API tobench.Testdefinitions and immediate execution steps. See the workload authoring API and standalone workload guide. - Replace
-e key=valueand configenvwith typed CLI flags, projected process environment variables, and configparams/runfields. - Select timed execution explicitly with
--executor constant-vus;DURATIONalone no longer chooses an executor.
Known issues
- Banking verification can hide an observed invariant violation when a later retry succeeds. Do not treat a successful banking run as conclusive corruption-test evidence until #217 is fixed.
- TPC-DS engine mapping is incomplete: TiDB selects PostgreSQL baked SQL, and generated streams reject TiDB/YugabyteDB names. Until #218 is fixed, use
-d mysqlfor TiDB or-d pgfor YugabyteDB with the target's explicit URL. - TPC-C procedures are unavailable on TiDB:
tpcc/procs -d tidbcan reach a missing-query panic instead of rejecting the combination before setup. Usetpcc/tx -d tidb; tracked in #219.
These issues remain open for patch releases.
Downloads
Four standalone archives are provided: Linux and macOS, each for amd64 and arm64. Each binary embeds the pg-noop server used by stroppy baseline.
See the complete changelog and changes since v6.1.1.
What's Changed
- fix(module): adopt v6 import path by @Cianidos in #181
- feat(stroppy): support standalone workload applications by @Cianidos in #183
- feat(catalog): manage local custom workloads by @Cianidos in #184
- feat: export portable Stroppy binaries with managed Go builds by @Cianidos in #185
- feat: cache reproducible custom workload builds by @Cianidos in #186
- feat(api): complete and stabilize public workload authoring by @Cianidos in #187
- feat(authoring): add workload starter, testkit, and source ejection by @Cianidos in #188
- perf: scale metric updates and eliminate warm-path allocations by @Cianidos in #189
- fix: custom-workload help and an explicit SDK source root by @deadtrickster in #191
- test(modulecompat): hold the published samples to the authoring contract by @deadtrickster in #192
- Fix TPC-C pacing and measurement; add warehouse spread and warmup by @Cianidos in #195
- fix(bench): record a rejected COMMIT as an ended transaction by @deadtrickster in #204
- docs(agents): comments earn their place by saying why, not what by @deadtrickster in #211
- feat(workloads): add the banking workload and a fault-injecting variant by @deadtrickster in #205
- fix(tpcc): stop the warmup test depending on which transactions a 30 ms run happens to make by @deadtrickster in #208
- feat(driver): crdb, yugabyte and tidb — kinds, assets, isolation and CI by @deadtrickster in #206
- fix(banking): the YDB asset used a statement YDB cannot parse by @deadtrickster in #212
- docs(banking): say what the token witness actually catches by @deadtrickster in #213
- feat(reports): add saved run history lifecycle CLI by @Cianidos in #199
- feat(reports): add script-free HTML export and local viewer by @Cianidos in #203
- feat(reports): capture metric evolution and correlated logs by @Cianidos in #209
- feat(reports): compare saved runs in CLI and web views by @Cianidos in #210
- feat(reports): adopt Stroppy kit with progressive chart enhancement by @Cianidos in #216
New Contributors
- @deadtrickster made their first contribution in #191
Full Changelog: v6.1.1...v6.2.0