R-893 slice 1: a failed off-site replay after files/volumes/version moved holds the app

Decision 192 (D8, option C). After a failed off-site database replay whose
rollback worked, but where the snapshot's definition was written or a named
volume was replaced, the app is no longer started on the mixed state:
the live definition is written back, the database service stopped, and the
app held (HoldReasonRestoreMixed) for support. The sentence (hu+en) says the
app needs help and no longer claims the data is back as it was. The operator
gets a backup_run_failures mail (leg restore-hold-mixed).

The plain case (no version change, no volume replaced) keeps today's
behaviour (TestR379_ScenarioA). Red-proofed: r893_mixed_restore_test.go.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
2026-10-08 14:39:20 +02:00
parent 740339567a
commit 63441f0a69
7 changed files with 268 additions and 0 deletions
+2
View File
@@ -1264,6 +1264,7 @@
"err.backup.az_offsite_tarolo_nincs_elarvult_allapotban": "the off-site store is not orphaned",
"err.backup.db_restore_and_rollback_failed": "putting back the database of %s failed, and the earlier state could not be restored either. We have left the app STOPPED, for safety, so your data cannot be damaged further. Get in touch with us — %s",
"err.backup.db_restore_failed_rolled_back": "putting back the database of %s failed — your data is back as it was before the restore, and the app is still running. If you want to try again, get in touch with us first",
"err.backup.db_restore_failed_held_mixed": "putting back the database of %s failed. The database is as it was before the restore, but the files and other data of the app already come from the backup, so they do not match. We have left the app STOPPED, for safety. This needs our help: get in touch with us",
"err.backup.egy_masik_mentesi_visszaallitasi_muvelet_mar": "another backup or restore is already running",
"err.backup.ennek_az_alkalmazasnak_az_adatai_nem": "this app’s data cannot be restored from this copy",
"err.backup.ervenytelen_alkalmazasnev": "that app name is not valid",
@@ -1780,6 +1781,7 @@
"note.offsite.whole_unit_gap": "(the whole app — it has no local backup unit)",
"note.reconstitute.copy_latest": "latest",
"note.reconstitute.held": "restoring the data of %s stopped at %s, and the earlier state could not be put back either. The app stays stopped, for safety, so your data cannot be damaged further. Get in touch with us",
"note.reconstitute.held_mixed": "restoring %s stopped half-way at %s: the database is as it was before the restore, the other data comes from the backup. The app stays stopped, for safety. This needs our help: get in touch with us",
"note.restore.whole_files": "The drive's files: %d brought back, %d replaced (the older live copy was kept beside it, ending in .felhom-…), %d newer copies left untouched, %d unchanged. No file was deleted.",
"note.restore.all_files_present": "Every file that was checked is in place.",
"note.restore.and_database": " and the database",