Abgebrochene Replikation per Resume-Token fortsetzen #38

Closed
thorsten.spille wants to merge 0 commits from thorsten.spille/feature-8-resume into main AGit

Setzt #8 um.

Vorab mit echtem ZFS geprüft (Test-VM, unverschlüsselt und raw-verschlüsselt)

Fall Verhalten
Erstreplikation abgebrochen Dataset mit Token, aber ohne Snapshots (zsync meldete das bisher als „Replikat leer“); send -t setzt fort
Delta abgebrochen Token blockiert jeden normalen receive („contains partially-complete state“); send -t setzt fort
receive -A nach abgebrochener Erstreplikation Dataset wird entfernt, nächste Erstreplikation beginnt sauber
Snapshot des Tokens auf der Quelle gelöscht send -t scheitert → verwerfen

Änderung

  • neue Einstellung transfer_resume (bestehende Configs ohne Eintrag: 0, Template und Beispiel: 1): Empfang mit zfs receive -s
  • zu Beginn eines Datasets: Token am Ziel → bei 1 fortsetzen (zfs send -t, Optionen je nach Erstreplikation/Delta, danach ggf. aushängen); scheitert das oder ist die Einstellung 0: Teilstand mit zfs receive -A verwerfen ([WARN]), sonst blockiert er jede weitere Replikation
  • README („Resuming interrupted transfers“), DOCUMENTATION_DE, Beispiel-Config, CHANGELOG

Tests

  • Integration resume: Erstreplikation und Delta nach 3 s abgebrochen (12 MiB bei 2 MiB/s), im nächsten Lauf in 2 s statt 6 s fortgesetzt; Teilstand nach gelöschtem Snapshot verworfen, weiter mit dem nächsten
  • gesamte ZFS-Suite 15/15
  • Stub: Szenarien 27 (fortsetzen) und 28 (verwerfen bei transfer_resume=0); alle 26 übrigen identisch zu main

Closes #8

🤖 Generated with Claude Code

Setzt #8 um. ## Vorab mit echtem ZFS geprüft (Test-VM, unverschlüsselt und raw-verschlüsselt) | Fall | Verhalten | |---|---| | Erstreplikation abgebrochen | Dataset mit Token, aber ohne Snapshots (zsync meldete das bisher als „Replikat leer“); `send -t` setzt fort | | Delta abgebrochen | Token blockiert jeden normalen receive („contains partially-complete state“); `send -t` setzt fort | | `receive -A` nach abgebrochener Erstreplikation | Dataset wird entfernt, nächste Erstreplikation beginnt sauber | | Snapshot des Tokens auf der Quelle gelöscht | `send -t` scheitert → verwerfen | ## Änderung - neue Einstellung `transfer_resume` (bestehende Configs ohne Eintrag: `0`, Template und Beispiel: `1`): Empfang mit `zfs receive -s` - zu Beginn eines Datasets: Token am Ziel → bei `1` fortsetzen (`zfs send -t`, Optionen je nach Erstreplikation/Delta, danach ggf. aushängen); scheitert das oder ist die Einstellung `0`: Teilstand mit `zfs receive -A` verwerfen (`[WARN]`), sonst blockiert er jede weitere Replikation - README („Resuming interrupted transfers“), DOCUMENTATION_DE, Beispiel-Config, CHANGELOG ## Tests - Integration `resume`: Erstreplikation und Delta nach 3 s abgebrochen (12 MiB bei 2 MiB/s), im nächsten Lauf in **2 s statt 6 s** fortgesetzt; Teilstand nach gelöschtem Snapshot verworfen, weiter mit dem nächsten - gesamte ZFS-Suite 15/15 - Stub: Szenarien 27 (fortsetzen) und 28 (verwerfen bei `transfer_resume=0`); alle 26 übrigen identisch zu `main` Closes #8 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Resume interrupted transfers
All checks were successful
/ build (pull_request) Successful in 26s
/ test (debian-13) (pull_request) Successful in 45s
/ test (ubuntu-24.04) (pull_request) Successful in 46s
/ test (ubuntu-26.04) (pull_request) Successful in 55s
/ test (debian-12) (pull_request) Successful in 55s
/ publish (pull_request) Has been skipped
/ package (pull_request) Successful in 0s
/ integration (pull_request) Successful in 2m4s
372cc47825
On slow offsite lines an interrupted transfer started again from the beginning.

New setting transfer_resume (existing configurations without it: 0, new
configurations and the example: 1): replicas are received with zfs receive -s.
At the start of a dataset a resume token on the target is handled first:
- transfer_resume=1: continue with zfs send -t (initial replication: receive
  options of the initial replication, delta: those of a delta), unmount a
  mounted replica afterwards
- resuming fails (snapshot deleted on the source) or transfer_resume=0: discard
  the partial state with zfs receive -A, it would block every further receive
  (an interrupted initial replication is removed completely)

Checked with real ZFS on the test VM, also raw encrypted: an interrupted initial
replication leaves a dataset with token but without snapshots (zsync reported it
as empty before), a token blocks every normal receive, receive -A removes an
interrupted initial replication.

Tests: integration case resume (initial and delta interrupted after 3 s and
continued in 2 s instead of 6 s, discarded partial state); stub scenarios 27/28;
all other scenarios identical to main.

Refs #8

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

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

Manuell nach `main` gemergt (c516338), CI inkl. publish nach testing grün. Schließe den PR.
thorsten.spille closed this pull request 2026-10-15 23:11:03 +02:00
All checks were successful
/ build (pull_request) Successful in 26s
/ test (debian-13) (pull_request) Successful in 45s
/ test (ubuntu-24.04) (pull_request) Successful in 46s
/ test (ubuntu-26.04) (pull_request) Successful in 55s
/ test (debian-12) (pull_request) Successful in 55s
/ publish (pull_request) Has been skipped
/ package (pull_request) Successful in 0s
/ integration (pull_request) Successful in 2m4s

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!38
No description provided.