JoshData / JoshData/python-email-validator
DNS resolver can run for longer than the given timeout
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Python
- Estrellas
- 1.4k
- Forks
- 140
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Descripción
It's very hard to reproduce, we found the problem because we have a 60s timeout for our web server that we kept busting, even with email-validator's default 15s timeout.
Disabling check_availability solved our problem.
The problem
The problem lies within:
response = dns_resolver.resolve(domain, "MX")
( https://github.com/JoshData/python-email-validator/blob/main/email_validator/deliverability.py#L40 )
While debugging, what I can see is that the resolver goes through a loop, and only checks the timeout between calls. It also does some time.sleep()
That means that if a call or a sleep is longer than the timeout, it doesn't get interrupted and can thus run for longer
The solution
Using signal, we could interrupt the process. See https://stackoverflow.com/a/494273
This package does it: https://github.com/pnpnpn/timeout-decorator
I'll try implementing the stackoverflow suggestion on my end and write back with news
Guía de contribución
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.
Línea de trabajo
Comienza en deliverability.py, en la llamada a dns_resolver.resolve(domain, "MX"), y sigue cómo se pasa el tiempo de espera configurado cuando check_availability está habilitado. Reproduce o investiga el bucle del resolver y el comportamiento de sleep descritos en el issue. Se considera terminado cuando la resolución DNS no se ejecuta más allá del tiempo de espera indicado y se conserva el comportamiento existente de deliverability.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python
- Área
- networking
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 38/100