[php-src] Issue #14245: Weird behaviour for DNS resolution

From: 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) : ![Screenshot 2024-05-15 at 14-47-35 CoreDNS - Kubernetes - Dashboards - Grafana](https://github.com/php/php-src/assets/21103233/4cbc57b2-0a02-4b23-aa78-23f022789d55) ### 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. ![Screenshot 2024-05-15 at 14-47-27 Unbound - System - Dashboards - Grafana](https://github.com/php/php-src/assets/21103233/aee932d2-0e56-42aa-80b4-43e734504e81) ### PHP Version 8.3 ### Operating System _No response_

« previous php.bugs (#246920) next »