33## v3.1.2
44
55Patch release for v3.1.1. ** No migrations (` control.db ` stays at schema ` v4 ` ), no config changes,
6- no API changes.** Upgrade if any volume is written to while it is being backed up — on those
7- volumes every backup is reported as failed even though the archive was created correctly.
6+ and no breaking API changes** — a task result gains one additive field (` backup_warning ` , below).
7+ Upgrade if any volume is written to while it is being backed up: on those volumes every backup is
8+ reported as failed even though the archive was created correctly.
89
910- [ FIX] ** A backup that ` borg ` completes with a warning is no longer reported as failed.** ` borg `
1011 exits ` 1 ` when a command reaches its normal end but logged a warning, and v3.1.0 began treating
1112 every non-zero exit as a failure. The common case is a file being written while ` borg ` reads it
1213 (` file changed while we backed it up ` ), which happens on any volume with an active application.
1314 The archive is complete and restorable in that case, so the task now completes, ` last_backup `
14- advances, and the repository is synced. ** Archives created during the affected window are valid
15- and restorable** — the backup itself succeeded; only the reported outcome was wrong. One caveat
16- for volumes that configure a ` PostBackup ` command without ` backup_error_cont ` : because the task
17- was treated as failed, that command was skipped on those runs, so anything it undoes may have
18- been left in place until the next backup the volume reported as successful.
15+ advances, and the repository is synced. ** Archives created before upgrading are valid and
16+ restorable** — the backup itself succeeded; only the reported outcome was wrong, so there is
17+ nothing to re-run.
1918- [ FIX] ** A warning that means data is missing from the archive still fails the backup.** Not every
2019 ` borg ` warning is harmless: when ` borg ` cannot read a file it logs the file, skips it, and commits
2120 an archive without it — at the same exit code and the same severity as the harmless case. The two
@@ -30,12 +29,26 @@ volumes every backup is reported as failed even though the archive was created c
3029 carrying ` borg ` 's explanation of its own exit, so a failed backup could only report
3130 ` borg create exited 1: no diagnostic output ` . ` borg ` 's diagnosis is now available to both the
3231 operator and the task result. This is the same reason ` --error ` is not passed to ` borg delete ` .
33- - [ FIX] ** A failed backup reports a readable reason.** The failure reason was rendered as a whole
34- ` borg ` log structure, so the controller received five empty fields around one line of text.
35- Failures now carry ` (msgid) reason ` , matching every other backup failure path, and a failed
32+ - [ FIX] ** A failed backup reports a readable reason.** The reason was rendered as an entire ` borg `
33+ log structure, so what reached the controller was a mostly- empty record wrapped around one line of
34+ text. Failures now carry ` (msgid) reason ` , matching every other backup failure path, and a failed
3635 archive creation records that reason as the task's error rather than a generic "task reported
3736 failure". Where several files were warned about, the reason names the one that actually failed the
3837 backup, rather than whichever ` borg ` happened to encounter first.
38+ - [ CHANGE] ** A ` borg create ` that exits on the warning tier is logged at DEBUG, not WARN.** The
39+ borg-layer log line for a non-zero exit is ` Command failed ` , which is misleading for a warning the
40+ agent goes on to accept, and it would otherwise appear on every successful backup of a busy
41+ volume. ** If you alert on that string, note that it no longer appears for ` borg create ` exit 1.**
42+ A create that genuinely fails still logs at WARN, from the layer that makes the decision, and
43+ every other command is unchanged — ` borg delete ` exiting 1 found no archive to delete and stays
44+ visible.
45+
46+ ** Operator note — a volume with a ` PostBackup ` command.** While a backup was being misreported as
47+ failed, ` postBackup ` ran only when ` backup_error_cont ` was set (the ` mysql ` and ` postgres `
48+ strategies force it, so they were unaffected). A volume on another strategy that configures a
49+ ` PostBackup ` command did not run it on those backups, so whatever that command undoes may have been
50+ left in place until the volume's next successful backup. Worth checking once after upgrading if you
51+ rely on one.
3952
4053## v3.1.1
4154
0 commit comments