diff options
author | AdamPD <adam@pharmadata.net.au> | 2015-04-13 16:25:29 +1000 |
---|---|---|
committer | Steven Phillips <smp@apache.org> | 2015-04-13 11:37:08 -0700 |
commit | a6df26ac030068239ad63335f871f0aefe735ef7 (patch) | |
tree | fd561884decbd785bfc1c03222e278cc0d8e7cd4 /exec/java-exec/src/main/java/org/apache/drill/exec/client | |
parent | 49042bca078aacb24a8d0dddb451363be8e764da (diff) |
DRILL-2512: Shuffle the list of Drill endpoints before connecting
Diffstat (limited to 'exec/java-exec/src/main/java/org/apache/drill/exec/client')
-rw-r--r-- | exec/java-exec/src/main/java/org/apache/drill/exec/client/DrillClient.java | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/client/DrillClient.java b/exec/java-exec/src/main/java/org/apache/drill/exec/client/DrillClient.java index 9a948fb2f..579cf7dc9 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/client/DrillClient.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/client/DrillClient.java @@ -24,7 +24,9 @@ import io.netty.buffer.DrillBuf; import java.io.Closeable; import java.io.IOException; +import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.Properties; import java.util.Vector; @@ -165,9 +167,10 @@ public class DrillClient implements Closeable, ConnectionThrottle { this.props = upBuilder.build(); } - Collection<DrillbitEndpoint> endpoints = clusterCoordinator.getAvailableEndpoints(); + ArrayList<DrillbitEndpoint> endpoints = new ArrayList<>(clusterCoordinator.getAvailableEndpoints()); checkState(!endpoints.isEmpty(), "No DrillbitEndpoint can be found"); - // just use the first endpoint for now + // shuffle the collection then get the first endpoint + Collections.shuffle(endpoints); DrillbitEndpoint endpoint = endpoints.iterator().next(); eventLoopGroup = createEventLoop(config.getInt(ExecConstants.CLIENT_RPC_THREADS), "Client-"); @@ -190,11 +193,12 @@ public class DrillClient implements Closeable, ConnectionThrottle { retry--; try { Thread.sleep(this.reconnectDelay); - Collection<DrillbitEndpoint> endpoints = clusterCoordinator.getAvailableEndpoints(); + ArrayList<DrillbitEndpoint> endpoints = new ArrayList<>(clusterCoordinator.getAvailableEndpoints()); if (endpoints.isEmpty()) { continue; } client.close(); + Collections.shuffle(endpoints); connect(endpoints.iterator().next()); return true; } catch (Exception e) { |