docs planning RUST_STATION_INGESTION_RST12 - AlexandreZanata/Abastevo GitHub Wiki
RST-12 — Measurement harness and instrumentation qualification
Status: IMPLEMENTED — harness/tooling only; no production load, no
database change, no new dependency (Python stdlib). Date: 2026-10-09.
Scope: RUST_STATION_BENCHMARK_PLAN.md RST-12, dependency RST-11
(IMPLEMENTED). Language: English document; user communication in
Portuguese.
B-BR/BUC: B-BR-RST-P02 (frozen sample schema, pinned clocks/units), B-BR-RST-P04 (isolated loopback qualification, disposable DB only), B-BR-RST-P06 (raw samples reconcile to counters; timeouts/drops are failures, never omitted). Serves BUC-RST-P04 (capacity) and BUC-RST-P05 (regression detection).
1. What was added
infra/scripts/load/stats.py(extended, legacy CLI unchanged): raw-sample schema v1 (scheduled_ms,started_ms,completed_ms,status,bytes, monotonic ms, optional header);summarizewith offered/started/completed/successful/dropped/cancelled/timeouts/ wrong/error classes, err rate over offered, success-only p50/p90/p95/p99/max plus scheduling-delay stats and a reconcile flag; fixed-buckethistogram_of/merge_histograms(split runs merge into exactly the whole run);compare_overheadpaired on/off-telemetry aid (deltas + watch beyond 10%, reporting only);--samplesmode exits 1 on budget breach or mismatch and 2 with REFUSED (no traceback) on truncated/unreadable input. Extended--self-test: slow fixture breaches (never healthy), mixed error/drop/timeout/wrong/cancel accounting, histogram merge equality, truncated/empty input refusal.infra/scripts/load/drive.py(new, stdlib only): closed-loop 1/8/32-client driver and open-arrival-rate driver with bounded slots (overload becomes counted drops = generator-limited, never silent demand reduction). Layers separate by construction (scheduled→started vs started→completed); DB statements and EXPLAIN stay in diagnostic runs, never in timed requests. UTC wall start, monotonic intervals,--deadline-msright-censoring,--expect-substringsemantic check (wrong), abandon-at-teardown (cancel),--telemetry on|offmanifest tag for paired trials.--self-testqualifies every path against a loopback fake server: fast/timeout/non-2xx/wrong/cancel/drop, counter reconciliation on each CSV, unwritable-output refusal.scripts/tests/test-load.sh: runsdrive.py --self-testafter the stats self-test.run.sh/faults.shuntouched.
2. Evidence
stats.py --self-test: ok (legacy percentiles + 7 new fixture groups).drive.py --self-test: 9/9 PASS, 0 failures (loopback, ~6 s).shellcheckon the touched shell file: clean.py_compileon both scripts: clean.- Affected-consumer run
test-load.shon the disposable dev DB: drive self-test 0 failures; load smoke 46,546 requests, p95 15 ms, 5xx rate 0.0000 within budgets; faults 6/7 PASS. - Known pre-existing failure (unchanged by this task, reproduced
on a clean tree without RST-12 changes):
faults.sh"readiness returns after recovery" FAILs on this host (API readiness does not return promptly after DB stop/start). Outage still fails closed (refused/503, never false-healthy); recovery of the DB itself passes. Fixing readiness recovery is a separate backend task, not RST-12 scope. - Exit criteria: a slow fixture reports breach (exit 1), an erroring fixture reports errors (exit 1), truncated samples refuse (exit 2), and every produced CSV reconciles (offered == completed + dropped + cancelled). No zero-filling: unavailable tools/permissions refuse explicitly.
3. Limits and next task
- No measured campaign latency, DB seeding, or telemetry on/off paired trial here; those execute under RST-13+ with this harness. Open-rate scheduling is thread/cadence-based (no k6; new load tools still need need/license/security review).
- Next (smallest, separately authorized): RST-13 Rust preparation, spill and resource scaling.