HBASE-26824 TestHBaseTestingUtil.testResolvePortConflict failing after HBASE-26582 (#4203)

Signed-off-by: Duo Zhang <zhangduo@apache.org>
Signed-off-by: Xiaolin Ha <haxiaolin@apache.org>
This commit is contained in:
Andrew Purtell 2022-03-10 22:43:00 -08:00 committed by GitHub
parent dbf56819c3
commit f3faa26047
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 11 additions and 5 deletions

View File

@ -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<Integer> 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 {

View File

@ -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();