A job id can outlive its payload hash. BullMQ still returns an entry for it with empty `data`, so `normalize(job.data.filepath)` threw and took the whole response with it. `fetchJobsWithStates()` includes failed jobs, and failed jobs are retained deliberately, so one orphan made GET /api/downloads/jobs throw on every call, permanently. Content Explorer polls that endpoint every ~3s, so the symptom was a 500 loop and a page that never loaded. It survived restarts and only cleared by editing Redis by hand. Drop entries with no usable payload at the source, and guard both normalize() calls (the pmtiles-extract map had the same pattern). With no payload there is nothing to render anyway. Seen on NOMAD3 running rc.3: 93 occurrences in 15 minutes. Closes #1190 Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| controllers | ||
| data | ||
| exceptions | ||
| jobs | ||
| middleware | ||
| models | ||
| services | ||
| utils | ||
| validators | ||