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)