mirror of
https://github.com/hanzoai/datastore.git
synced 2026-09-26 13:55:07 +00:00
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]>
43 lines
1.7 KiB
Bash
Executable File
43 lines
1.7 KiB
Bash
Executable File
#!/bin/bash
|
|
set -e
|
|
|
|
mkdir -p /etc/docker/
|
|
echo '{
|
|
"ipv6": true,
|
|
"fixed-cidr-v6": "fd00::/8",
|
|
"ip-forward": true,
|
|
"log-level": "debug",
|
|
"storage-driver": "overlay2",
|
|
"features": {
|
|
"containerd-snapshotter": false
|
|
},
|
|
"insecure-registries" : ["dockerhub-proxy.dockerhub-proxy-zone:5000"],
|
|
"registry-mirrors" : ["http://dockerhub-proxy.dockerhub-proxy-zone:5000"],
|
|
"log-driver": "json-file",
|
|
"log-opts": {
|
|
"max-size": "100m",
|
|
"max-file": "3"
|
|
}
|
|
}' | dd of=/etc/docker/daemon.json
|
|
|
|
# if [ -f /sys/fs/cgroup/cgroup.controllers ]; then
|
|
# # move the processes from the root group to the /init group,
|
|
# # otherwise writing subtree_control fails with EBUSY.
|
|
# # An error during moving non-existent process (i.e., "cat") is ignored.
|
|
# mkdir -p /sys/fs/cgroup/init
|
|
# xargs -rn1 < /sys/fs/cgroup/cgroup.procs > /sys/fs/cgroup/init/cgroup.procs || :
|
|
# # enable controllers
|
|
# sed -e 's/ / +/g' -e 's/^/+/' < /sys/fs/cgroup/cgroup.controllers \
|
|
# > /sys/fs/cgroup/cgroup.subtree_control
|
|
# fi
|
|
|
|
# Binding to an IP address without --tlsverify is deprecated. Startup is intentionally being slowed
|
|
# unless --tls=false or --tlsverify=false is set
|
|
#
|
|
# In case of test hung it is convenient to use pytest --pdb to debug it,
|
|
# and on hung you can simply press Ctrl-C and it will spawn a python pdb,
|
|
# but on SIGINT dockerd will exit, so we spawn new session to ignore SIGINT by
|
|
# docker.
|
|
# Note, that if you will run it via runner, it will send SIGINT to docker anyway.
|
|
setsid dockerd --host=unix:///var/run/docker.sock --tls=false --host=tcp://0.0.0.0:2375 --default-address-pool base=172.17.0.0/12,size=24
|