[php-src] Issue #14245: Weird behaviour for DNS resolution
| From: | kirby0025 | Date: | Wed, 15 May 2024 12:51:52 +0000 |
| Subject: | [php-src] Issue #14245: Weird behaviour for DNS resolution | ||
| Groups: | php.bugs | ||
| Request: | Send a blank email to php-bugs+get-246920@lists.php.net to get a copy of this message | ||
Issue: https://github.com/php/php-src/issues/14245
Author: kirby0025
### Description
I have look on the internet and see very little talk about this so it's possible that my php is
wrongly configure but I have failed to find a directive related to this.
## The following code:
Not sure where the code is located, my C understanding is pretty weak and I'm an ops guy.
I think it's around here : https://github.com/php/php-src/blob/master/ext/standard/dns.c
### What I see :
When a php process does a dns query for both A and AAAA type, if A is valid but AAAA is empty, both
records are not stored in cache and therefor the next request will trigger a dns query for both type
again.
It seems like the empty AAAA response triggers an invalidation in the cache for both A and AAAA
record. This behaviour floods the network needlessly.
I have notice this behaviour both on VMs or on containers, and from a wide range of php versions
(5.6 to 8.3) or OS versions (Debian 9/10/11/12, Ubuntu 16/18/20/22 or Alpine 3.18/3.19).
I can provide this graph to illustrate better what I'm saying (Yellow and Green line are AAAA
and A type) :

### What I would expect :
In my opinion, once a A record have been successfully retrieved, it should be stored in cache and
the AAAA should not invalidate it. And maybe once the A record expires it should try again both
resolution (A and AAAA).
I have tested successfully to disable ipv6 in kernel for VMs and it drastically reduces the number
of DNS query sent by applications (see graph below) and looks like the A response is stored in
cache. This is a possible solution for VMs but complicated one in a Kubernetes environment.

### PHP Version
8.3
### Operating System
_No response_