Skip to content

Commit f32fb88

Browse files
committed
reuse resolver instance
1 parent 4e5a8e4 commit f32fb88

File tree

1 file changed

+10
-2
lines changed

1 file changed

+10
-2
lines changed

checks/resolver.py

+10-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import enum
22
from os import getenv
3+
from threading import Lock
34
from typing import List, cast, Tuple, Optional
45

56
import dns
@@ -10,7 +11,6 @@
1011
from dns.rdatatype import RdataType
1112
from dns.resolver import Resolver
1213

13-
# TODO: prevent recreation of resolver on every call
1414
# TODO: see how timeouts are handled
1515

1616

@@ -57,8 +57,17 @@ def resolve(label: str, rr_type: RdataType, allow_bogus=False):
5757
raise ValidationFailure()
5858
return answer.rrset, dnssec_status
5959

60+
_resolver = None
6061

6162
def get_resolver():
63+
# Resolvers are thread safe once configured
64+
global _resolver
65+
if not _resolver:
66+
_resolver = _create_resolver()
67+
return _resolver
68+
69+
70+
def _create_resolver() -> Resolver:
6271
resolver = Resolver(configure=False)
6372
resolver.nameservers = [getenv("IPV4_IP_RESOLVER_INTERNAL_VALIDATING")]
6473
# TODO: revert to
@@ -68,7 +77,6 @@ def get_resolver():
6877
resolver.ednsflags = EDNSFlag.DO
6978
return resolver
7079

71-
7280
# dnspython 2.7 has this built in on Message
7381
def extended_errors_from_answer(message: Message) -> List[dns.edns.EDEOption]:
7482
ede_options = [option for option in message.options if option.otype == dns.edns.OptionType.EDE]

0 commit comments

Comments
 (0)