Merge branch '1059-prevent-tcp-failures-from-affecting-edns-stats-v9_11' into 'v9_11'

[v9_11] Prevent TCP failures from affecting EDNS stats

See merge request isc-projects/bind9!2512
This commit is contained in:
Michał Kępień 2019-10-31 05:36:52 -04:00
commit 8736b918bf
3 changed files with 34 additions and 5 deletions

View file

@ -1,3 +1,5 @@
5310. [bug] TCP failures were affecting EDNS statistics. [GL #1059]
5309. [bug] "geoip-use-ecs yes;" was not working for GeoIP2.
[GL #1275]

View file

@ -241,6 +241,18 @@ fi
if [ $ret != 0 ]; then echo_i "failed"; fi
status=`expr $status + $ret`
n=`expr $n + 1`
echo_i "checking that TCP failures do not influence EDNS statistics in the ADB ($n)"
ret=0
rndc_dumpdb ns1 -adb || ret=1
timeouts512=`sed -n "s|.*10\.53\.0\.7.*\[edns \([0-9/][0-9/]*\).*|\1|p" ns1/named_dump.db.test$n | awk -F/ '{print $NF}'`
if [ $timeouts512 -ne 0 ]; then
echo_i "512-byte EDNS timeouts according to ADB: $timeouts512, expected: 0"
ret=1
fi
if [ $ret != 0 ]; then echo_i "failed"; fi
status=`expr $status + $ret`
if $SHELL ../testcrypto.sh > /dev/null 2>&1
then
$PERL $SYSTEMTESTTOP/stop.pl --use-rndc --port ${CONTROLPORT} legacy ns1

View file

@ -890,6 +890,25 @@ resquery_destroy(resquery_t **queryp) {
empty_bucket(res);
}
/*%
* Update EDNS statistics for a server after not getting a response to a UDP
* query sent to it.
*/
static void
update_edns_stats(resquery_t *query) {
fetchctx_t *fctx = query->fctx;
if ((query->options & DNS_FETCHOPT_TCP) != 0) {
return;
}
if ((query->options & DNS_FETCHOPT_NOEDNS0) == 0) {
dns_adb_ednsto(fctx->adb, query->addrinfo, query->udpsize);
} else {
dns_adb_timeout(fctx->adb, query->addrinfo);
}
}
static void
fctx_cancelquery(resquery_t **queryp, dns_dispatchevent_t **deventp,
isc_time_t *finish, bool no_response,
@ -950,11 +969,7 @@ fctx_cancelquery(resquery_t **queryp, dns_dispatchevent_t **deventp,
uint32_t value;
uint32_t mask;
if ((query->options & DNS_FETCHOPT_NOEDNS0) == 0)
dns_adb_ednsto(fctx->adb, query->addrinfo,
query->udpsize);
else
dns_adb_timeout(fctx->adb, query->addrinfo);
update_edns_stats(query);
/*
* If "forward first;" is used and a forwarder timed