mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-10-15 08:33:03 +00:00
5867d439a3
The recovery store was upsert-only: backups and snapshots deleted at the source lingered as recovery_points rows until the 90-day retention prune. ListRollups kept returning a rollup with a frozen LastSuccessAt, so the backup-age alert for a deleted guest re-raised every poll cycle and acknowledging or clearing it could never stick (#1580). Each backup poll already publishes a complete per-instance enumeration (partial failures early-return or carry previous entries forward), so attach a reconcile scope to that ingest batch. After the upsert, points in the scope (provider + id class + instance) that were not part of the enumeration are deleted, which lets the existing per-cycle alert sweep resolve the alert. An empty enumeration is meaningful and clears the scope, covering the delete-all-backups case from the report. Also make the async ingest queue batches instead of overwriting the single pending slot, which silently dropped a full poll cycle whenever two sources coalesced behind an active batch.