Skip to content

Load Suite Catalog

The load suite registry is the executable acceptance catalog for Atlas performance and resilience. It currently declares 40 scenarios. Thirty-nine are must-pass; redis-optional is comparative rather than release-blocking.

Lane Coverage

Lane Declared scenarios Intended decision
smoke 2 Fast mixed-traffic and cheap-path survival confidence
pr 2 Pull-request regression signal for the same focused surface
load-ci 2 Dedicated CI execution of the focused load gate
full 32 Broad capacity, pressure, resilience, and delivery review
hpa-validation 1 Focused autoscaling behavior
nightly 40 Complete scheduled load catalog
load-nightly 40 Complete dedicated load lane

Lane membership is declared per scenario in ops/load/suites/suites.json. Do not infer that a scenario ran because a lane name sounds broad; preserve the selected scenario list in the report.

Suite Contract

flowchart LR
    N["Name and purpose"] --> R["Scenario or specialized runner"]
    R --> L["Execution lanes"]
    L --> M["Required metrics"]
    M --> T["Scenario thresholds"]
    T --> V["Must-pass verdict"]

Each registry entry binds:

  • a durable scenario name and operating question;
  • a K6 script or specialized runner;
  • the lanes in which it must execute;
  • metrics that must be present for evidence to be complete;
  • absolute latency, failure, startup, memory, or survival budgets;
  • whether failure blocks the suite.

The registry uses the pinned request set at ops/load/queries/pinned-v1.json. A workload with different requests is a different experiment and cannot silently reuse the same baseline.

Current Executable Boundary

The 40-entry registry contains 37 K6 entries and three specialized script entries. It is broader than the manifest consumed by ops load run: ops/load/load.toml currently wires only mixed, diff_heavy, and hpa_validation_short to K6 scripts.

The three specialized registry entries are cold-start-prefetch-5pods, load-under-rollout, and load-under-rollback. Their runner paths point to Python files under an absent historical source layout. They are specifications, not executable runners in the current repository.

flowchart LR
    Catalog[40-entry suite registry] --> Declared[Lane and threshold intent]
    Manifest[3-suite load.toml] --> OpsRun[ops load run]
    OpsRun --> K6[Measured K6 execution]
    Catalog -. only shared names are runnable .-> Manifest
    Missing[3 absent specialized runners] --> Gap[Declared coverage gap]

Before reporting lane coverage, intersect the requested registry members with the executable manifest and verify every referenced file. A generated catalog summary can be complete while the execution surface remains much smaller.

Reconcile Declared and Executed Coverage

A lane name is a selection request, not proof of execution. Reconciliation must join the requested registry members to runnable implementations and then to records emitted by the same run.

flowchart LR
    Requested["requested scenario IDs"] --> Runnable{"runner exists and is wired?"}
    Runnable -- no --> Incomplete["coverage incomplete"]
    Runnable -- yes --> Executed{"execution record present?"}
    Executed -- no --> Incomplete
    Executed -- yes --> Verdict{"required metrics and verdict present?"}
    Verdict -- no --> Incomplete
    Verdict -- yes --> Passed{"scenario passed?"}
    Passed -- no --> Failed["lane failed"]
    Passed -- yes --> Complete["scenario complete"]
Evidence set Required meaning Failure meaning
Requested Exact selected registry members Selection is unknown
Runnable Every member has a wired runner Coverage is not executable
Executed Every runner has a record Execution or reporting stopped
Metrics Every required metric is present Execution is incomplete
Verdicts Policy evaluated every metric record Acceptance is undecided

The absent specialized runners currently prevent complete execution of full, nightly, and load-nightly. A report for any of those lanes must name the missing IDs and fail coverage; silently reducing the selected set changes the experiment.

Classify each incomplete member as unresolved runner, runner start failure, interrupted execution, missing metric, invalid record, or threshold failure. Preserve every attempt. Replacing a failed attempt with a successful retry removes evidence about instability and is not an acceptable reconciliation.

Restore Scenario Preconditions

Scenarios in one lane can change cache contents, HPA replicas, pod revisions, catalog state, dependency health, and background work. The next scenario is valid only after its declared starting condition is observed, not merely after the prior process exits.

Precondition Evidence before the scenario starts
release and dataset exact runtime, catalog, store, and dataset identities match the plan
cache required cold, warm, pinned, or empty state is observed and generation-bound
capacity replica count, resource limits, HPA state, node pressure, and generator headroom match the profile
dependencies store, Redis, catalog, DNS, and telemetry have the required healthy or injected-failure state
background work prior rollout, warmup, recovery, compaction, and request drain have completed or are intentionally part of the scenario
observation required metrics, logs, traces, clocks, and release labels are available before offered load begins
stateDiagram-v2
    [*] --> Reconcile
    Reconcile --> Ready: all declared preconditions observed
    Reconcile --> Incomplete: state cannot be established
    Ready --> Execute
    Execute --> Preserve: results and residual state retained
    Preserve --> Reconcile: next scenario

Use isolated targets when restoration cannot be proven cheaply or when a fault may leave ambiguous state. Preserve residual state from the previous scenario as evidence; resetting without recording it can hide slow recovery, leaked work, or persistent corruption. Lane ordering must not become an undocumented input to the result.

Scenario Families

  • Core service: mixed, cheap-only-survival, warm steady state, and cold start.
  • Cache and store: stampede, cache thrashing, artifact reload, dataset churn, Redis comparison, and store outage.
  • Query shape: sharded fanout, hot spots, diff-heavy, cursor stress, and mixed gene/sequence traffic.
  • Capacity: read-heavy, write-heavy, ingest/query, CPU, disk I/O, and thread exhaustion.
  • Delivery: pod churn, rollout, rollback, HPA validation, and multi-release access.
  • Endurance: long-running stability, memory-leak detection, and soak.
  • Security: response abuse, denial-of-service resilience, malicious input, injection, penetration simulation, and regression suites.

Accepting a Suite Result

A suite result is valid only when the scenario identity, runner, query pack, profile, required metrics, and threshold version are recorded together. Missing metrics fail completeness even if the process exits successfully. Must-pass scenarios block the enclosing lane when their contract fails.

ops/load/generated/load-summary.json currently reports complete scenario coverage and a deterministic seed of 11001. That generated inventory proves registry coverage; it does not prove that a particular workload execution passed.

Use Thresholds and Budgets for pass semantics and Baseline Management for regression comparisons.