From ac3b85114bb6effa5dbf6c943d81a9d1c361c9be Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Tue, 14 Mar 2023 21:15:04 -0700 Subject: [PATCH] ircd::net::dns::resolver: Add conf item to ease off ServFail retries. --- include/ircd/net/dns_resolver.h | 1 + ircd/net_dns_resolver.cc | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/include/ircd/net/dns_resolver.h b/include/ircd/net/dns_resolver.h index ae3ac8cfa..284fd66dc 100644 --- a/include/ircd/net/dns_resolver.h +++ b/include/ircd/net/dns_resolver.h @@ -37,6 +37,7 @@ ircd::net::dns::resolver static conf::item send_rate; static conf::item send_burst; static conf::item retry_max; + static conf::item retry_serv_fail; answers_callback callback; std::vector server; // The list of active servers diff --git a/ircd/net_dns_resolver.cc b/ircd/net_dns_resolver.cc index f64ff673d..100310938 100644 --- a/ircd/net_dns_resolver.cc +++ b/ircd/net_dns_resolver.cc @@ -39,6 +39,13 @@ ircd::net::dns::resolver::retry_max { "default", 20L }, }; +decltype(ircd::net::dns::resolver::retry_serv_fail) +ircd::net::dns::resolver::retry_serv_fail +{ + { "name", "ircd.net.dns.resolver.retry_serv_fail" }, + { "default", true }, +}; + decltype(ircd::net::dns::resolver::servers) ircd::net::dns::resolver::servers { @@ -726,7 +733,14 @@ ircd::net::dns::resolver::handle_reply(const ipport &from, // Handle ServFail as a special case here. We can try again without // handling this tag or propagating this error any further yet. - if(header.rcode == 2 && tag.tries < size_t(server.size())) + const bool serv_fail_retry + { + retry_serv_fail + && header.rcode == 2 + && tag.tries < size_t(server.size()) + }; + + if(serv_fail_retry) { log::error {