prop/test/microwaveprop
Graham McIntire 14a2284321
Handle CDS "rejected" status + widen submit cap headroom
CDS returns status="rejected" (distinct from "failed") when a submit
is rate-limited past the 150-job per-user cap. The poll worker's
interpret_status_body treated this as an unknown status → generic
retryable error → 10 retries → discarded. 102 jobs hit this path
overnight.

Fix:
  * Era5Client.check_status/1 now returns {:rejected, reason} (and
    treats "dismissed" the same way — that's the status a manually
    deleted job transitions to).
  * Era5PollWorker handles :rejected exactly like :not_found: drop the
    DB row, clean up the sibling CDS job, re-enqueue the submit, and
    discard the current Oban job so it doesn't burn attempts retrying
    a terminal state.
  * Widened Era5SubmitWorker cap headroom from 10 → 30 (effective
    ceiling 120 not 140). The race between concurrent workers all
    passing the count check simultaneously meant we were reaching 141
    in-flight against the 150 hard cap; 30 slots of headroom tolerates
    a ~15-worker race before clipping CDS's ceiling.

Refactored handle_row/1 into handle_row + handle_non_both_done with a
leg_outcome/1 tag helper so the cross-product of leg statuses collapses
to a single pair match (credo complexity limit).
2026-04-14 08:26:42 -05:00
..
backtest Fix wgrib2 -lola binary parsing and add native_surface_refractivity 2026-04-10 08:13:33 -05:00
beacons Fix credo warnings: struct specs, length/1, and test patterns 2026-04-12 10:26:53 -05:00
commercial Add commercial link monitoring via SNMP polling 2026-03-30 13:02:59 -05:00
propagation Wire NEXRAD, native ducts, and commercial links into scoring 2026-04-13 12:08:15 -05:00
qrz Drop gridmap.org dependency, resolve callsigns locally 2026-04-12 17:43:29 -05:00
radio User profiles at /u/:callsign, flexible band input, assorted UX cleanup 2026-04-12 16:13:08 -05:00
terrain Remove unused CaptureLog import in elevation client test 2026-04-12 09:32:47 -05:00
weather Handle CDS "rejected" status + widen submit cap headroom 2026-04-14 08:26:42 -05:00
workers Handle CDS "rejected" status + widen submit cap headroom 2026-04-14 08:26:42 -05:00
accounts_test.exs User profiles at /u/:callsign, flexible band input, assorted UX cleanup 2026-04-12 16:13:08 -05:00
backtest_test.exs Phase 9.1: Consolidated backtest report and contest log import 2026-04-10 11:57:15 -05:00
beacon_monitors_test.exs Add beacon monitor registration and fix prod SMTP 2026-04-08 11:30:28 -05:00
beacons_test.exs User profiles at /u/:callsign, flexible band input, assorted UX cleanup 2026-04-12 16:13:08 -05:00
cache_test.exs Cache /contacts, fix map blink, make mode optional 2026-04-12 12:47:25 -05:00
callsign_location_test.exs Drop gridmap.org dependency, resolve callsigns locally 2026-04-12 17:43:29 -05:00
commercial_test.exs Wire NEXRAD, native ducts, and commercial links into scoring 2026-04-13 12:08:15 -05:00
geocoder_test.exs Drop gridmap.org dependency, resolve callsigns locally 2026-04-12 17:43:29 -05:00
markdown_test.exs Add Tier 1 test coverage: EnrichmentStatus, Markdown, health, RemoteIp, Maidenhead 2026-04-06 10:15:38 -05:00
propagation_test.exs Wire NEXRAD, native ducts, and commercial links into scoring 2026-04-13 12:08:15 -05:00
qrz_test.exs Drop gridmap.org dependency, resolve callsigns locally 2026-04-12 17:43:29 -05:00
radio_test.exs Cap "Contacts I'm in" at 100 most recent 2026-04-12 17:04:11 -05:00
terrain_test.exs Rename qsos table to contacts, qso_id to contact_id 2026-04-02 15:52:19 -05:00
weather_grid_test.exs Stop PropagationGridWorker crash-looping on forecast hours 2026-04-13 08:20:28 -05:00
weather_test.exs Reduce dead tuples by using conditional upserts and skip-on-conflict 2026-04-04 17:32:57 -05:00