]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
fixup! daemon: forwarding - attempt to handle timeouted upstream
authorVladimír Čunát <vladimir.cunat@nic.cz>
Fri, 30 Nov 2018 09:37:40 +0000 (10:37 +0100)
committerGrigorii Demidov <grigorii.demidov@nic.cz>
Fri, 7 Dec 2018 10:23:42 +0000 (11:23 +0100)
Reduce copy&paste.

lib/resolve.c

index 6361d705cd912638d219f8c3bd0f67731a7108e9..40099367756ef39ef165fa72a14767257142bd82 100644 (file)
@@ -1423,24 +1423,12 @@ ns_election:
 
        const struct kr_qflags qflg = qry->flags;
        const bool retry = qflg.TCP || qflg.BADCOOKIE_AGAIN;
+       bool check_timeouted = false;
        if (qflg.AWAIT_IPV4 || qflg.AWAIT_IPV6) {
                kr_nsrep_elect_addr(qry, request->ctx);
        } else if (qflg.FORWARD || qflg.STUB) {
                kr_nsrep_sort(&qry->ns, request->ctx->cache_rtt);
-               if (qry->ns.score > KR_NS_TIMEOUT) {
-                       if (kr_zonecut_is_empty(&qry->zone_cut)) {
-                               VERBOSE_MSG(qry, "=> no NS with an address\n");
-                       } else {
-                               VERBOSE_MSG(qry, "=> no valid NS left\n");
-                       }
-                       if (!qry->flags.NO_NS_FOUND) {
-                               qry->flags.NO_NS_FOUND = true;
-                       } else {
-                               ITERATE_LAYERS(request, qry, reset);
-                               kr_rplan_pop(rplan, qry);
-                       }
-                       return KR_STATE_PRODUCE;
-               }
+               check_timeouted = true;
        } else if (!qry->ns.name || !retry) { /* Keep NS when requerying/stub/badcookie. */
                /* Root DNSKEY must be fetched from the hints to avoid chicken and egg problem. */
                if (qry->sname[0] == '\0' && qry->stype == KNOT_RRTYPE_DNSKEY) {
@@ -1448,20 +1436,22 @@ ns_election:
                        qry->flags.NO_THROTTLE = true; /* Pick even bad SBELT servers */
                }
                kr_nsrep_elect(qry, request->ctx);
-               if (qry->ns.score > KR_NS_MAX_SCORE) {
-                       if (kr_zonecut_is_empty(&qry->zone_cut)) {
-                               VERBOSE_MSG(qry, "=> no NS with an address\n");
-                       } else {
-                               VERBOSE_MSG(qry, "=> no valid NS left\n");
-                       }
-                       if (!qry->flags.NO_NS_FOUND) {
-                               qry->flags.NO_NS_FOUND = true;
-                       } else {
-                               ITERATE_LAYERS(request, qry, reset);
-                               kr_rplan_pop(rplan, qry);
-                       }
-                       return KR_STATE_PRODUCE;
+               check_timeouted = true;
+       }
+
+       if (check_timeouted && qry->ns.score > KR_NS_TIMEOUT) {
+               if (kr_zonecut_is_empty(&qry->zone_cut)) {
+                       VERBOSE_MSG(qry, "=> no NS with an address\n");
+               } else {
+                       VERBOSE_MSG(qry, "=> no valid NS left\n");
                }
+               if (!qry->flags.NO_NS_FOUND) {
+                       qry->flags.NO_NS_FOUND = true;
+               } else {
+                       ITERATE_LAYERS(request, qry, reset);
+                       kr_rplan_pop(rplan, qry);
+               }
+               return KR_STATE_PRODUCE;
        }
 
        /* Resolve address records */