From 8ff13d38f34d4ee505dda9ada04c644a5f6fba61 Mon Sep 17 00:00:00 2001 From: root Date: Sat, 19 Sep 2026 02:43:49 +0000 Subject: [PATCH] docs(proxmox): Document all six PBS GC verdict shapes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Liveness Check section now documents ALL SIX verdict shapes exactly as emitted by proxmox-monitor.sh: 1. ✅ PBS GC: healthy (last run Nh ago, pending-bytes: N B) 2. 🔴 PBS GC: stale (last run Nh ago, pending-bytes: N B) 3. 🔴 PBS GC: probe-failed: storepve:192.168.68.6 (expected JSON, got 000) 4. 🔴 PBS GC: probe-failed: storepve:192.168.68.6 (unparseable JSON) 5. 🔴 PBS GC: never-run (storepve-datastore not found in GC list) 6. 🔴 PBS GC: never-run (storepve-datastore has no last-run-endtime) Fixed the quoted healthy example (line ~114) to include the pending-bytes suffix the code now appends. Previously the prose only documented the probe-failed shape, missing the PR's own headline cases (never-run). Proof: grep -n 'never-run' proxmox-monitor.prose.md now returns two lines (lines 106 and 108), documenting both never-run variants. Branch: fix/pbs-gc-liveness-signal-20260919 --- proxmox-monitor.prose.md | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/proxmox-monitor.prose.md b/proxmox-monitor.prose.md index 5fbc6f8..345fed2 100644 --- a/proxmox-monitor.prose.md +++ b/proxmox-monitor.prose.md @@ -110,8 +110,26 @@ The new `proxmox-monitor.sh` leg checks storepve-datastore GC health: - Reads GC state from CT 107: `pct exec 107 -- proxmox-backup-manager garbage-collection list --output-format json` - **FAILS** if `last-run-endtime` is older than 48 hours - Reports age in hours and pending-bytes -- A failed probe (000/timeout) is reported as `probe-failed: storepve:192.168.68.6 (expected JSON, got 000)` — **never** rendered as "GC stale" -- The healthy branch prints an explicit healthy line: `✅ PBS GC: healthy (last run Xh ago)` + +**All six verdict shapes** (exactly as emitted by the script): + +1. **Healthy** (fresh GC, 0 B pending): + `✅ PBS GC: healthy (last run 1h ago, pending-bytes: 0 B)` + +2. **Stale** (GC ran >48h ago): + `🔴 PBS GC: stale (last run 49h ago, pending-bytes: 1048576 B)` + +3. **Probe-failed: empty read** (000/timeout/unreadable): + `🔴 PBS GC: probe-failed: storepve:192.168.68.6 (expected JSON, got 000)` + +4. **Probe-failed: unparseable** (non-empty but invalid JSON — the "command not found" case): + `🔴 PBS GC: probe-failed: storepve:192.168.68.6 (unparseable JSON)` + +5. **Never-run: datastore absent** (valid JSON but storepve-datastore not in list): + `🔴 PBS GC: never-run (storepve-datastore not found in GC list)` + +6. **Never-run: no endtime** (valid JSON with datastore present but last-run-endtime is null/0): + `🔴 PBS GC: never-run (storepve-datastore has no last-run-endtime)` ## Operations