Browse Source

dns_conf: add expired domain prefetch time

Nick Peng 3 years ago
parent
commit
cbc8c59125
3 changed files with 10 additions and 3 deletions
  1. 2 0
      src/dns_conf.c
  2. 1 0
      src/dns_conf.h
  3. 7 3
      src/dns_server.c

+ 2 - 0
src/dns_conf.c

@@ -64,6 +64,7 @@ int dns_conf_cachesize = DEFAULT_DNS_CACHE_SIZE;
 int dns_conf_prefetch = 0;
 int dns_conf_serve_expired = 1;
 int dns_conf_serve_expired_ttl = 24 * 3600; /* 1 day */
+int dns_conf_serve_expired_prefetch_time;
 int dns_conf_serve_expired_reply_ttl = 3;
 
 /* upstream servers */
@@ -1860,6 +1861,7 @@ static struct config_item _config_item[] = {
 	CONF_YESNO("serve-expired", &dns_conf_serve_expired),
 	CONF_INT("serve-expired-ttl", &dns_conf_serve_expired_ttl, 0, CONF_INT_MAX),
 	CONF_INT("serve-expired-reply-ttl", &dns_conf_serve_expired_reply_ttl, 0, CONF_INT_MAX),
+	CONF_INT("serve-expired-prefetch-time", &dns_conf_serve_expired_prefetch_time, 0, CONF_INT_MAX),
 	CONF_YESNO("dualstack-ip-selection", &dns_conf_dualstack_ip_selection),
 	CONF_INT("dualstack-ip-selection-threshold", &dns_conf_dualstack_ip_selection_threshold, 0, 1000),
 	CONF_CUSTOM("log-level", _config_log_level, NULL),

+ 1 - 0
src/dns_conf.h

@@ -261,6 +261,7 @@ extern int dns_conf_cachesize;
 extern int dns_conf_prefetch;
 extern int dns_conf_serve_expired;
 extern int dns_conf_serve_expired_ttl;
+extern int dns_conf_serve_expired_prefetch_time;
 extern int dns_conf_serve_expired_reply_ttl;
 extern struct dns_servers dns_conf_servers[DNS_MAX_SERVERS];
 extern int dns_conf_server_num;

+ 7 - 3
src/dns_server.c

@@ -4562,9 +4562,13 @@ static void _dns_server_period_run_second(void)
 		if (dns_conf_prefetch) {
 			/* do pre-fetching */
 			if (dns_conf_serve_expired) {
-				int prefetch_time = dns_conf_serve_expired_ttl / 2;
-				if (prefetch_time == 0 || prefetch_time > EXPIRED_DOMAIN_PREFTCH_TIME) {
-					prefetch_time = EXPIRED_DOMAIN_PREFTCH_TIME;
+				int prefetch_time = dns_conf_serve_expired_prefetch_time;
+
+				if (prefetch_time == 0) {
+					prefetch_time = dns_conf_serve_expired_ttl / 2;
+					if (prefetch_time == 0 || prefetch_time > EXPIRED_DOMAIN_PREFTCH_TIME) {
+						prefetch_time = EXPIRED_DOMAIN_PREFTCH_TIME;
+					}
 				}
 				dns_cache_invalidate(NULL, 0, _dns_server_prefetch_expired_domain, prefetch_time);
 			} else {