MSE907 failover study
Run artifacts
Results
Run artifacts
Each measured run produced one artifact in GitHub Actions: a zip with the load generator’s attempt log, the ledger check, the change events and the evidence collected from both clusters. All 40 are listed here, one download each. The all-runs zip also holds the failed first attempt of A-podkill-06. Zips stored with the site download directly; the rest are fetched from GitHub when you click.
The zips are the raw evidence behind every figure on the dashboard. The run table’s RTO, loss and window numbers come from each zip’s result.json.
Download all measured runs (one zip) Built when you click, so it can take 10 to 30 seconds to start. Contains the 40 run zips and a README.
| Run | Fault | Direction | Started (NZ) | RTO (s) | Result | Size | Download |
|---|---|---|---|---|---|---|---|
| A-partition-01 | partition | AKS to EKS | 25 Oct, 19:27 | 21.8 | No loss | run-A-partition-01.zip | |
| A-partition-02 | partition | AKS to EKS | 25 Oct, 20:35 | 23.7 | No loss | run-A-partition-02.zip | |
| A-partition-03 | partition | AKS to EKS | 25 Oct, 20:52 | 22.2 | No loss | run-A-partition-03.zip | |
| A-partition-04 | partition | AKS to EKS | 25 Oct, 21:59 | 75.6 | No loss | run-A-partition-04.zip | |
| A-partition-05 | partition | AKS to EKS | 25 Oct, 22:17 | 22.6 | No loss | run-A-partition-05.zip | |
| A-partition-06 | partition | EKS to AKS | 26 Oct, 02:32 | 78.0 | No loss | run-A-partition-06.zip | |
| A-partition-07 | partition | EKS to AKS | 26 Oct, 03:39 | 77.6 | No loss | run-A-partition-07.zip | |
| A-partition-08 | partition | EKS to AKS | 26 Oct, 03:56 | 76.7 | No loss | run-A-partition-08.zip | |
| A-partition-09 | partition | EKS to AKS | 26 Oct, 05:02 | 76.9 | No loss | run-A-partition-09.zip | |
| A-partition-10 | partition | EKS to AKS | 26 Oct, 05:20 | 77.6 | No loss | run-A-partition-10.zip | |
| A-podkill-01 | pod-kill | AKS to EKS | 25 Oct, 15:53 | 31.3 | No loss | run-A-podkill-01.zip | |
| A-podkill-02 | pod-kill | AKS to EKS | 25 Oct, 17:02 | 31.2 | No loss | run-A-podkill-02.zip | |
| A-podkill-03 | pod-kill | AKS to EKS | 25 Oct, 17:19 | 31.1 | No loss | run-A-podkill-03.zip | |
| A-podkill-04 | pod-kill | AKS to EKS | 25 Oct, 18:27 | 31.1 | No loss | run-A-podkill-04.zip | |
| A-podkill-05 | pod-kill | AKS to EKS | 25 Oct, 18:44 | 31.1 | No loss | run-A-podkill-05.zip | |
| A-podkill-06-rerun | pod-kill | EKS to AKS | 26 Oct, 20:08 | 25.0 | No loss | run-A-podkill-06-rerun.zip | |
| A-podkill-07 | pod-kill | EKS to AKS | 26 Oct, 00:08 | 30.8 | No loss | run-A-podkill-07.zip | |
| A-podkill-08 | pod-kill | EKS to AKS | 26 Oct, 00:25 | 30.8 | No loss | run-A-podkill-08.zip | |
| A-podkill-09 | pod-kill | EKS to AKS | 26 Oct, 01:31 | 31.4 | No loss | run-A-podkill-09.zip | |
| A-podkill-10 | pod-kill | EKS to AKS | 26 Oct, 01:48 | 31.2 | No loss | run-A-podkill-10.zip | |
| B-partition-01 | partition | AKS to EKS | 25 Oct, 19:53 | 172.7 | 682 lost | run-B-partition-01.zip | |
| B-partition-02 | partition | AKS to EKS | 25 Oct, 20:16 | 172.2 | 667 lost | run-B-partition-02.zip | |
| B-partition-03 | partition | AKS to EKS | 25 Oct, 21:16 | 173.8 | 667 lost | run-B-partition-03.zip | |
| B-partition-04 | partition | AKS to EKS | 25 Oct, 21:41 | 172.7 | 685 lost | run-B-partition-04.zip | |
| B-partition-05 | partition | AKS to EKS | 25 Oct, 22:41 | 172.2 | 684 lost | run-B-partition-05.zip | |
| B-partition-06 | partition | EKS to AKS | 26 Oct, 02:57 | 166.1 | 751 lost | run-B-partition-06.zip | |
| B-partition-07 | partition | EKS to AKS | 26 Oct, 03:21 | 166.4 | 746 lost | run-B-partition-07.zip | |
| B-partition-08 | partition | EKS to AKS | 26 Oct, 04:20 | 165.5 | 751 lost | run-B-partition-08.zip | |
| B-partition-09 | partition | EKS to AKS | 26 Oct, 04:44 | 166.5 | 746 lost | run-B-partition-09.zip | |
| B-partition-10 | partition | EKS to AKS | 26 Oct, 05:45 | 167.9 | 732 lost | run-B-partition-10.zip | |
| B-podkill-01 | pod-kill | AKS to EKS | 25 Oct, 16:19 | 182.4 | 619 lost | run-B-podkill-01.zip | |
| B-podkill-02 | pod-kill | AKS to EKS | 25 Oct, 16:43 | 181.8 | 621 lost | run-B-podkill-02.zip | |
| B-podkill-03 | pod-kill | AKS to EKS | 25 Oct, 17:44 | 181.7 | 621 lost | run-B-podkill-03.zip | |
| B-podkill-04 | pod-kill | AKS to EKS | 25 Oct, 18:10 | 182.8 | 618 lost | run-B-podkill-04.zip | |
| B-podkill-05 | pod-kill | AKS to EKS | 25 Oct, 19:08 | 181.3 | 617 lost | run-B-podkill-05.zip | |
| B-podkill-06 | pod-kill | EKS to AKS | 25 Oct, 23:27 | 181.5 | 654 lost | run-B-podkill-06.zip | |
| B-podkill-07 | pod-kill | EKS to AKS | 25 Oct, 23:50 | 184.2 | 645 lost | run-B-podkill-07.zip | |
| B-podkill-08 | pod-kill | EKS to AKS | 26 Oct, 00:49 | 147.7 | 644 lost | run-B-podkill-08.zip | |
| B-podkill-09 | pod-kill | EKS to AKS | 26 Oct, 01:14 | 183.7 | 639 lost | run-B-podkill-09.zip | |
| B-podkill-10 | pod-kill | EKS to AKS | 26 Oct, 02:13 | 181.7 | 656 lost | run-B-podkill-10.zip |
Hover a download link to see its SHA-256. GitHub artifact ids for each run (the 40 runs, the repeat and the H3 runs) are in artifacts.tsv; the original files live in the private repository’s Actions tab (artifacts are kept for the repository’s retention period, 90 days by default, so a copy stored with the site is the permanent record).
The H3 runs
The ten matched pairs of the H3 test (replay of lost writes) are saved the same way: one artifact per run. H3-A-NN is the run with replay on and H3-control-NN the same pair with replay off. All twenty ran AKS to EKS on 25 and 26 October 2026. They are not part of the 40 measured runs, and the zips have the same layout (see the list below).
Download the 20 H3 runs (one zip)
| Run | Pair | Replay | Gap | Recovered | Lost | Duplicated | RTO (s) | Download |
|---|---|---|---|---|---|---|---|---|
| H3-A-01 | 1 | on | 76 | 99 | 0 | 0 | 61.6 | run-H3-A-01.zip |
| H3-A-02 | 2 | on | 76 | 98 | 0 | 0 | 62.2 | run-H3-A-02.zip |
| H3-A-03 | 3 | on | 75 | 104 | 0 | 0 | 59.8 | run-H3-A-03.zip |
| H3-A-04 | 4 | on | 75 | 97 | 0 | 0 | 62.7 | run-H3-A-04.zip |
| H3-A-05 | 5 | on | 76 | 101 | 0 | 0 | 60.4 | run-H3-A-05.zip |
| H3-A-06 | 6 | on | 75 | 102 | 0 | 0 | 59.8 | run-H3-A-06.zip |
| H3-A-07 | 7 | on | 76 | 107 | 0 | 0 | 57.1 | run-H3-A-07.zip |
| H3-A-08 | 8 | on | 77 | 101 | 0 | 0 | 62.4 | run-H3-A-08.zip |
| H3-A-09 | 9 | on | 77 | 105 | 0 | 0 | 59.7 | run-H3-A-09.zip |
| H3-A-10 | 10 | on | 77 | 103 | 0 | 0 | 51.9 | run-H3-A-10.zip |
| H3-control-01 | 1 | off | 77 | 0 | 107 | 0 | 57.3 | run-H3-control-01.zip |
| H3-control-02 | 2 | off | 76 | 0 | 105 | 0 | 56.9 | run-H3-control-02.zip |
| H3-control-03 | 3 | off | 76 | 0 | 97 | 0 | 61.4 | run-H3-control-03.zip |
| H3-control-04 | 4 | off | 76 | 0 | 104 | 0 | 58.2 | run-H3-control-04.zip |
| H3-control-05 | 5 | off | 77 | 0 | 107 | 0 | 56.0 | run-H3-control-05.zip |
| H3-control-06 | 6 | off | 75 | 0 | 100 | 0 | 59.7 | run-H3-control-06.zip |
| H3-control-07 | 7 | off | 76 | 0 | 106 | 0 | 58.4 | run-H3-control-07.zip |
| H3-control-08 | 8 | off | 76 | 0 | 100 | 0 | 61.9 | run-H3-control-08.zip |
| H3-control-09 | 9 | off | 76 | 0 | 97 | 0 | 61.2 | run-H3-control-09.zip |
| H3-control-10 | 10 | off | 76 | 0 | 107 | 0 | 57.2 | run-H3-control-10.zip |
Gap = acknowledged payments missing on the standby just before the primary was killed. Recovered = payments the reconciler wrote back (replay on). Lost = acknowledged payments missing at the end. Values are from each run’s result.json, as summarised by the H3 analysis.
What is inside a zip
| File | What it holds |
|---|---|
run.json, result.json | The run record: condition, fault, direction, seed, fault time, and the measured result (RTO, RPO, outcome counts). |
attempts.jsonl | Every payment attempt the load generator made: send and end time, HTTP status, error, which site answered and the address it reached. |
ledger.jsonl, writes.csv | Each payment id the client was told succeeded, matched against what the database holds. |
cdc.jsonl | Debezium change events captured from Kafka (the change log the reconciler replays). |
loadgen.json, loadgen.out | Load generator settings (5 payments/s, 210 s, retry window 120 s, seed) and totals. |
controller-status.json | The FailoverPolicy status at the end of the run: active site, lease epoch, failover history, probe streaks. |
reconciliation.json | The reconciler’s pass over the change log: which payments were clean, delayed, lost or duplicated. |
eks-*.log, eks-db-diagnostics.txt | Evidence collected from the clusters during the run: app readiness, database endpoints, pod events. |
connect-log.txt, connectors.txt | Debezium Kafka Connect log and connector state. |
run-summary.prom | The same result as Prometheus gauges. |
The list is from run A-podkill-06-rerun. The exact file set can differ by condition and fault (condition B has no controller), so check a zip before relying on a file being present.
A-podkill-06 and its repeat. The first attempt (25 October, run-A-podkill-06) was a failed fault injection and is not in the figures; its folder also held stale files from an earlier partition run on 24 October. The figures use the repeat, run-A-podkill-06-rerun (26 October).