mirror of
https://github.com/isc-projects/bind9.git
synced 2026-06-03 13:59:27 -04:00
[9.20] chg: usr: Exempt prefetches from the fetches-per-zone and fetches-per-server quotas
Fetches generated automatically as a result of 'prefetch' are now exempt from the 'fetches-per-zone' and 'fetches-per-server' quotas. This should help in maintaining the cache from which query responses can be given. Closes #4219 Backport of MR !9095 Merge branch 'backport-4219-exempt-good-queries-from-fetch-limits-9.20' into 'bind-9.20' See merge request isc-projects/bind9!9420
This commit is contained in:
commit
5e78cade52
4 changed files with 38 additions and 8 deletions
|
|
@ -3842,6 +3842,11 @@ system.
|
|||
is sent to that domain, it is recreated with the counters set
|
||||
to zero.)
|
||||
|
||||
.. note::
|
||||
|
||||
Fetches generated automatically in the result of :any:`prefetch` are
|
||||
exempt from this quota.
|
||||
|
||||
.. namedconf:statement:: fetches-per-server
|
||||
:tags: server, query
|
||||
:short: Sets the maximum number of simultaneous iterative queries allowed to be sent by a server to an upstream name server before the server blocks additional queries.
|
||||
|
|
@ -3873,6 +3878,11 @@ system.
|
|||
increased. The :any:`fetch-quota-params` options can be used to adjust
|
||||
the parameters for this calculation.
|
||||
|
||||
.. note::
|
||||
|
||||
Fetches generated automatically in the result of :any:`prefetch` are
|
||||
exempt from this quota, but they are included in the quota calculations.
|
||||
|
||||
.. namedconf:statement:: fetch-quota-params
|
||||
:tags: server, query
|
||||
:short: Sets the parameters for dynamic resizing of the :any:`fetches-per-server` quota in response to detected congestion.
|
||||
|
|
|
|||
|
|
@ -1481,7 +1481,9 @@ copy_namehook_lists(dns_adb_t *adb, dns_adbfind_t *find, dns_adbname_t *name) {
|
|||
dns_adbaddrinfo_t *addrinfo = NULL;
|
||||
entry = namehook->entry;
|
||||
|
||||
if (adbentry_overquota(entry)) {
|
||||
if ((find->options & DNS_ADBFIND_QUOTAEXEMPT) == 0 &&
|
||||
adbentry_overquota(entry))
|
||||
{
|
||||
find->options |= DNS_ADBFIND_OVERQUOTA;
|
||||
goto nextv4;
|
||||
}
|
||||
|
|
@ -1503,7 +1505,9 @@ copy_namehook_lists(dns_adb_t *adb, dns_adbfind_t *find, dns_adbname_t *name) {
|
|||
dns_adbaddrinfo_t *addrinfo = NULL;
|
||||
entry = namehook->entry;
|
||||
|
||||
if (adbentry_overquota(entry)) {
|
||||
if ((find->options & DNS_ADBFIND_QUOTAEXEMPT) == 0 &&
|
||||
adbentry_overquota(entry))
|
||||
{
|
||||
find->options |= DNS_ADBFIND_OVERQUOTA;
|
||||
goto nextv6;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -179,6 +179,10 @@ struct dns_adbfind {
|
|||
* This is useful for reestablishing glue that has expired.
|
||||
*/
|
||||
#define DNS_ADBFIND_STARTATZONE 0x00000020
|
||||
/*%
|
||||
* Fetches will be exempted from the quota.
|
||||
*/
|
||||
#define DNS_ADBFIND_QUOTAEXEMPT 0x00000040
|
||||
/*%
|
||||
* The server's fetch quota is exceeded; it will be treated as
|
||||
* lame for this query.
|
||||
|
|
|
|||
|
|
@ -3263,6 +3263,13 @@ findname(fetchctx_t *fctx, const dns_name_t *name, in_port_t port,
|
|||
options |= DNS_ADBFIND_STARTATZONE;
|
||||
}
|
||||
|
||||
/*
|
||||
* Exempt prefetches from ADB quota.
|
||||
*/
|
||||
if ((fctx->options & DNS_FETCHOPT_PREFETCH) != 0) {
|
||||
options |= DNS_ADBFIND_QUOTAEXEMPT;
|
||||
}
|
||||
|
||||
/*
|
||||
* See what we know about this address.
|
||||
*/
|
||||
|
|
@ -4667,13 +4674,18 @@ fctx_create(dns_resolver_t *res, isc_loop_t *loop, const dns_name_t *name,
|
|||
}
|
||||
|
||||
/*
|
||||
* Are there too many simultaneous queries for this domain?
|
||||
* Exempt prefetch queries from the fetches-per-zone quota check
|
||||
*/
|
||||
result = fcount_incr(fctx, false);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
result = fctx->res->quotaresp[dns_quotatype_zone];
|
||||
inc_stats(res, dns_resstatscounter_zonequota);
|
||||
goto cleanup_nameservers;
|
||||
if ((fctx->options & DNS_FETCHOPT_PREFETCH) == 0) {
|
||||
/*
|
||||
* Are there too many simultaneous queries for this domain?
|
||||
*/
|
||||
result = fcount_incr(fctx, false);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
result = fctx->res->quotaresp[dns_quotatype_zone];
|
||||
inc_stats(res, dns_resstatscounter_zonequota);
|
||||
goto cleanup_nameservers;
|
||||
}
|
||||
}
|
||||
|
||||
log_ns_ttl(fctx, "fctx_create");
|
||||
|
|
|
|||
Loading…
Reference in a new issue