Files
datastore/tests/stress/keeper/workloads/write_multi_requests.yaml
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

82 lines
1.6 KiB
YAML

name: write_multi_requests
# Write with batch multi (create/set in one Multi). Same paths/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:
create:
path:
- /e2e/prod/churn
- /e2e/prod/pool
- children_of: /e2e/prod/pool
name_length:
min_value: 8
max_value: 16
data:
random_string:
size:
min_value: 0
max_value: 162
remove_factor: 0.49
weight: 25
set:
path:
- /e2e/prod/hot
- children_of: /e2e/prod/pool
data:
random_string:
size:
min_value: 0
max_value: 162
weight: 25
multi:
size:
min_value: 5
max_value: 15
create:
path: /e2e/prod/churn
data:
random_string:
size:
min_value: 0
max_value: 162
set:
path: /e2e/prod/hot
data:
random_string:
size:
min_value: 0
max_value: 162
weight: 50