Skip to content

v6.2.0

Choose a tag to compare

@Cianidos Cianidos released this 20 Oct 07:09

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-metrics and --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 with build, list, remove, and cache inspect.
  • Export portable binaries containing built-in and selected custom workloads. Local builds support explicit --source-root SDK 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, and tidb driver presets with engine-aware SQL assets and transaction defaults, including TPC-H CockroachDB support and TiDB transaction assets for TPC-B/TPC-C.
  • Add banking balance/token invariant checks and the PostgreSQL banking/inject fault-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 Workload lifecycle API to bench.Test definitions and immediate execution steps. See the workload authoring API and standalone workload guide.
  • Replace -e key=value and config env with typed CLI flags, projected process environment variables, and config params / run fields.
  • Select timed execution explicitly with --executor constant-vus; DURATION alone 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 mysql for TiDB or -d pg for YugabyteDB with the target's explicit URL.
  • TPC-C procedures are unavailable on TiDB: tpcc/procs -d tidb can reach a missing-query panic instead of rejecting the combination before setup. Use tpcc/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

Full Changelog: v6.1.1...v6.2.0