diff --git a/CHANGES b/CHANGES index b6f5147db4..47104d87e5 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,7 @@ +6185. [func] Add "ClientQuota" statistics channel counter, which + indicates the number of the resolver's spilled queries + due to reaching the clients per query quota. [GL !7978] + 6183. [bug] Fix a serve-stale bug where a delegation from cache could be returned to the client. [GL #3950] diff --git a/bin/named/statschannel.c b/bin/named/statschannel.c index f6ce425445..2c4760ca20 100644 --- a/bin/named/statschannel.c +++ b/bin/named/statschannel.c @@ -441,6 +441,8 @@ init_desc(void) { SET_RESSTATDESC(zonequota, "spilled due to zone quota", "ZoneQuota"); SET_RESSTATDESC(serverquota, "spilled due to server quota", "ServerQuota"); + SET_RESSTATDESC(clientquota, "spilled due to clients per query quota", + "ClientQuota"); SET_RESSTATDESC(nextitem, "waited for next item", "NextItem"); SET_RESSTATDESC(priming, "priming queries", "Priming"); diff --git a/doc/arm/reference.rst b/doc/arm/reference.rst index 24de4b1abb..0cc7f21c72 100644 --- a/doc/arm/reference.rst +++ b/doc/arm/reference.rst @@ -8052,6 +8052,12 @@ Resolver Statistics Counters ``QuerySockFail`` This indicates the number of failures in opening query sockets. One common reason for such failures is due to a limitation on file descriptors. +``QueryCurUDP`` + This indicates the number of UDP queries in progress. + +``QueryCurTCP`` + This indicates the number of TCP queries in progress. + ``QueryTimeout`` This indicates the number of query timeouts. @@ -8082,6 +8088,48 @@ Resolver Statistics Counters ``QryRTTnn`` This provides a frequency table on query round-trip times (RTTs). Each ``nn`` specifies the corresponding frequency. In the sequence of ``nn_1``, ``nn_2``, ..., ``nn_m``, the value of ``nn_i`` is the number of queries whose RTTs are between ``nn_(i-1)`` (inclusive) and ``nn_i`` (exclusive) milliseconds. For the sake of convenience, we define ``nn_0`` to be 0. The last entry should be represented as ``nn_m+``, which means the number of queries whose RTTs are equal to or greater than ``nn_m`` milliseconds. +``NumFetch`` + This indicates the number of active fetches. + +``BucketSize`` + This indicates the number the resolver's internal buckets (a static number). + +``REFUSED`` + This indicates the number of REFUSED responses received. + +``ClientCookieOut`` + This indicates the number of COOKIE sent with client cookie only. + +``ServerCookieOut`` + This indicates the number of COOKIE sent with client and server cookie. + +``CookieIn`` + This indicates the number of COOKIE replies received. + +``CookieClientOk`` + This indicates the number of COOKIE client ok. + +``BadEDNSVersion`` + This indicates the number of bad EDNS version replies received. + +``BadCookieRcode`` + This indicates the number of bad cookie rcode replies received. + +``ZoneQuota`` + This indicates the number of queries spilled due to zone quota. + +``ServerQuota`` + This indicates the number of queries spilled due to server quota. + +``ClientQuota`` + This indicates the number of queries spilled due to clients per query quota. + +``NextItem`` + This indicates the number of waits for next item, when an invalid response is received. + +``Priming`` + This indicates the number of priming fetches performed by the resolver. + .. _socket_stats: Socket I/O Statistics Counters diff --git a/lib/dns/include/dns/stats.h b/lib/dns/include/dns/stats.h index 1f57810e73..683f870552 100644 --- a/lib/dns/include/dns/stats.h +++ b/lib/dns/include/dns/stats.h @@ -69,9 +69,10 @@ enum { dns_resstatscounter_badcookie = 40, dns_resstatscounter_zonequota = 41, dns_resstatscounter_serverquota = 42, - dns_resstatscounter_nextitem = 43, - dns_resstatscounter_priming = 44, - dns_resstatscounter_max = 45, + dns_resstatscounter_clientquota = 43, + dns_resstatscounter_nextitem = 44, + dns_resstatscounter_priming = 45, + dns_resstatscounter_max = 46, /* * DNSSEC stats. diff --git a/lib/dns/resolver.c b/lib/dns/resolver.c index b09813d444..cba590ae62 100644 --- a/lib/dns/resolver.c +++ b/lib/dns/resolver.c @@ -10918,6 +10918,7 @@ dns_resolver_createfetch(dns_resolver_t *res, const dns_name_t *name, fctx->spilled = true; } if (fctx->spilled) { + inc_stats(res, dns_resstatscounter_clientquota); result = DNS_R_DROP; goto unlock; }