warm_grid_cache_and_broadcast was re-SELECTing 92k hrrr_profiles rows with JSONB profile/duct_characteristics columns on every forecast hour. Row decoding exceeded the 15s default DB connection timeout, killing the worker before f01-f18 could run. Oban retried from f00 and got stuck in a loop: for the last several hours, no forecast hours were being written and even f00 was stale. Build the weather cache rows directly from the in-memory grid_data the worker already has (Weather.build_grid_cache_rows/2) and GridCache.broadcast_put directly. No DB round trip, no JSONB decode. Also widen the cron from hourly to every 3 hours so a full f00-f18 sweep (~95 min) can actually complete before the next run starts, and drop the redundant prune_old_scores() at worker start (PropagationPruneWorker already runs every 15 min). Add a 60s query timeout to load_weather_grid_from_db as defense-in-depth for the cold-cache fill path that still uses it. |
||
|---|---|---|
| .. | ||
| microwaveprop | ||
| microwaveprop_web | ||
| mix/tasks | ||
| support | ||
| test_helper.exs | ||