]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Handling NoNameservers exception
authorDiego Fronza <diego@isc.org>
Tue, 20 Apr 2021 15:59:46 +0000 (12:59 -0300)
committerMark Andrews <marka@isc.org>
Thu, 27 May 2021 02:37:49 +0000 (12:37 +1000)
In the shutdown system test multiple queries are sent to a resolver
instance, in the meantime we terminate the same resolver process for
which the queries were sent to, either via rndc stop or a SIGTERM
signal, that means the resolver may not be able to answer all those
queries, since it has initiated the shutdown process.

The dnspython library raises a dns.resolver.NoNameservers exception when
a resolver object fails to receive an answer from the specified list
of nameservers (resolver.nameservers list), we need to handle this
exception as this is something that may happen since we asked the
resolver to terminate, as a result it may not answer clients even if
an answer is available, as the operation will be canceled.

bin/tests/system/shutdown/tests-shutdown.py

index 1556f9f5fbda1bd49110af872ead2fec14ca187d..458a777b106b38896ee3eeb40017673b97698084 100755 (executable)
@@ -98,7 +98,6 @@ def do_work(named_proc, resolver, rndc_cmd, kill_method, n_workers, n_queries):
                     futures[executor.submit(launch_rndc, ['stop'])] = 'stop'
                 else:
                     futures[executor.submit(named_proc.terminate)] = 'kill'
-
             else:
                 # We attempt to send couple rndc commands while named is
                 # being shutdown
@@ -117,7 +116,9 @@ def do_work(named_proc, resolver, rndc_cmd, kill_method, n_workers, n_queries):
                 if futures[future] == "stop":
                     ret_code = result
 
-            except (dns.resolver.NXDOMAIN, dns.exception.Timeout):
+            except (dns.resolver.NXDOMAIN,
+                    dns.resolver.NoNameservers,
+                    dns.exception.Timeout):
                 pass
 
         if kill_method == "rndc":