Unreleased: host_busy on GET /backup/status (R-921), a missing tunnel container is 'absent' and not-applicable after an OS update (R-1070), the janitor forces a half-removed vzdump snapshot once (R-1010)
gates / gates (push) Successful in 58s
gates / gates (push) Successful in 58s
This commit is contained in:
1 parent
0cbd500154
commit
56aabc729c
13 files changed
+323
-10
No files matched your search
@@ -1343,6 +1343,20 @@ type BackupStatusResponse struct {
|
||||
// presence. Served on the UNTARGETED request only; additive, so an older controller reads the
|
||||
// response exactly as before.
|
||||
Tiers []TierBackupState `json:"tiers,omitempty"`
|
||||
// HostBusy (R-921, agent Unreleased 2026-10-19) says whether the host-wide heavy-operation gate is held RIGHT NOW
|
||||
// (another guest's backup, the restore test, a night OS step, the stale-lock sweep, a power-off) — a POST /backup
|
||||
// would then be refused with 409. The controller reads it BEFORE it stops the household's apps, so a refused tier
|
||||
// costs no stop. Served on every request; ABSENT (nil) = an older agent, or the gate is not wired — the controller
|
||||
// then keeps its old order (stop, ask, resume at once on 409). A read, never a reservation: the gate can be taken
|
||||
// between this answer and the POST, and that race keeps the old order. Pinned by TestBackupStatus_R921_HostBusy.
|
||||
HostBusy *HostBusyState `json:"host_busy,omitempty"`
|
||||
}
|
||||
|
||||
// HostBusyState is GET /backup/status's host_busy (R-921). What names the holder ("backup:local", "restore-test",
|
||||
// "os-pve-step" …), empty when Busy is false.
|
||||
type HostBusyState struct {
|
||||
Busy bool `json:"busy"`
|
||||
What string `json:"what,omitempty"`
|
||||
}
|
||||
|
||||
func (s *Server) handleBackupStatus(w http.ResponseWriter, r *http.Request, vmid int) {
|
||||
@@ -1362,6 +1376,10 @@ func (s *Server) handleBackupStatus(w http.ResponseWriter, r *http.Request, vmid
|
||||
resp.JobID = job.JobID
|
||||
resp.Error = job.Error
|
||||
}
|
||||
if s.inFlight != nil {
|
||||
what := s.inFlight.Busy()
|
||||
resp.HostBusy = &HostBusyState{Busy: what != "", What: what}
|
||||
}
|
||||
writeOK(w, resp)
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user