Exempt prefetches from the fetches-per-server quota

Give prefetches a free pass through the quota so that the cache
entries for popular zones could be updated successfully even if the
quota for is already reached.
This commit is contained in:
Aram Sargsyan
2024-08-21 12:45:33 +00:00
parent dc41b0c81b
commit 6cb6c5bc41
3 changed files with 17 additions and 2 deletions
+6 -2
View File
@@ -1478,7 +1478,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;
}
@@ -1500,7 +1502,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;
}
+4
View File
@@ -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.
+7
View File
@@ -3257,6 +3257,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.
*/