zookeeper-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andor Molnar <an...@cloudera.com>
Subject Name resolution in StaticHostProvider
Date Mon, 19 Feb 2018 11:18:31 GMT
Hi all,

We need more eyes and brains on the following PR:


I added a comment few days ago about the way we currently do DNS name
resolution in this class and a suggestion on how we could simplify things a
little bit. We talked about it with Abe Fine, but we're a little bit unsure
and cannot get a conclusion. It would be extremely handy to get more
feedback from you.

To add some colour to it, let me elaborate on the situation here:

In general, the task that StaticHostProvider does is to get a list of
potentially unresolved InetSocketAddress objects, resolve them and iterate
over the resolved objects by calling next() method.

*Option #1 (current logic)*
- Resolve addresses with getAllByName() which returns a list of IP
addresses associated with the address.
- Cache all these IP's, shuffle them and iterate over.
- If client is unable to connect to an IP, remove all IPs from the list
which the original servername was resolved to and re-resolve it.

*Option #2 (getByName())*
- Resolve address with getByName() instead which returns only the first IP
address of the name,
- Do not cache IPs,
- Shuffle the *names* and resolve with getByName() *every time* when next()
is called,
- JDK's built-in caching will prevent name servers from being flooded and
will do the re-resolution automatically when cache expires,
- Names with multiple IPs will be handled by DNS servers which (if
configured properly) return IPs in different order - this is called DNS
Round Robin -, so getByName() will return different IP on each call.

*Options #3*
- There's a small problem with option#2: if DNS server is not configured
properly and handles the round-robin case in a way that it always return
the IP list in the same order, getByName() will never return the next ip,
- In order to overcome that, use getAllByName() instead, shuffle the list
and return the first IP.

All feedback if much appreciated.


  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message