DNS Cache Manager doesn't check all DNS servers for a match and doesn't honor Clear Cache After Each Iteration setting
Expected behavior
I have observed two different problems with DNS Cache Manager:
-
DNS Cache Manager takes a list of DNS servers and round-robins through them for every lookup. However, for any given lookup, if the DNS server returns a failure, cache manager fails the request instead of checking the next server. This is problematic while trying to use a list of zoned authoritative servers as every server may not have all the records. This is in contrast to behavior of say
/etc/resolv.confin Linux which checks the next server in the list until it finds a match. I checked the code and this is happening because DNS cache manager is using dnsjava'sExtendedResolverunder the hood which only tries a different server if there is anIOExceptionwhile making request to the current server. Even if the current server refuses the request without throwing an exception,ExtendedResolverreturns an empty result without trying a different server. -
DNS Cache Manager has a setting to Clear Cache After Each Iteration. When enabled, it clears the JMeter thread-local cache before starting the next iteration. However, it doesn't clear the DNS resolver's cache so the result could still be coming from a cache. To test this, I created a simple test with 10 iterations of a http request and enabled the clear cache setting and captured the DNS requests using Wireshark. The expectation is that there'd be 10 calls to DNS, however there is only 1 call to DNS and remaining 9 requests are using the cached value.
Actual behavior
No response
Steps to reproduce the problem
Any JMeter test with a DNS cache manager would reproduce the issue.
JMeter Version
5.5
Java Version
8
OS Version
Windows 11
I'd be happy to provide more details or even a patch if the issue is confirmed
@vlsi Can you please help us evaluate the issue? (Not sure who else to tag :) )