Github user hanm commented on a diff in the pull request:
https://github.com/apache/zookeeper/pull/451#discussion_r191034929
--- Diff: src/java/main/org/apache/zookeeper/client/HostProvider.java ---
@@ -53,7 +54,7 @@
* @param spinDelay
* Milliseconds to wait if all hosts have been tried once.
*/
- public InetSocketAddress next(long spinDelay);
+ public InetSocketAddress next(long spinDelay) throws
UnknownHostException;
--- End diff --
>> In a nutshell the problem of unresolvable DNS name must be handled
somewhere and here're the considerations
I agree with this, however this can be done without throwing the
UnknownHostException here. We can just return the curAddr in case of resolving
failure, and since curAddr is not resolved, trying to connect to it on caller
side will not succeed and caller can continue retry etc with existing logic.
The primary concern here is change of a public API which might require clients
(e.g. HBase) to recompile with ZK, so I prefer the approach that can achieve
same goal (let caller handle retry logic) w/o changing the signature of a
public API (alternatively we can throw an unchecked exception but semantically
that sounds no better than UnknownHostException).
So I am thinking the semantic of next() is:
* If we can resolve an address, resolve it and return.
* If we can't resolve an address, return an unresolved address which
contain enough information (host, port etc) for caller to decide what to do.
---