Skip to content

Commit 82cd4bb

Browse files
committed
docs: finish the v3.1.2 release notes
1 parent 41b320c commit 82cd4bb

2 files changed

Lines changed: 25 additions & 12 deletions

File tree

‎CHANGELOG.md‎

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,18 @@
33
## v3.1.2
44

55
Patch 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

‎backup/borg/exec.go‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -185,8 +185,8 @@ func (r *Repository) run(label string, borgJSON bool, warnTier warnTierLogging,
185185
// mid-run, a unix socket in the tree) measured as exiting 0. Those five do exit 0 — they
186186
// were re-measured on borg 1.4.4 and reproduce — but they are not the whole warning tier,
187187
// and treating an incomplete measurement as a general rule is what made a successful
188-
// backup report "borg create exited 1: no diagnostic output" on production volumes. Two
189-
// warnings that DO exit 1 were missed:
188+
// backup report "borg create exited 1: no diagnostic output" on any volume with an active
189+
// application writing to it. Two warnings that DO exit 1 were missed:
190190
//
191191
// - FileChangedWarning, which needs a file large enough that borg's read straddles a
192192
// concurrent write. It does not reproduce on a small hand-made file and happens

0 commit comments

Comments
 (0)