From 097e19eae235410751a9529d4005cf8edad944ac Mon Sep 17 00:00:00 2001 From: Andrew Purtell Date: Thu, 10 Mar 2022 22:43:00 -0800 Subject: [PATCH] HBASE-26824 TestHBaseTestingUtil.testResolvePortConflict failing after HBASE-26582 (#4203) Signed-off-by: Duo Zhang Signed-off-by: Xiaolin Ha --- .../hadoop/hbase/HBaseCommonTestingUtility.java | 14 ++++++++++---- .../hadoop/hbase/TestHBaseTestingUtility.java | 2 +- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/hbase-common/src/test/java/org/apache/hadoop/hbase/HBaseCommonTestingUtility.java b/hbase-common/src/test/java/org/apache/hadoop/hbase/HBaseCommonTestingUtility.java index 71704babf789..e0525fc25222 100644 --- a/hbase-common/src/test/java/org/apache/hadoop/hbase/HBaseCommonTestingUtility.java +++ b/hbase-common/src/test/java/org/apache/hadoop/hbase/HBaseCommonTestingUtility.java @@ -23,6 +23,7 @@ import java.util.Arrays; import java.util.HashSet; import java.util.List; +import java.util.Random; import java.util.Set; import java.util.UUID; import java.util.concurrent.ThreadLocalRandom; @@ -280,10 +281,11 @@ static class PortAllocator { /** A set of ports that have been claimed using {@link #randomFreePort()}. */ private final Set takenRandomPorts = new HashSet<>(); - + private final Random random; private final AvailablePortChecker portChecker; public PortAllocator() { + this.random = new Random(); this.portChecker = new AvailablePortChecker() { @Override public boolean available(int port) { @@ -298,10 +300,15 @@ public boolean available(int port) { }; } - public PortAllocator(AvailablePortChecker portChecker) { + public PortAllocator(Random random, AvailablePortChecker portChecker) { + this.random = random; this.portChecker = portChecker; } + public PortAllocator(AvailablePortChecker portChecker) { + this(new Random(), portChecker); + } + /** * Returns a random free port and marks that port as taken. Not thread-safe. Expected to be * called from single-threaded test setup code/ @@ -328,8 +335,7 @@ public int randomFreePort() { * intended for dynamic allocation (see http://bit.ly/dynports). */ private int randomPort() { - return MIN_RANDOM_PORT - + ThreadLocalRandom.current().nextInt(MAX_RANDOM_PORT - MIN_RANDOM_PORT); + return MIN_RANDOM_PORT + random.nextInt(MAX_RANDOM_PORT - MIN_RANDOM_PORT); } interface AvailablePortChecker { diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/TestHBaseTestingUtility.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/TestHBaseTestingUtility.java index 3182e62c1bbd..993af2187237 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/TestHBaseTestingUtility.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/TestHBaseTestingUtility.java @@ -428,7 +428,7 @@ public Integer answer(InvocationOnMock invocation) { when(portChecker.available(anyInt())).thenReturn(true); HBaseTestingUtility.PortAllocator portAllocator = - new HBaseTestingUtility.PortAllocator(portChecker); + new HBaseTestingUtility.PortAllocator(random, portChecker); int port1 = portAllocator.randomFreePort(); int port2 = portAllocator.randomFreePort();