Silversea Was Cloning Itself
Silversea full scrapes have grown to 20-34 minutes (their sitemap is up to ~1117 cruises), but the job's reservation window was 15 minutes -- so Beanstalkd kept re-releasing the job mid-run and up to three identical scrapes ran concurrently, saturating the 5-worker pool and starving hourly RC and Celebrity jobs. Same disease Regent had in June, same cure: TTR bumped to 60 minutes.
Alert Resolutions Arrive on Time
Health-alert resolution detection only ran when a new alert fired, so a resolved alert's all-clear email could sit stuck until an unrelated problem came along -- arriving up to a day late with wildly inflated durations (one notice reported a ~5-hour incident as "active 25.2h"). Resolution processing now runs on every scheduler tick.
Dedicated Price-Scraping Lane
The structural fix behind this week's starvation incidents. Worker-time analysis over 24 hours: casino/account-sync consumed 42.5% of pool time and package jobs another 33.2%, versus 24.3% for all price scraping combined -- on the pool whose headline job is hourly price scraping.
Workers now have numbered roles: instance 1 watches only the per-cruise-line price tubes, a reserved lane that long casino/sync/package jobs can never occupy. Generalist workers still take price jobs too -- it's a guarantee, not a partition. Account-sync also drops from six runs a day to four (midnight/6am/noon/6pm); offer and booking data doesn't change fast enough to justify the pool time it was eating.