DNS Cache Manager doesn't check all DNS servers for a match and doesn't honor Clear Cache After Each Iteration setting
- Dominant language
- Java
- Stars
- 9.5k
- Forks
- 2.3k
- Avg merge
- 1d 22h
- Merged PRs (30d)
- 5
Description
### Expected behavior
I have observed two different problems with DNS Cache Manager:
1. 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.conf` in 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's `ExtendedResolver` under the hood which only tries a different server if there is an `IOException` while making request to the current server. Even if the current server refuses the request without throwing an exception, `ExtendedResolver` returns an empty result without trying a different server.
2. 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
Contributor guide
Assessment
This issue has not been assessed yet.