From cdfbe85485ada7bb9fce043621a1023a5ad537c0 Mon Sep 17 00:00:00 2001 From: Graham McIntire Date: Sun, 19 Apr 2026 15:41:32 -0500 Subject: [PATCH] fix(oban): use paused queues instead of local_limit:0 on backfill pods Oban Pro 2.21.1's Smart engine rejects `local_limit: 0` with "local_limit must be greater than 0", OOMing the backfill pod on every boot since the upgrade. Switch the disable pattern to `[local_limit: 1, paused: true]` so the queue still exists (satisfying the validator) but processes nothing. Verified under PROP_ROLE=backfill the four hot queues (propagation, commercial, solar, enqueue) resolve to paused=true and the others keep their normal concurrency. --- config/runtime.exs | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/config/runtime.exs b/config/runtime.exs index ea2844dd..37bab24e 100644 --- a/config/runtime.exs +++ b/config/runtime.exs @@ -167,10 +167,17 @@ if config_env() == :prod do # config/config.exs sets a base Oban config (queues + cron) that Config # deep-merges with runtime.exs. To actually drop the hot-path queues on - # backfill pods we have to explicitly override them to `limit: 0` rather - # than just leaving them out — Config deep merge by key means omitted - # values fall through to the compile-time defaults. - disabled_hot_queues = [propagation: 0, commercial: 0, solar: 0, enqueue: 0] + # backfill pods we can't use `limit: 0` — Oban Pro's Smart engine + # rejects it with "local_limit must be greater than 0". Instead override + # each queue with `paused: true` (queue exists, processes nothing). + paused_queue = [local_limit: 1, paused: true] + + disabled_hot_queues = [ + propagation: paused_queue, + commercial: paused_queue, + solar: paused_queue, + enqueue: paused_queue + ] oban_queues = case prop_role do