Divij Vaidya created TINKERPOP-2486:
---------------------------------------

             Summary: Client does not load balance requests across available 
connections
                 Key: TINKERPOP-2486
                 URL: https://issues.apache.org/jira/browse/TINKERPOP-2486
             Project: TinkerPop
          Issue Type: Bug
          Components: driver
    Affects Versions: 3.4.8, 3.4.9
            Reporter: Divij Vaidya


The client does not load balance requests across connections in a threadpool 
which cause a request failing with timeout even when a connection is available. 
To verify this, the following test fails:


{code:java}
@Test
public void shouldBalanceConcurrentRequestsAcrossConnections() throws 
InterruptedException {
    final int connPoolSize = 16;
    final Cluster cluster = TestClientFactory.build()
            .minConnectionPoolSize(connPoolSize)
            .maxConnectionPoolSize(connPoolSize)
            .create();
    final Client.ClusteredClient client = cluster.connect();
    client.init();

    try {
        final RequestMessage.Builder request = 
client.buildMessage(RequestMessage.build(Tokens.OPS_EVAL))
                .add(Tokens.ARGS_GREMLIN, "Thread.sleep(5000)");
        final Callable<Connection> sendQueryCallable = () -> 
client.chooseConnection(request.create());
        final List<Callable<Connection>> listOfTasks = new ArrayList<>();
        for (int i=0; i<connPoolSize; i++) {
            listOfTasks.add(sendQueryCallable);
        }

        Set<String> channels = new HashSet<>();
        final List<Future<Connection>> executorSubmitFutures = 
executorServiceForTesting.invokeAll(listOfTasks);
        executorSubmitFutures.parallelStream().map(fut -> {
            try {
                return fut.get();
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (ExecutionException e) {
                e.printStackTrace();
            }
            return null;
        }).forEach(conn -> channels.add(conn.getChannelId()));

        
        System.out.println(channels.size());

    } finally {
        cluster.close();
    }
}
{code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to