- Shipped
- September 2, 2026 at 5:22 AM UTC
- Author
- Kamo
- Commit
- 5824233
Every five minutes. A schedule is set to the minute, so a finer tick buys nothing a member would notice and a coarser one makes an 8:00 report arrive at 8:15. DaemonService owns this for the same reason it owns the legal-package and lead-email sweeps: replicas: 1 with strategy Recreate means the old pod is gone before the new one starts, so a deploy window cannot double-fire. A @Scheduled in SecurityService, which rolls with surge, provably can — and there is no ShedLock anywhere in this fleet, so the pod count is the whole guarantee. @DisallowConcurrentExecution because a long sweep must not have a second one started on top of it: both would find the same schedules due, since nextRunAt is only advanced once the first has claimed them, and the same report would go out twice. Explicit timeouts for the same reason the sibling jobs have them — a default RestTemplate waits forever, and a pinned thread here means the sweep never runs again until the pod restarts, which is indistinguishable from "nothing was due". Nothing about a report crosses this process: the sweep returns counts, never rows.