You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tinkerpop.apache.org by "Kieran Sherlock (JIRA)" <ji...@apache.org> on 2016/02/04 22:33:39 UTC

[jira] [Created] (TINKERPOP-1125) RoundRobin load balancing always uses the second Host when size = 2

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)