Modify the code-owners plugin to use the new Accounts#randomNIds method For storage systems that optimizes Accounts#randomNIds implementation, this should lead to performance improvements. Change-Id: Ia21b61f8527a8462734e477fe288f3d479db5f51 Release-Notes: skip Google-Bug-Id: b/299605283
diff --git a/java/com/google/gerrit/plugins/codeowners/restapi/AbstractGetCodeOwnersForPath.java b/java/com/google/gerrit/plugins/codeowners/restapi/AbstractGetCodeOwnersForPath.java index bc202da..dba335b 100644 --- a/java/com/google/gerrit/plugins/codeowners/restapi/AbstractGetCodeOwnersForPath.java +++ b/java/com/google/gerrit/plugins/codeowners/restapi/AbstractGetCodeOwnersForPath.java
@@ -73,6 +73,7 @@ import java.util.Optional; import java.util.Random; import java.util.Set; +import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.atomic.AtomicBoolean; import java.util.stream.Stream; import org.kohsuke.args4j.Option; @@ -537,7 +538,8 @@ private static <T> Stream<T> randomizeOrder(Optional<Long> seed, Set<T> set) { List<T> randomlyOrderedCodeOwners = new ArrayList<>(set); Collections.shuffle( - randomlyOrderedCodeOwners, seed.isPresent() ? new Random(seed.get()) : new Random()); + randomlyOrderedCodeOwners, + seed.isPresent() ? new Random(seed.get()) : ThreadLocalRandom.current()); return randomlyOrderedCodeOwners.stream(); } @@ -616,6 +618,9 @@ * <p>No visibility check is performed. */ private Stream<Account.Id> getRandomUsers(int limit) throws IOException { - return randomizeOrder(seed, accounts.allIds()).limit(limit); + return accounts + .randomNIds( + limit, seed.isPresent() ? seed.get() : ThreadLocalRandom.current().nextLong()) + .stream(); } }