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]>
32 lines
925 B
Python
32 lines
925 B
Python
from praktika import Job, Workflow
|
|
|
|
from ci.defs.defs import BASE_BRANCH, DOCKERS, SECRETS, ArtifactConfigs, ArtifactNames, BuildTypes
|
|
from ci.defs.job_configs import JobConfigs
|
|
|
|
binary_build_job = Job.Config.get_job(
|
|
JobConfigs.build_jobs, f"Build ({BuildTypes.ARM_BINARY})"
|
|
).set_provides(ArtifactNames.CH_ARM_BINARY, reset=True)
|
|
|
|
# Fault run: Mon / Wed / Fri
|
|
workflow = Workflow.Config(
|
|
name="NightlyKeeperFaults",
|
|
event=Workflow.Event.SCHEDULE,
|
|
branches=[BASE_BRANCH],
|
|
jobs=[
|
|
binary_build_job,
|
|
JobConfigs.keeper_stress_job.set_name("Keeper Stress (Faults)"),
|
|
],
|
|
artifacts=[
|
|
*ArtifactConfigs.clickhouse_binaries,
|
|
],
|
|
dockers=DOCKERS,
|
|
secrets=SECRETS,
|
|
enable_cache=True,
|
|
enable_report=True,
|
|
enable_cidb=True,
|
|
cron_schedules=["17 1 * * 1,3,5"],
|
|
pre_hooks=["python3 ./ci/jobs/scripts/workflow_hooks/store_data.py"],
|
|
)
|
|
|
|
WORKFLOWS = [workflow]
|