fix: parse volume (.tar) backups + surface real volume-backup errors #11

Merged
james merged 1 commit from fix/volume-backup-parsing-and-errors into main 2026-07-28 17:15:05 +00:00
Owner

Two issues you hit after the stack rework went live.

1. Volume-only stacks showed 'No backups found'

parse_backup_filename only matched .sql/.sql.gz, so volume (.tar/.tar.gz) files landed in node_files with a nil container_name — and the per-stack file view filters by container, so they were excluded. That's exactly why searxng (a DB backup) showed but adguard (volume-only) didn't. Now it parses .tar/.tar.gz too.

To see existing volume backups immediately: on the Nodes page, open the node → Backup Files → Refresh from node (forces a live re-list with the fixed parser). Otherwise node_files self-heals on the next daily manifest.

2. Failure reasons were generic ('Backup file not created')

Container#perform_volume_backup caught the orchestrator's real error and returned [], so the caller only saw the generic 'no file' message. It now lets the error propagate, so the recorded failure (and the dashboard modal) shows the actual reason.

Full suite green — 1127 examples.

🤖 Generated with Claude Code

Two issues you hit after the stack rework went live. ## 1. Volume-only stacks showed 'No backups found' `parse_backup_filename` only matched `.sql`/`.sql.gz`, so volume (`.tar`/`.tar.gz`) files landed in `node_files` with a **nil container_name** — and the per-stack file view filters by container, so they were excluded. That's exactly why **searxng** (a DB backup) showed but **adguard** (volume-only) didn't. Now it parses `.tar`/`.tar.gz` too. **To see existing volume backups immediately:** on the Nodes page, open the node → Backup Files → **Refresh from node** (forces a live re-list with the fixed parser). Otherwise `node_files` self-heals on the next daily manifest. ## 2. Failure reasons were generic ('Backup file not created') `Container#perform_volume_backup` caught the orchestrator's real error and returned `[]`, so the caller only saw the generic 'no file' message. It now lets the error propagate, so the recorded failure (and the dashboard modal) shows the **actual** reason. Full suite green — **1127 examples**. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
fix(backup): parse volume (.tar) filenames + surface real volume errors
All checks were successful
Build, Push & Deploy / build-and-push (pull_request) Has been skipped
Build, Push & Deploy / deploy (Media) (pull_request) Has been skipped
Build, Push & Deploy / deploy (citadel) (pull_request) Has been skipped
Build, Push & Deploy / test (pull_request) Successful in 1m3s
86b4f32a92
Two issues from the stack rework going live:

1. Volume-only stacks (e.g. adguard) showed "No backups found" in the per-stack
   View Backups. parse_backup_filename only matched .sql/.sql.gz, so volume
   (.tar/.tar.gz) files got a nil container_name in node_files and were filtered
   out. Now it parses .tar/.tar.gz too (compressed = ends in .gz). DB-backup
   stacks (searxng) were unaffected, which is why only some showed.
   (node_files self-heals on the next manifest; "Refresh from node" forces it.)

2. Failure reasons were generic ("Backup file not created"). Container#perform_
   volume_backup swallowed the orchestrator's real error and returned []. It now
   lets the error propagate so the caller records the actual message, which the
   dashboard failure modal shows.

Full suite green (1127 examples).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
james merged commit 1bcdea067f into main 2026-07-28 17:15:05 +00:00
Sign in to join this conversation.
No reviewers
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
james/baktainer!11
No description provided.