mirror of
https://github.com/Crosstalk-Solutions/project-nomad.git
synced 2026-10-17 05:14:19 +02:00
doResumableDownload already implements resume - stats the .tmp, sends a Range header, handles a server that ignores it. The code was unreachable for ZIMs because every dispatch site passed forceNew: true, which skips the partial-file check and opens the stream with 'w' instead of 'a', so an interrupted 12.5 GB Wikipedia download truncated and restarted at byte 0. Maps already do this correctly (map_service.ts:681, "so retries resume partial downloads"); ZIMs never got the same treatment. Worse in combination with attempts: 10 - every retry also restarted from zero, so a flaky connection re-downloaded the whole file up to ten times. Drop forceNew from the content-download dispatch sites (it already defaults to false) and add the guard that enabling resume requires: a .tmp larger than the file now on the server cannot be a prefix of it, because openZIM re-publishes builds under the same name. Resuming would request a range past the end, 416 on every attempt, and never delete the .tmp - so the download could never recover on its own. Verified on a test appliance: a 470 MB partial survived a container restart and continued rather than truncating, and a planted oversized .tmp was discarded with the file then downloading to its exact size. Refs #1201 |
||
|---|---|---|
| .. | ||
| controllers | ||
| data | ||
| exceptions | ||
| jobs | ||
| middleware | ||
| models | ||
| services | ||
| utils | ||
| validators | ||