Zustand pro Dataset im Monitoring: verwaist, Kette gerissen, Kette in Gefahr #23

Closed
thorsten.spille wants to merge 0 commits from thorsten.spille/feature-21-dataset-states into main AGit

Setzt #21 um.

Problem

Das Monitoring kannte nur „n von m Datasets fehlgeschlagen“. Ein Dataset, das sich nie mehr von selbst erholt, sah aus wie ein einmaliger Fehler, und Replikate, deren Quelle gelöscht wurde, fielen gar nicht auf.

Zustand pro Dataset

zsync schreibt /var/lib/bashclub-zsync/<config>.datasets (Dataset, Zustand, seit, Detail) und loggt eine kopierbare Behebung:

Zustand Erkennung Check
broken kein Ziel-Snapshot existiert mehr auf der Quelle; Ursache aus den Erstellungszeiten: Rotation durchgelaufen oder Dataset neu angelegt CRIT
empty Replikat ohne Snapshots CRIT
at_risk Replikation fehlgeschlagen und die Basis ist der älteste Snapshot ihres Intervalls auf der Quelle – die nächste Rotation reißt die Kette WARN
diverged neuester Ziel-Snapshot fehlt auf der Quelle, neuester gemeinsamer wird genannt (Grundlage für #5) WARN
orphan_missing / orphan_unselected Replikat ohne Quelle bzw. nicht mehr ausgewählt; nur wenn die Quell-Datasets bekannt sind WARN nach 1 Tag
orphan_kept quittiert mit zfs set bashclub:zsync-orphan=keep <replikat> Hinweis
failed, no_snapshots, ok Hinweis

Behebung für broken/empty im Log: zfs rename <replikat> <replikat>.broken-<datum> – der alte Stand bleibt als Archiv, der nächste Lauf repliziert neu. Verwaiste Replikate werden nie automatisch gelöscht; das Log nennt Quittung und zfs destroy -rnv.

Zusätzliche Abfragen nur in den Fehlerpfaden, dazu drei lokale Abfragen für die verwaisten Replikate. Replikation und Löschen unverändert.

Tests

  • Szenarien 16 (alle Zustände der Kette) und 17 (verwaist, nicht ausgewählt, quittiert, Zwischenebene ohne Snapshots)
  • alle 17 Szenarien: verändernde Aufrufe identisch zu main
  • tests/checkmk.sh: 9 neue Fälle (39/39), u. a. Karenzzeit und gekürzte Listen
  • Zusammenspiel im Container: zsync-Lauf mit Szenario 16/17, danach der Check auf die erzeugten Dateien

Closes #21

🤖 Generated with Claude Code

Setzt #21 um. ## Problem Das Monitoring kannte nur „n von m Datasets fehlgeschlagen“. Ein Dataset, das sich nie mehr von selbst erholt, sah aus wie ein einmaliger Fehler, und Replikate, deren Quelle gelöscht wurde, fielen gar nicht auf. ## Zustand pro Dataset zsync schreibt `/var/lib/bashclub-zsync/<config>.datasets` (Dataset, Zustand, seit, Detail) und loggt eine kopierbare Behebung: | Zustand | Erkennung | Check | |---|---|---| | `broken` | kein Ziel-Snapshot existiert mehr auf der Quelle; Ursache aus den Erstellungszeiten: **Rotation durchgelaufen** oder **Dataset neu angelegt** | CRIT | | `empty` | Replikat ohne Snapshots | CRIT | | `at_risk` | Replikation fehlgeschlagen und die Basis ist der älteste Snapshot ihres Intervalls auf der Quelle – die nächste Rotation reißt die Kette | WARN | | `diverged` | neuester Ziel-Snapshot fehlt auf der Quelle, neuester gemeinsamer wird genannt (Grundlage für #5) | WARN | | `orphan_missing` / `orphan_unselected` | Replikat ohne Quelle bzw. nicht mehr ausgewählt; nur wenn die Quell-Datasets bekannt sind | WARN nach 1 Tag | | `orphan_kept` | quittiert mit `zfs set bashclub:zsync-orphan=keep <replikat>` | Hinweis | | `failed`, `no_snapshots`, `ok` | | Hinweis | Behebung für `broken`/`empty` im Log: `zfs rename <replikat> <replikat>.broken-<datum>` – der alte Stand bleibt als Archiv, der nächste Lauf repliziert neu. Verwaiste Replikate werden nie automatisch gelöscht; das Log nennt Quittung und `zfs destroy -rnv`. Zusätzliche Abfragen nur in den Fehlerpfaden, dazu drei lokale Abfragen für die verwaisten Replikate. Replikation und Löschen unverändert. ## Tests - Szenarien 16 (alle Zustände der Kette) und 17 (verwaist, nicht ausgewählt, quittiert, Zwischenebene ohne Snapshots) - alle 17 Szenarien: verändernde Aufrufe identisch zu `main` - `tests/checkmk.sh`: 9 neue Fälle (39/39), u. a. Karenzzeit und gekürzte Listen - Zusammenspiel im Container: zsync-Lauf mit Szenario 16/17, danach der Check auf die erzeugten Dateien Closes #21 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Record a state per dataset: chain broken or at risk, diverged, orphaned
All checks were successful
/ build (pull_request) Successful in 26s
/ test (ubuntu-24.04) (pull_request) Successful in 41s
/ test (debian-13) (pull_request) Successful in 41s
/ test (debian-12) (pull_request) Successful in 48s
/ test (ubuntu-26.04) (pull_request) Successful in 48s
/ publish (pull_request) Has been skipped
/ package (pull_request) Successful in 0s
2e20504ea3
Until now the monitoring only knew "n of m datasets failed": a dataset that
never recovers looked like a single failure, and replicas whose source was
deleted were not noticed at all.

bashclub-zsync classifies each dataset and writes <config>.datasets
(dataset, state, since, detail), with a copyable fix in the log:
- broken: no target snapshot exists on the source anymore; cause from the
  creation times: rotated out on the source or dataset created again
- empty: replica without snapshots
- diverged: newest target snapshot missing on the source, newest common one named
- at_risk: replication failed and the base is the oldest snapshot of its interval
  on the source, the next rotation breaks the chain
- orphan_missing / orphan_unselected: replica without source or not selected
  anymore (only if the source datasets are known); orphan_kept with
  bashclub:zsync-orphan=keep; never deleted automatically
- failed, no_snapshots, ok

Additional queries only in the error paths, plus three local queries for the
orphans; replication and deletion unchanged (17 scenarios identical to main).

Checkmk check: CRIT for broken/empty, WARN for at_risk, diverged and orphans
(after orphan_grace, 1 day), hints for failed, kept and no_snapshots.

Tests: scenarios 16 (chain states) and 17 (orphans), 9 new check cases.

Refs #21

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Author
Owner

Manuell nach main gemergt (e5a081a), CI inkl. publish nach testing grün. Schließe den PR.

Manuell nach `main` gemergt (e5a081a), CI inkl. publish nach testing grün. Schließe den PR.
thorsten.spille closed this pull request 2026-10-15 19:33:58 +02:00
All checks were successful
/ build (pull_request) Successful in 26s
/ test (ubuntu-24.04) (pull_request) Successful in 41s
/ test (debian-13) (pull_request) Successful in 41s
/ test (debian-12) (pull_request) Successful in 48s
/ test (ubuntu-26.04) (pull_request) Successful in 48s
/ publish (pull_request) Has been skipped
/ package (pull_request) Successful in 0s

Pull request closed

Sign in to join this conversation.
No reviewers
No labels
bug
enhancement
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
bashclub/zsync!23
No description provided.