Cassandra java driver protocol version and connection limits don't match

久未见 提交于 2020-06-12 18:52:51

问题


I am using java driver version: 2.1.4
Cassandra version: dsc-cassandra-2.1.10
Output from cql gives the following

cqlsh 5.0.1 | Cassandra 2.1.10 | CQL spec 3.2.1 | Native protocol v3

I am protocol V3. But it throws an exception when I try to set it to more than 128 requests per connection. This seems to be a restriction in V2. Explained below:

The following code block:

PoolingOptions poolingOptions = new PoolingOptions();
poolingOptions.setCoreConnectionsPerHost(HostDistance.LOCAL, 8);

Cluster cluster = Cluster.builder()
                         .addContactPoints(x.x.x.x)
                         .withPoolingOptions(poolingOptions)
                         .withProtocolVersion(ProtocolVersion.V3)
                         .build();

System.out.println("Protocol version = "+myCurrentVersion);
System.out.println("LOCAL CORE = "+poolingOptions.getCoreConnectionsPerHost(HostDistance.LOCAL));
System.out.println("LOCAL MAX = "+poolingOptions.getMaxConnectionsPerHost(HostDistance.LOCAL));
System.out.println("Max sim requests = "+poolingOptions.getMaxSimultaneousRequestsPerConnectionThreshold(HostDistance.LOCAL));
System.out.println("Max sim requests per host = "+poolingOptions.getMaxSimultaneousRequestsPerHostThreshold(HostDistance.LOCAL));

 poolingOptions
.setMaxSimultaneousRequestsPerHostThreshold(HostDistance.LOCAL, 3000);

 poolingOptions
.setMaxSimultaneousRequestsPerConnectionThreshold(HostDistance.LOCAL, 128);         

System.out.println("LOCAL CORE = "+poolingOptions.getCoreConnectionsPerHost(HostDistance.LOCAL));
System.out.println("LOCAL MAX = "+poolingOptions.getMaxConnectionsPerHost(HostDistance.LOCAL));
System.out.println("Max sim requests = "+poolingOptions.getMaxSimultaneousRequestsPerConnectionThreshold(HostDistance.LOCAL));
System.out.println("Max sim requests per host = "+poolingOptions.getMaxSimultaneousRequestsPerHostThreshold(HostDistance.LOCAL));

The output is:

Protocol version = V3
LOCAL CORE = 1
LOCAL MAX = 8
Max sim requests = 100
Max sim requests per host = 1024
Exception in thread "main" java.lang.IllegalArgumentException: Max simultaneous requests per connection for LOCAL hosts must be in the range (0, 128)
    at com.datastax.driver.core.PoolingOptions.checkRequestsPerConnectionRange(PoolingOptions.java:370)
    at com.datastax.driver.core.PoolingOptions.setMaxSimultaneousRequestsPerConnectionThreshold(PoolingOptions.java:175)
    at ca.txio.pricehistoryservice.main.ConnectionOptionTest.main(ConnectionOptionTest.java:38)

According to the Cassandra documentation https://docs.datastax.com/en/developer/java-driver/2.1/manual/native_protocol/ and http://docs.datastax.com/en/developer/java-driver/2.1/manual/pooling/

I am protocol V3. But why am I restricted to 128 requests per connection. This seems to be a restriction in V2. Could someone please explain how to find what version I actually am, and if indeed V3, why can't I have more than 128 simultaneous connections?


回答1:


With ProtocolVersion#V3 or above, there are up to 32768 requests per connection, and the pool defaults to a fixed size of 1. You will typically raise the maximum capacity by allowing more simultaneous requests per connection (setMaxRequestsPerConnection(HostDistance, int))

Ref: http://docs.datastax.com/en/drivers/java/2.1/com/datastax/driver/core/PoolingOptions.html#setMaxRequestsPerConnection-com.datastax.driver.core.HostDistance-int-



来源:https://stackoverflow.com/questions/47024198/cassandra-java-driver-protocol-version-and-connection-limits-dont-match

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!