From 68fdd1d2b6e589493bd55b7fbcf8e29d10faf424 Mon Sep 17 00:00:00 2001 From: Graham McIntire Date: Thu, 2 Apr 2026 16:34:39 -0500 Subject: [PATCH] Fix unique constraint blocking re-enqueues of completed jobs - Only deduplicate against active jobs (available/scheduled/executing/ retryable), not completed ones. Completed jobs no longer block new inserts for the same args. - Period reduced from 3600s to 300s - Fixes contacts stuck in :queued with no actual Oban jobs --- lib/microwaveprop/workers/hrrr_fetch_worker.ex | 2 +- lib/microwaveprop/workers/solar_index_worker.ex | 2 +- lib/microwaveprop/workers/terrain_profile_worker.ex | 2 +- lib/microwaveprop/workers/weather_fetch_worker.ex | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/microwaveprop/workers/hrrr_fetch_worker.ex b/lib/microwaveprop/workers/hrrr_fetch_worker.ex index 587f3a94..a56b0a9a 100644 --- a/lib/microwaveprop/workers/hrrr_fetch_worker.ex +++ b/lib/microwaveprop/workers/hrrr_fetch_worker.ex @@ -1,6 +1,6 @@ defmodule Microwaveprop.Workers.HrrrFetchWorker do @moduledoc false - use Oban.Worker, queue: :hrrr, max_attempts: 20, unique: [period: 3600] + use Oban.Worker, queue: :hrrr, max_attempts: 20, unique: [period: 300, states: [:available, :scheduled, :executing, :retryable]] alias Microwaveprop.Weather alias Microwaveprop.Weather.HrrrClient diff --git a/lib/microwaveprop/workers/solar_index_worker.ex b/lib/microwaveprop/workers/solar_index_worker.ex index 9913381d..98fcaa56 100644 --- a/lib/microwaveprop/workers/solar_index_worker.ex +++ b/lib/microwaveprop/workers/solar_index_worker.ex @@ -1,6 +1,6 @@ defmodule Microwaveprop.Workers.SolarIndexWorker do @moduledoc false - use Oban.Worker, queue: :solar, max_attempts: 3, unique: [period: 3600] + use Oban.Worker, queue: :solar, max_attempts: 3, unique: [period: 300, states: [:available, :scheduled, :executing, :retryable]] alias Microwaveprop.Weather alias Microwaveprop.Weather.SolarClient diff --git a/lib/microwaveprop/workers/terrain_profile_worker.ex b/lib/microwaveprop/workers/terrain_profile_worker.ex index 54cfa8eb..88d3b846 100644 --- a/lib/microwaveprop/workers/terrain_profile_worker.ex +++ b/lib/microwaveprop/workers/terrain_profile_worker.ex @@ -1,6 +1,6 @@ defmodule Microwaveprop.Workers.TerrainProfileWorker do @moduledoc false - use Oban.Worker, queue: :terrain, max_attempts: 20, unique: [period: 3600] + use Oban.Worker, queue: :terrain, max_attempts: 20, unique: [period: 300, states: [:available, :scheduled, :executing, :retryable]] alias Microwaveprop.Radio alias Microwaveprop.Terrain diff --git a/lib/microwaveprop/workers/weather_fetch_worker.ex b/lib/microwaveprop/workers/weather_fetch_worker.ex index 38f74e0e..b4762201 100644 --- a/lib/microwaveprop/workers/weather_fetch_worker.ex +++ b/lib/microwaveprop/workers/weather_fetch_worker.ex @@ -1,6 +1,6 @@ defmodule Microwaveprop.Workers.WeatherFetchWorker do @moduledoc false - use Oban.Worker, queue: :weather, max_attempts: 20, unique: [period: 3600] + use Oban.Worker, queue: :weather, max_attempts: 20, unique: [period: 300, states: [:available, :scheduled, :executing, :retryable]] alias Microwaveprop.Repo alias Microwaveprop.Weather