From f3faa26047f8cceecf7c3f2a82c30dcba9ec5df0 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/HBaseCommonTestingUtil.java | 14 ++++++++++---- .../apache/hadoop/hbase/TestHBaseTestingUtil.java | 2 +- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/hbase-common/src/test/java/org/apache/hadoop/hbase/HBaseCommonTestingUtil.java b/hbase-common/src/test/java/org/apache/hadoop/hbase/HBaseCommonTestingUtil.java index fa5a8dea3ec..3a63ae7368b 100644 --- a/hbase-common/src/test/java/org/apache/hadoop/hbase/HBaseCommonTestingUtil.java +++ b/hbase-common/src/test/java/org/apache/hadoop/hbase/HBaseCommonTestingUtil.java @@ -23,6 +23,7 @@ import java.net.ServerSocket; 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; @@ -266,10 +267,11 @@ public class HBaseCommonTestingUtil { /** 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) { @@ -284,10 +286,15 @@ public class HBaseCommonTestingUtil { }; } - 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/ @@ -314,8 +321,7 @@ public class HBaseCommonTestingUtil { * 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/TestHBaseTestingUtil.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/TestHBaseTestingUtil.java index 489f6eb374d..7076bf93612 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/TestHBaseTestingUtil.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/TestHBaseTestingUtil.java @@ -429,7 +429,7 @@ public class TestHBaseTestingUtil { when(portChecker.available(anyInt())).thenReturn(true); HBaseTestingUtil.PortAllocator portAllocator = - new HBaseTestingUtil.PortAllocator(portChecker); + new HBaseTestingUtil.PortAllocator(random, portChecker); int port1 = portAllocator.randomFreePort(); int port2 = portAllocator.randomFreePort();