Skip to content

feat(bench): Add Bigtable load testing tool#358

Draft
jan-auer wants to merge 7 commits intomainfrom
feat/bigtable-bench
Draft

feat(bench): Add Bigtable load testing tool#358
jan-auer wants to merge 7 commits intomainfrom
feat/bigtable-bench

Conversation

@jan-auer
Copy link
Member

@jan-auer jan-auer commented Mar 5, 2026

Adds bigtable-bench, a CLI tool for load testing the Bigtable backend directly — bypassing the HTTP layer and writing objects via BigTableBackend. Intended for use with the Bigtable emulator or Toxiproxy to simulate realistic network conditions.

The tool prints live latency percentiles (avg, p50, p95, p99, max), overall throughput, and per-connection throughput every second. Failed requests are counted and shown in red. On shutdown, the live display is cleared and a final summary is printed.

Note: Also makes objectstore_service::backend public (with missing_docs suppressed) so the bench can access BigTableBackend directly without duplicating connection setup.

Note: Run with RUSTFLAGS=-Awarnings to suppress warnings.

jan-auer added 7 commits March 5, 2026 17:07
Adds bigtable-bench, a CLI tool that writes objects directly to the
BigTableBackend and prints live latency percentiles, throughput, and
failure counts. Supports configurable concurrency, object size,
connection pool size, and emulator address (for use with Toxiproxy).
Adds --project, --instance, --table flags and makes --addr optional so
the bench can connect to a real GCP Bigtable instance (using gcp_auth
for credentials) in addition to the local emulator.

All objects are now written with a 1h TTL to avoid polluting production
tables during load tests.
When connecting to real GCP Bigtable, rustls requires an explicit
CryptoProvider because both aws-lc-rs and ring are enabled as
transitive dependencies. Install aws-lc-rs as the default at startup.
Prints bytes/s alongside ops/s in both the live display and final
summary, using SI decimal prefixes (kB/s, MB/s, GB/s).
* main:
  fix(gcp): Prefetch GCP tokens for GCS and BigTable backends (#362)
  feat(service): Log backend retry/failure errors (#360)
  feat(server): Add service tag to request metrics (#361)
  perf(service): Zero-copy stream buffering for insert_object (#357)
- Fix ops/s/conn to divide by pool size (connection count) rather than
  concurrency (in-flight request count)
- Print latencies (avg/p50/p95/p99/max) on a separate line with aligned columns
- Show elapsed time (M:SS) in the live stats header and final summary
- Use debug-nonroot distroless image for easier container inspection
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant