diff --git a/bin/named/statschannel.c b/bin/named/statschannel.c index ef1b77f4da..56bdea17fa 100644 --- a/bin/named/statschannel.c +++ b/bin/named/statschannel.c @@ -472,6 +472,8 @@ init_desc(void) { "ClientQuota"); SET_RESSTATDESC(nextitem, "waited for next item", "NextItem"); SET_RESSTATDESC(priming, "priming queries", "Priming"); + SET_RESSTATDESC(forwardonlyfail, "all forwarders failed", + "ForwardOnlyFail"); INSIST(i == dns_resstatscounter_max); diff --git a/lib/dns/include/dns/stats.h b/lib/dns/include/dns/stats.h index 447ec95277..a08f080217 100644 --- a/lib/dns/include/dns/stats.h +++ b/lib/dns/include/dns/stats.h @@ -74,7 +74,8 @@ enum { dns_resstatscounter_clientquota = 43, dns_resstatscounter_nextitem = 44, dns_resstatscounter_priming = 45, - dns_resstatscounter_max = 46, + dns_resstatscounter_forwardonlyfail = 46, + dns_resstatscounter_max = 47, /* * DNSSEC stats. diff --git a/lib/dns/resolver.c b/lib/dns/resolver.c index f8d5cdc430..e64d6693af 100644 --- a/lib/dns/resolver.c +++ b/lib/dns/resolver.c @@ -3715,13 +3715,23 @@ out: /* * If all of the addresses found were over the - * fetches-per-server quota, return the - * configured response. + * fetches-per-server quota, increase the ServerQuota + * counter and return the configured response. */ if (all_spilled) { result = res->quotaresp[dns_quotatype_server]; inc_stats(res, dns_resstatscounter_serverquota); } + + /* + * If we are using a 'forward only' policy, and all + * the forwarders are bad, increase the ForwardOnlyFail + * counter. + */ + if (fctx->fwdpolicy == dns_fwdpolicy_only) { + inc_stats(res, + dns_resstatscounter_forwardonlyfail); + } } } else { /*