diff --git a/core/src/main/java/com/datastax/oss/driver/api/core/metadata/TokenMap.java b/core/src/main/java/com/datastax/oss/driver/api/core/metadata/TokenMap.java index 9f41b9319e8..dcc73961098 100644 --- a/core/src/main/java/com/datastax/oss/driver/api/core/metadata/TokenMap.java +++ b/core/src/main/java/com/datastax/oss/driver/api/core/metadata/TokenMap.java @@ -189,4 +189,8 @@ default Set getReplicas(@NonNull String keyspaceName, @NonNull TokenRange /** The name of the partitioner class in use, as reported by the Cassandra nodes. */ @NonNull String getPartitionerName(); + + /** The partitioner class in use, as reported by the Cassandra nodes. */ + @NonNull + Partitioner getPartitioner(); } diff --git a/core/src/main/java/com/datastax/oss/driver/internal/core/loadbalancing/BasicLoadBalancingPolicy.java b/core/src/main/java/com/datastax/oss/driver/internal/core/loadbalancing/BasicLoadBalancingPolicy.java index d097425026b..e5547db8770 100644 --- a/core/src/main/java/com/datastax/oss/driver/internal/core/loadbalancing/BasicLoadBalancingPolicy.java +++ b/core/src/main/java/com/datastax/oss/driver/internal/core/loadbalancing/BasicLoadBalancingPolicy.java @@ -333,6 +333,9 @@ protected Set getReplicas(@Nullable Request request, @Nullable Session ses } partitioner = request.getPartitioner(); + if (partitioner == null && maybeTokenMap.isPresent()) { + partitioner = maybeTokenMap.get().getPartitioner(); + } } catch (Exception e) { // Protect against poorly-implemented Request instances LOG.error("Unexpected error while trying to compute query plan", e); diff --git a/core/src/main/java/com/datastax/oss/driver/internal/core/metadata/token/DefaultTokenMap.java b/core/src/main/java/com/datastax/oss/driver/internal/core/metadata/token/DefaultTokenMap.java index 26c223b182a..b9f752a7bca 100644 --- a/core/src/main/java/com/datastax/oss/driver/internal/core/metadata/token/DefaultTokenMap.java +++ b/core/src/main/java/com/datastax/oss/driver/internal/core/metadata/token/DefaultTokenMap.java @@ -207,6 +207,12 @@ public String getPartitionerName() { return tokenFactory.getPartitionerName(); } + @NonNull + @Override + public Partitioner getPartitioner() { + return tokenFactory; + } + private KeyspaceTokenMap getKeyspaceMap(CqlIdentifier keyspace) { Map config = replicationConfigs.get(keyspace); return (config == null) ? null : keyspaceMaps.get(config);