Kieran Sherlock created TINKERPOP-1125: ------------------------------------------
Summary: RoundRobin load balancing always uses the second Host when size = 2 Key: TINKERPOP-1125 URL: https://issues.apache.org/jira/browse/TINKERPOP-1125 Project: TinkerPop Issue Type: Bug Components: driver Affects Versions: 3.1.0-incubating Reporter: Kieran Sherlock Bring up two gremlin-server Create a Cluster with these two servers, by default LoadBalancingStrategy.RoundRobin() is used. Create a client and make queries. Notice that all requests go to the second server. this.cluster.loadBalancingStrategy().select(msg).next() is called twice in Client.chooseConnection(), so always the second Host is used. The following seems to work {code:diff} diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Client.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Client.java index 8c80b8a..17c9a99 100644 --- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Client.java +++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Client.java @@ -341,7 +341,7 @@ public abstract class Client { final Iterator<Host> possibleHosts = this.cluster.loadBalancingStrategy().select(msg); if (!possibleHosts.hasNext()) throw new TimeoutException("Timed out waiting for an available host."); - final Host bestHost = this.cluster.loadBalancingStrategy().select(msg).next(); + final Host bestHost = possibleHosts.next(); final ConnectionPool pool = hostConnectionPools.get(bestHost); return pool.borrowConnection(cluster.connectionPoolSettings().maxWaitForConnection, TimeUnit.MILLISECONDS); } {code} -- This message was sent by Atlassian JIRA (v6.3.4#6332)