JoshData / JoshData/python-email-validator
DNS resolver can run for longer than the given timeout
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Python
- Star
- 1.4k
- Fork
- 140
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Mô tả
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
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Bắt đầu trong deliverability.py tại lệnh gọi dns_resolver.resolve(domain, "MX") và theo dõi cách timeout được cấu hình được truyền qua khi check_availability được bật. Tái hiện hoặc điều tra vòng lặp resolver và hành vi sleep được mô tả trong issue. Được xem là hoàn tất khi việc phân giải DNS không chạy quá thời gian timeout đã cho và hành vi deliverability hiện có được giữ nguyên.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- python
- Lĩnh vực
- networking
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 38/100