2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-08-31 06:25:31 +00:00

Make sure that recursclient gauge is calculated correctly.

We increase recursclients when we attach to recursion quota,
decrease when we detach. In some cases, when we hit soft
quota, we might attach to quota without increasing recursclients
gauge. We then decrease the gauge when we detach from quota,
and it causes the statistics to underflow.
Fix makes sure that we increase recursclients always when we
succesfully attach to recursion quota.
This commit is contained in:
Witold Kręcicki
2019-06-11 11:32:35 +02:00
committed by Mark Andrews
parent cd3b656001
commit 24cfee942f

View File

@@ -2487,12 +2487,18 @@ query_prefetch(ns_client_t *client, dns_name_t *qname,
if (client->recursionquota == NULL) {
result = isc_quota_attach(&client->sctx->recursionquota,
&client->recursionquota);
if (result == ISC_R_SUCCESS && !client->mortal && !TCP(client))
if (result == ISC_R_SUCCESS || result == ISC_R_SOFTQUOTA) {
ns_stats_increment(client->sctx->nsstats,
ns_statscounter_recursclients);
}
if (result == ISC_R_SUCCESS && !client->mortal &&
!TCP(client))
{
result = ns_client_replace(client);
if (result != ISC_R_SUCCESS)
}
if (result != ISC_R_SUCCESS) {
return;
ns_stats_increment(client->sctx->nsstats,
ns_statscounter_recursclients);
}
}
tmprdataset = ns_client_newrdataset(client);
@@ -2694,12 +2700,18 @@ query_rpzfetch(ns_client_t *client, dns_name_t *qname, dns_rdatatype_t type) {
if (client->recursionquota == NULL) {
result = isc_quota_attach(&client->sctx->recursionquota,
&client->recursionquota);
if (result == ISC_R_SUCCESS && !client->mortal && !TCP(client))
if (result == ISC_R_SUCCESS || result == ISC_R_SOFTQUOTA) {
ns_stats_increment(client->sctx->nsstats,
ns_statscounter_recursclients);
}
if (result == ISC_R_SUCCESS && !client->mortal &&
!TCP(client))
{
result = ns_client_replace(client);
if (result != ISC_R_SUCCESS)
}
if (result != ISC_R_SUCCESS) {
return;
ns_stats_increment(client->sctx->nsstats,
ns_statscounter_recursclients);
}
}
tmprdataset = ns_client_newrdataset(client);
@@ -5720,9 +5732,10 @@ ns_query_recurse(ns_client_t *client, dns_rdatatype_t qtype, dns_name_t *qname,
if (client->recursionquota == NULL) {
result = isc_quota_attach(&client->sctx->recursionquota,
&client->recursionquota);
ns_stats_increment(client->sctx->nsstats,
ns_statscounter_recursclients);
if (result == ISC_R_SUCCESS || result == ISC_R_SOFTQUOTA) {
ns_stats_increment(client->sctx->nsstats,
ns_statscounter_recursclients);
}
if (result == ISC_R_SOFTQUOTA) {
static atomic_uint_fast32_t last = 0;