Files
zlareb1andClaude Sonnet 4.6 35e48faf43 keeper stress: add Keeper stress test framework
Adds a stress testing framework for ClickHouse Keeper under
`tests/stress/keeper/`, wired into CI (PR gate + nightly workflows).

Key components:
- Workloads: `keeper_bench.py` runner with YAML-defined workload profiles
  (`prod_mix.yaml`, `read_requests.yaml`, `write_requests.yaml`, etc.)
- Scenarios: `core_no_faults.yaml` and `core_faults.yaml` with netem-based
  network fault injection (latency, jitter, packet loss)
- Fault framework: `faults/network.py` (netem), `faults/base.py` (step
  dispatcher with `kind: parallel` support)
- Metrics: `MetricsSampler` collects keeper stats, `sink.py` writes JSONL,
  ingested into CIDB via `ingest_keeper_metrics.py` post-hook
- Gates: scenario pass/fail conditions based on RPS, p99 latency, error rate
- Grafana dashboards for run details, 1vs1 comparison, historical progression

CI integration:
- PR job: 3 no-fault scenarios (prod-mix, read-multi, write-multi), ARM_LARGE,
  15 min each, runs when `src/Coordination/` or stress test files change
- Nightly (no-faults): all no-fault scenarios, default + rocks backends, ARM_LARGE
- Nightly (faults): all fault scenarios, default + rocks backends, ARM_LARGE
- Single `keeper_stress_job` config; mode detected via `Info().pr_number` and
  `Info().workflow_name` inside the job script

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
2026-03-21 16:08:00 +00:00

58 lines
1.2 KiB
YAML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
name: multi_large_requests
# 100% multi with batch size 10–30 (create + set). Stresses multi transaction path and log batching; same setup as prod_mix.
concurrency: 640
report_delay: 0.0
continue_on_error: true
connections:
operation_timeout_ms: 30000
connection_timeout_ms: 400000
setup:
node:
name: e2e
node:
name: prod
node:
- name: hot
data:
random_string:
size:
min_value: 0
max_value: 162
- name: pool
node:
- repeat: 64
name:
random_string:
size: 12
data:
random_string:
size:
min_value: 0
max_value: 162
- name: churn
generator:
requests:
multi:
size:
min_value: 10
max_value: 30
create:
path: /e2e/prod/churn
data:
random_string:
size:
min_value: 0
max_value: 162
remove_factor: 0.3
set:
path: /e2e/prod/hot
data:
random_string:
size:
min_value: 0
max_value: 162
weight: 100