Batch is_grid_point backfill and reduce HRRR workers to 5

- Split migration backfill into 50k-row batches to avoid container timeout
- Reduce prod HRRR worker concurrency from 10 to 5
This commit is contained in:
Graham McIntire 2026-04-05 08:06:20 -05:00
parent 16883591b4
commit ad1b01807c
No known key found for this signature in database
GPG key ID: F4ABF488E6029E59
2 changed files with 29 additions and 8 deletions

View file

@ -117,7 +117,7 @@ if config_env() == :prod do
# Production Oban: live scoring, polling, and on-demand QSO enrichment (no cron backfill)
config :microwaveprop, Oban,
queues: [propagation: 1, commercial: 2, solar: 1, weather: 10, hrrr: 10, terrain: 5, iemre: 10, backfill_enqueue: 1],
queues: [propagation: 1, commercial: 2, solar: 1, weather: 10, hrrr: 5, terrain: 5, iemre: 10, backfill_enqueue: 1],
plugins: [
{Oban.Plugins.Pruner, max_age: 3600 * 24},
{Oban.Plugins.Lifeline, rescue_after: 30 * 60 * 1000},

View file

@ -6,16 +6,37 @@ defmodule Microwaveprop.Repo.Migrations.AddIsGridPointToHrrrProfiles do
add :is_grid_point, :boolean, default: false, null: false
end
flush()
execute(
"UPDATE hrrr_profiles SET is_grid_point = true WHERE (lat * 1000)::int % 125 = 0 AND (lon * 1000)::int % 125 = 0",
"SELECT 1"
)
create index(:hrrr_profiles, [:valid_time],
where: "is_grid_point = true",
name: :hrrr_profiles_grid_point_valid_time_idx
)
# Backfill is_grid_point in batches to avoid long-running single UPDATE
flush()
execute(
"""
DO $$
DECLARE
batch_size INT := 50000;
rows_updated INT := 1;
BEGIN
WHILE rows_updated > 0 LOOP
UPDATE hrrr_profiles
SET is_grid_point = true
WHERE id IN (
SELECT id FROM hrrr_profiles
WHERE is_grid_point = false
AND (lat * 1000)::int % 125 = 0
AND (lon * 1000)::int % 125 = 0
LIMIT batch_size
);
GET DIAGNOSTICS rows_updated = ROW_COUNT;
RAISE NOTICE 'Updated % rows', rows_updated;
END LOOP;
END $$;
""",
"SELECT 1"
)
end
end