Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

save_large_file downloads are not robust to transient HTTP/host errors

Cerrado Apto para principiantes
#348 1 comentario 0 reacciones 1 asignado Ver en GitHub

Los mantenedores suelen responder en 1 día

@Sriram-Nambiar ya está trabajando en esto.

Desde el 15/10/2026.

  • #349 de @pawank925 — fusionado
  • #351 de @Sriram-Nambiar — cerrado sin fusionar

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
74/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
python
Área
tooling

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

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de openzim/python-scraperlib

Todos los issues de openzim/python-scraperlib

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.