From 538fe6c175174059ae380de8ae6820d179c0b7bf Mon Sep 17 00:00:00 2001 From: Dmitry Kropachev Date: Mon, 27 Jan 2025 07:39:15 -0400 Subject: [PATCH] TokenAwarePolicy: fix bad perf of ReplicaOrdering.RANDOM (#427) `ReplicaOrdering.RANDOM` shows up to `20%` worse throughput. Switching from `java.util.Random `to `ThreadLocalRandom` showed `20%` improvement. --- .../com/datastax/driver/core/policies/TokenAwarePolicy.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/driver-core/src/main/java/com/datastax/driver/core/policies/TokenAwarePolicy.java b/driver-core/src/main/java/com/datastax/driver/core/policies/TokenAwarePolicy.java index 6f4c8d6c545..98323b58a65 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/policies/TokenAwarePolicy.java +++ b/driver-core/src/main/java/com/datastax/driver/core/policies/TokenAwarePolicy.java @@ -40,6 +40,7 @@ import java.util.Iterator; import java.util.List; import java.util.Set; +import java.util.concurrent.ThreadLocalRandom; /** * A wrapper load balancing policy that adds token awareness to a child policy. @@ -250,7 +251,7 @@ protected Host computeNext() { if (replicaOrdering == ReplicaOrdering.RANDOM) { List replicasList = Lists.newArrayList(replicas); - Collections.shuffle(replicasList); + Collections.shuffle(replicasList, ThreadLocalRandom.current()); replicasIterator = replicasList.iterator(); } else { replicasIterator = replicas.iterator();