From 847f2001dd5d9f936e60a6581a195725bf12ae2f Mon Sep 17 00:00:00 2001 From: Graham McIntire Date: Fri, 17 Apr 2026 10:15:25 -0500 Subject: [PATCH] fix(workers): make weather/hrrr job uniqueness horizon indefinite MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Both workers had unique: [period: 300] which only dedupes within a 5-minute window. Re-running the enrichment-enqueue script hours or days later stacked identical jobs in the available queue — we found ~60k redundant weather + 3k redundant hrrr jobs in prod from the March and April enqueue passes. :infinity means Oban dedupes against every live job in the states list regardless of age, so a second enqueue pass is a no-op as long as the first pass's jobs haven't completed yet. --- lib/microwaveprop/workers/hrrr_fetch_worker.ex | 2 +- lib/microwaveprop/workers/weather_fetch_worker.ex | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/microwaveprop/workers/hrrr_fetch_worker.ex b/lib/microwaveprop/workers/hrrr_fetch_worker.ex index 86fa1dbf..cc907912 100644 --- a/lib/microwaveprop/workers/hrrr_fetch_worker.ex +++ b/lib/microwaveprop/workers/hrrr_fetch_worker.ex @@ -3,7 +3,7 @@ defmodule Microwaveprop.Workers.HrrrFetchWorker do use Oban.Worker, queue: :hrrr, max_attempts: 20, - unique: [period: 300, states: [:available, :scheduled, :executing, :retryable]] + unique: [period: :infinity, states: [:available, :scheduled, :executing, :retryable]] alias Microwaveprop.Weather alias Microwaveprop.Weather.HrrrClient diff --git a/lib/microwaveprop/workers/weather_fetch_worker.ex b/lib/microwaveprop/workers/weather_fetch_worker.ex index 6c2a1db3..3a98c72c 100644 --- a/lib/microwaveprop/workers/weather_fetch_worker.ex +++ b/lib/microwaveprop/workers/weather_fetch_worker.ex @@ -3,7 +3,7 @@ defmodule Microwaveprop.Workers.WeatherFetchWorker do use Oban.Worker, queue: :weather, max_attempts: 20, - unique: [period: 300, states: [:available, :scheduled, :executing, :retryable]] + unique: [period: :infinity, states: [:available, :scheduled, :executing, :retryable]] alias Microwaveprop.Repo alias Microwaveprop.Weather