Skip to main content

Chaos / HA qualification

Issue #15. Two tracks:

  1. In-tree (CI) — no etcd, no SSH, no live QEMU. Deterministic fail-safe tests.
  2. Live lab — scripts/chaos-qualify.sh against a running fabricd + FluxVM.

In-tree scenarios​

ScenarioExpected fail-safeTest
Interrupted / corrupt backup archiverestore returns error; target tree not treated as successbackup::interrupted_archive_does_not_restore
Backup round-tripconfig + disk bytes restoredbackup::create_list_restore_delete_roundtrip
Quorum: 1 of 3 heartbeats freshcheck_quorum is falsefault-tolerance::quorum::minority_alive_loses_quorum
Quorum: 2 of 3 freshtruemajority_alive_keeps_quorum
Stale HA heartbeat (>30s)node unhealthyha::stale_heartbeat_marks_node_unhealthy
Evacuation migration fails mid-jobjob Failed, host left cordoned, no uncordonhost-lifecycle::migration_failure_marks_job_failed_and_leaves_host_cordoned
Invalid VM name on migrate cancelerror, no pkillmigration name validation (live script)

Live lab scenarios (scripts/chaos-qualify.sh)​

These are skipped unless FABRIC_URL is reachable.

ScenarioInjectExpected
fabricd kill mid-startkill -9 during POST /api/vms/:name/start/readyz recovers after restart; VM not left "Starting" forever (driver owns state)
FluxVM downstop FluxVM process/readyz fluxvm.ok=false; create/start fail closed
Disk fullbackup dest on tiny tmpfscreate_backup errors; no truncated-success metadata
Interrupted snapshotSIGSTOP fabricd during snapshot409/5xx; disk-only snapshot does not advertise Completed

Record outcomes under docs/proven-infra/runs/. Do not mark FEATURES.md "HA clustering" as proven from track 1 alone.