Github user hanm commented on a diff in the pull request:
https://github.com/apache/zookeeper/pull/534#discussion_r194186665
--- Diff: src/java/main/org/apache/zookeeper/client/StaticHostProvider.java
---
@@ -149,15 +185,12 @@ public
StaticHostProvider(Collection<InetSocketAddress> serverAddresses,
* @param currentHost the host to which this client is currently
connected
* @return true if changing connections is necessary for
load-balancing, false otherwise
*/
-
-
@Override
public synchronized boolean updateServerList(
Collection<InetSocketAddress> serverAddresses,
InetSocketAddress currentHost) {
- // Resolve server addresses and shuffle them
- List<InetSocketAddress> resolvedList =
resolveAndShuffle(serverAddresses);
- if (resolvedList.isEmpty()) {
+ List<InetSocketAddress> shuffledList = shuffle(serverAddresses);
--- End diff --
I am not sure why we change the `resolveAndShuffle` to `shuffle` here, they
are semantically different (one tries to resolve address, the other does not
and only does shuffle.). The `serverAddresses` passed in this method is
unresolved address, and we need it resolved because we rely on the resolved
addresses to compare the old / new server list (in the context of probability
rebalancing clients for dynamic reconfiguration).
Without resolving I think the client rebalance logic will be broken. A side
note that all tests still passed probably indicate we don't have a 100%
coverage for the logic in our tests.
---