save_large_file downloads are not robust to transient HTTP/host errors
Los mantenedores suelen responder en 1 día
@Sriram-Nambiar ya está trabajando en esto.
Desde el 15/10/2026.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 74/100
Línea de trabajo
El comando wget se construye en save_large_file() en zimscraperlib/download.py; empieza ahí y revisa la bandera existente --retry-connrefused. La solución consiste en añadir las opciones de reintento de wget para errores HTTP (502/503/504/429) y fallos de resolución de host, y luego confirmar la cadena del comando. Está terminado cuando el comando reintenta esos errores transitorios y el cambio se verifica contra un servidor local que devuelve un 503 a mitad de una descarga.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
save_large_file() (in zimscraperlib/download.py) shells out to wget with:
wget -t {retries} --retry-connrefused --random-wait --progress=dot:giga -O {fpath} -c {url}
In production (see openzim/zimwright#3), a download failed twice in a row, and it looked like wget wasn't retrying interrupted downloads at all, despite -t {retries} being set.
By default, wget only retries on a specific set of transient errors. Per its manual:
The default is to retry 20 times, with the exception of fatal errors like "connection refused" or "not found" (404), which are not retried.
This command only overrides that for connection-refused (--retry-connrefused). It does not cover:
- Non-2xx HTTP responses such as
502/503/504/429— a transient error from a flaky server/CDN/proxy mid-download — which wget treats as fatal and aborts on, with zero retries. - Host/DNS resolution errors ("Temporary failure in name resolution"), also fatal by default.
Since large file downloads can run for a long time, a brief upstream hiccup returning one of these responses is enough to abort the whole download, with no retry attempted at all — this matches what was observed in the zimwright recipe run.
- Lenguaje dominante
- Python
- Estrellas
- 31
- Forks
- 32
- Merge medio
- 3 d 10 h
- PR fusionados (30 d)
- 9
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de openzim/python-scraperlib
-
[next major] Remove deprecated 'convert' parameter for optimize_image function inside optimization.pyPosiblemente ocupada @Sriram-Nambiar la tomó hace 6 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
openzim/python-scraperlib#292 · 1 comentario · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
Relative links in a page whose URL contains `//` are resolved with the slashes collapsedPosiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abierto
Dificultad 3/5 1-2 días Aptitud para principiantes 68/100
openzim/python-scraperlib#346 · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
Is beartype cost acceptable?Abierto
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
openzim/python-scraperlib#325 · 4 comentarios ·
Los mantenedores suelen responder en 1 día
-
Release 5.5.0Quizá libre de nuevo @benoit74 la tomó hace 146 días y no hay ningún pull request abierto. Abierto
openzim/python-scraperlib#309 · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
Program hangs forever when adding two items at same pathQuizá libre de nuevo @rgaudin la tomó hace 176 días y no hay ningún pull request abierto. Abierto
openzim/python-scraperlib#300 · 7 comentarios ·
Los mantenedores suelen responder en 1 día
Todos los issues de openzim/python-scraperlib
Issues similares
-
infrastructure
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
khuisman/mcp-gee-sweet#1152 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
-
backroom bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
ditto-assistant/ditto-subnet#3069 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 67/100
open-webui/open-webui#32901 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
0.3.3 bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Los mantenedores suelen responder en 1 día