Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2268,6 +2268,7 @@ private void putUpWebUI() throws IOException {
// auto bind enabled, try to use another port
LOG.info("Failed binding http info server to port: " + port);
port++;
LOG.info("Retry starting http info server with port: " + port);
}
}
port = this.infoServer.getPort();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,16 @@

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.net.BindException;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.apache.hadoop.hbase.testclassification.MediumTests;
import org.junit.ClassRule;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@org.junit.Ignore // See HBASE-24342. This test can't pass 100% of time as written so disabling
@Category(MediumTests.class)
public class TestClusterPortAssignment {
@ClassRule
Expand All @@ -44,16 +45,20 @@ public class TestClusterPortAssignment {
@Test
public void testClusterPortAssignment() throws Exception {
boolean retry = false;
int retryCount = 0;
do {
int masterPort = HBaseTestingUtility.randomFreePort();
int masterInfoPort = HBaseTestingUtility.randomFreePort();
int rsPort = HBaseTestingUtility.randomFreePort();
int rsInfoPort = HBaseTestingUtility.randomFreePort();
TEST_UTIL.getConfiguration().setBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS, false);
TEST_UTIL.getConfiguration().setBoolean(HConstants.REGIONSERVER_INFO_PORT_AUTO, false);
TEST_UTIL.getConfiguration().setBoolean("fs.hdfs.impl.disable.cache", true);
TEST_UTIL.getConfiguration().setInt(HConstants.MASTER_PORT, masterPort);
TEST_UTIL.getConfiguration().setInt(HConstants.MASTER_INFO_PORT, masterInfoPort);
TEST_UTIL.getConfiguration().setInt(HConstants.REGIONSERVER_PORT, rsPort);
TEST_UTIL.getConfiguration().setInt(HConstants.REGIONSERVER_INFO_PORT, rsInfoPort);
LOG.info("Ports: " + masterPort + ", " + masterInfoPort + ", " + rsPort + ", " + rsInfoPort);
try {
MiniHBaseCluster cluster = TEST_UTIL.startMiniCluster();
assertTrue("Cluster failed to come up", cluster.waitForActiveAndReadyMaster(30000));
Expand All @@ -67,17 +72,22 @@ public void testClusterPortAssignment() throws Exception {
assertEquals("RS info port is incorrect", rsInfoPort,
cluster.getRegionServer(0).getInfoServer().getPort());
} catch (Exception e) {
if (e instanceof BindException || e.getCause() != null &&
(e.getCause() instanceof BindException || e.getCause().getCause() != null &&
e.getCause().getCause() instanceof BindException)) {
Throwable rootCause = ExceptionUtils.getRootCause(e);
if (rootCause instanceof BindException) {
LOG.info("Failed bind, need to retry", e);
retry = true;
retryCount++;
} else {
throw e;
retry = false;
fail("Failed to start mini cluster" + e);
}
} finally {
TEST_UTIL.shutdownMiniCluster();
}
} while (retry);
} while (retry && retryCount < 10);

if (retry) {
fail("Retry exhausted.");
}
}
}