]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Adjust UDP timeouts used in zone maintenance
authorMark Andrews <marka@isc.org>
Wed, 16 Aug 2023 04:40:12 +0000 (14:40 +1000)
committerMark Andrews <marka@isc.org>
Fri, 20 Oct 2023 00:16:01 +0000 (00:16 +0000)
Drop timeout before resending a UDP request from 15 seconds to 5
seconds and add 1 second to the total time to allow for the reply
to the third request to arrive.  This will speed up the time it
takes for named to recover from a lost packet when refreshing a
zone and for it to determine that a primary is down.

(cherry picked from commit 29f399797db658c4bd7835b1592225dff2e6ef8e)

lib/dns/zone.c

index 10e8dbf477f238f139ccf4965dc302013bde9764..ad49b3bf9786faeb8cba3c82d9813f454dde362f 100644 (file)
@@ -12701,14 +12701,14 @@ notify_send_toaddr(isc_task_t *task, isc_event_t *event) {
                result = ISC_R_NOTIMPLEMENTED;
                goto cleanup_key;
        }
-       timeout = 15;
+       timeout = 5;
        if (DNS_ZONE_FLAG(notify->zone, DNS_ZONEFLG_DIALNOTIFY)) {
                timeout = 30;
        }
-       result = dns_request_create(notify->zone->view->requestmgr, message,
-                                   &src, &notify->dst, options, key,
-                                   timeout * 3, timeout, 2, notify->zone->task,
-                                   notify_done, notify, &notify->request);
+       result = dns_request_create(
+               notify->zone->view->requestmgr, message, &src, &notify->dst,
+               options, key, timeout * 3 + 1, timeout, 2, notify->zone->task,
+               notify_done, notify, &notify->request);
        if (result == ISC_R_SUCCESS) {
                if (isc_sockaddr_pf(&notify->dst) == AF_INET) {
                        inc_stats(notify->zone,
@@ -14668,13 +14668,13 @@ again:
        }
 
        zone_iattach(zone, &dummy);
-       timeout = 15;
+       timeout = 5;
        if (DNS_ZONE_FLAG(zone, DNS_ZONEFLG_DIALREFRESH)) {
                timeout = 30;
        }
        result = dns_request_create(
                zone->view->requestmgr, message, &zone->sourceaddr,
-               &zone->primaryaddr, options, key, timeout * 3, timeout, 2,
+               &zone->primaryaddr, options, key, timeout * 3 + 1, timeout, 2,
                zone->task, refresh_callback, zone, &zone->request);
        if (result != ISC_R_SUCCESS) {
                zone_idetach(&dummy);
@@ -14924,7 +14924,7 @@ ns_query(dns_zone_t *zone, dns_rdataset_t *soardataset, dns_stub_t *stub) {
                POST(result);
                goto cleanup;
        }
-       timeout = 15;
+       timeout = 5;
        if (DNS_ZONE_FLAG(zone, DNS_ZONEFLG_DIALREFRESH)) {
                timeout = 30;
        }
@@ -14942,7 +14942,7 @@ ns_query(dns_zone_t *zone, dns_rdataset_t *soardataset, dns_stub_t *stub) {
 
        result = dns_request_create(
                zone->view->requestmgr, message, &zone->sourceaddr,
-               &zone->primaryaddr, DNS_REQUESTOPT_TCP, key, timeout * 3,
+               &zone->primaryaddr, DNS_REQUESTOPT_TCP, key, timeout * 3 + 1,
                timeout, 2, zone->task, stub_callback, cb_args, &zone->request);
        if (result != ISC_R_SUCCESS) {
                zone_debuglog(zone, me, 1, "dns_request_create() failed: %s",
@@ -21248,11 +21248,11 @@ checkds_send_toaddr(isc_task_t *task, isc_event_t *event) {
        dns_zone_log(checkds->zone, ISC_LOG_DEBUG(3),
                     "checkds: create request for DS query to %s", addrbuf);
 
-       timeout = 15;
+       timeout = 5;
        options |= DNS_REQUESTOPT_TCP;
        result = dns_request_create(
                checkds->zone->view->requestmgr, message, &src, &checkds->dst,
-               options, key, timeout * 3, timeout, 2, checkds->zone->task,
+               options, key, timeout * 3 + 1, timeout, 2, checkds->zone->task,
                checkds_done, checkds, &checkds->request);
        if (result != ISC_R_SUCCESS) {
                dns_zone_log(checkds->zone, ISC_LOG_DEBUG(3),