]> granicus.if.org Git - pgbouncer/commitdiff
add a separate config for controlling negative dns caching
authorCody Cutrer <cody@instructure.com>
Thu, 19 Sep 2013 19:31:37 +0000 (13:31 -0600)
committerCody Cutrer <cody@instructure.com>
Fri, 27 Sep 2013 19:35:23 +0000 (13:35 -0600)
doc/config.txt
include/bouncer.h
src/dnslookup.c
src/main.c

index e8b48097de921aab1ef826884bba44469badc513..2b990d4ac2971f188c043f14114c7df5c62f4bea 100644 (file)
@@ -361,6 +361,13 @@ Actual DNS TTL is ignored.  [seconds]
 
 Default: 15.0
 
+==== dns_nxdomain_ttl ====
+
+How long error and NXDOMAIN DNS lookups can be cached. [seconds]
+
+Default: 15.0
+
+
 ==== dns_zone_check_period ====
 
 Period to check if zone serial has changed.
index b3091d6056b9ac09889b234aa1a15f257044f634..f0a840bf58ae8a7a68d2402f54d88b8f328ccda2 100644 (file)
@@ -377,6 +377,7 @@ extern usec_t cf_idle_transaction_timeout;
 extern int cf_server_round_robin;
 extern int cf_disable_pqexec;
 extern usec_t cf_dns_max_ttl;
+extern usec_t cf_dns_nxdomain_ttl;
 extern usec_t cf_dns_zone_check_period;
 
 extern int cf_auth_type;
index 403fe85b8f8b6f01d7febe3cd8723a9ece99cc2f..da0a431fb1b5111a712b6966103067f5e6485818 100644 (file)
@@ -1394,13 +1394,14 @@ static void got_result_gai(int result, struct addrinfo *res, void *arg)
                                ai = ai->ai_next;
                        }
                }
+               req->res_ttl = get_cached_time() + cf_dns_max_ttl;
        } else {
                /* lookup failed */
                log_warning("lookup failed: %s: result=%d", req->name, result);
+               req->res_ttl = get_cached_time() + cf_dns_nxdomain_ttl;
        }
 
        req->done = true;
-       req->res_ttl = get_cached_time() + cf_dns_max_ttl;
 
        deliver_info(req);
 }
index 1b83d6a470116a18fb82c3a914635cc1ecbec8fc..b4c5ae1c95217328b2417cd49ca830b9372cd0ee 100644 (file)
@@ -99,6 +99,7 @@ usec_t cf_server_check_delay;
 int cf_server_round_robin;
 int cf_disable_pqexec;
 usec_t cf_dns_max_ttl;
+usec_t cf_dns_nxdomain_ttl;
 usec_t cf_dns_zone_check_period;
 unsigned int cf_max_packet_size;
 
@@ -207,6 +208,7 @@ CF_ABS("suspend_timeout", CF_TIME_USEC, cf_suspend_timeout, 0, "10"),
 CF_ABS("ignore_startup_parameters", CF_STR, cf_ignore_startup_params, 0, ""),
 CF_ABS("disable_pqexec", CF_INT, cf_disable_pqexec, CF_NO_RELOAD, "0"),
 CF_ABS("dns_max_ttl", CF_TIME_USEC, cf_dns_max_ttl, 0, "15"),
+CF_ABS("dns_nxdomain_ttl", CF_TIME_USEC, cf_dns_nxdomain_ttl, 0, "15"),
 CF_ABS("dns_zone_check_period", CF_TIME_USEC, cf_dns_zone_check_period, 0, "0"),
 
 CF_ABS("max_packet_size", CF_UINT, cf_max_packet_size, 0, "2147483647"),