prop/test/microwaveprop/workers
Graham McIntire ddedd241de
fix(radar): dedupe RadarFrameWorker jobs by frame_ts
BackfillEnqueueWorker re-enqueued every :queued contact each cycle, and
RadarFrameWorker had no unique clause, so the same 5-min NEXRAD frame
got scheduled repeatedly with overlapping contact lists. Prod had 9,134
duplicate available jobs across 1,061 distinct frames — 89% waste.

Two coupled changes so contacts aren't stranded by the dedup:

  1. Worker now queries eligible contacts by the frame's 5-min bucket
     instead of the args' contact_ids list. A contact that flips to
     :queued between the enqueue and the job running gets picked up.

  2. unique: [frame_ts] on states [available, scheduled, retryable].
     :executing intentionally excluded — a contact that flips to :queued
     mid-execution can still enqueue a follow-up instead of getting
     stuck behind a running job that missed it.
2026-04-20 14:21:55 -05:00
..
admin_task_worker_test.exs fix(admin_task_worker): unknown feature now returns error instead of falling through 2026-04-16 14:58:55 -05:00
backfill_enqueue_worker_test.exs Remove 500-limit on BackfillEnqueueWorker cron 2026-04-16 12:46:56 -05:00
canadian_sounding_fetch_worker_test.exs Ingest Canadian radiosondes via UWYO + plans for RDPS/HRDPS 2026-04-13 09:14:34 -05:00
common_volume_radar_worker_test.exs feat(rainscatter): classify QSO propagation mechanism from common-volume radar 2026-04-17 15:57:59 -05:00
contact_import_worker_test.exs fix(import): handle Radio.create_contact :duplicate return in worker 2026-04-17 09:54:17 -05:00
contact_position_backfill_worker_test.exs test: override stale distance_km when filling a missing pos 2026-04-16 14:09:45 -05:00
contact_weather_enqueue_worker_test.exs feat(hrrr): route per-QSO enrichment through hrrr_fetch_tasks (Stream C Elixir) 2026-04-19 18:22:22 -05:00
gefs_fetch_worker_test.exs feat(gefs): score extended-horizon grid and seed cron 2026-04-18 14:41:41 -05:00
hrrr_native_grid_worker_test.exs refactor: normalize pos1/pos2 JSONB key to 'lon' everywhere 2026-04-17 09:10:32 -05:00
iemre_fetch_worker_test.exs Store stub records on empty weather fetches to prevent infinite backfill retries 2026-04-06 16:10:39 -05:00
ionosphere_fetch_worker_test.exs Ionosphere: GIRO ionosonde ingestion (foF2/foEs/hmF2/MUFD) 2026-04-15 14:37:43 -05:00
mechanism_classify_worker_test.exs perf+fix: parallelize path HRRR queries; fix meteor-shower year boundary 2026-04-18 12:08:42 -05:00
narr_fetch_worker_test.exs Rename ERA5 → NARR across the codebase 2026-04-16 09:22:23 -05:00
nexrad_worker_test.exs refactor: normalize pos1/pos2 JSONB key to 'lon' everywhere 2026-04-17 09:10:32 -05:00
propagation_grid_worker_test.exs feat(propagation): Phase 3 Stream A cutover — Rust owns f00..f18 2026-04-19 18:13:41 -05:00
propagation_prune_worker_test.exs Drop propagation_scores table, ScoresFile is the only store 2026-04-14 15:13:01 -05:00
radar_frame_worker_test.exs fix(radar): dedupe RadarFrameWorker jobs by frame_ts 2026-04-20 14:21:55 -05:00
rtma_fetch_worker_test.exs test: cover rtma_client + rtma_fetch_worker, add Req.Test seam 2026-04-16 14:58:54 -05:00
solar_index_worker_test.exs Add type filter to backfill enqueue 2026-04-06 11:42:26 -05:00
space_weather_fetch_worker_test.exs SpaceWeather: SWPC JSON ingestion (Kp, F10.7, GOES X-ray) 2026-04-15 14:55:24 -05:00
terrain_profile_worker_test.exs Rename qsos table to contacts, qso_id to contact_id 2026-04-02 15:52:19 -05:00
weather_fetch_worker_test.exs Store stub records on empty weather fetches to prevent infinite backfill retries 2026-04-06 16:10:39 -05:00