You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by st...@apache.org on 2009/04/30 01:14:59 UTC
svn commit: r769989 - in /hadoop/hbase/trunk: ./ conf/
src/java/org/apache/hadoop/hbase/
src/java/org/apache/hadoop/hbase/regionserver/ src/test/
src/test/org/apache/hadoop/hbase/
Author: stack
Date: Wed Apr 29 23:14:57 2009
New Revision: 769989
URL: http://svn.apache.org/viewvc?rev=769989&view=rev
Log:
HBASE-1271 Allow multiple tests to run on one machine
Modified:
hadoop/hbase/trunk/CHANGES.txt
hadoop/hbase/trunk/conf/hbase-default.xml
hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/HServerInfo.java
hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
hadoop/hbase/trunk/src/test/hbase-site.xml
hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/MiniHBaseCluster.java
hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/MiniZooKeeperCluster.java
Modified: hadoop/hbase/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/CHANGES.txt?rev=769989&r1=769988&r2=769989&view=diff
==============================================================================
--- hadoop/hbase/trunk/CHANGES.txt (original)
+++ hadoop/hbase/trunk/CHANGES.txt Wed Apr 29 23:14:57 2009
@@ -178,6 +178,8 @@
split a key range in N chunks (Jon Gray via Stack)
HBASE-1350 New method in HTable.java to return start and end keys for
regions in a table (Vimal Mathew via Stack)
+ HBASE-1271 Allow multiple tests to run on one machine
+ (Evgeny Ryabitskiy via Stack)
Release 0.19.0 - 01/21/2009
INCOMPATIBLE CHANGES
Modified: hadoop/hbase/trunk/conf/hbase-default.xml
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/conf/hbase-default.xml?rev=769989&r1=769988&r2=769989&view=diff
==============================================================================
--- hadoop/hbase/trunk/conf/hbase-default.xml (original)
+++ hadoop/hbase/trunk/conf/hbase-default.xml Wed Apr 29 23:14:57 2009
@@ -108,6 +108,14 @@
</description>
</property>
<property>
+ <name>hbase.regionserver.info.port.auto</name>
+ <value>false</value>
+ <description>Info server auto port bind. Enables automatic port
+ search if hbase.regionserver.info.port is already in use.
+ Useful for testing, turned off by default.
+ </description>
+ </property>
+ <property>
<name>hbase.regionserver.info.bindAddress</name>
<value>0.0.0.0</value>
<description>The address for the hbase regionserver web UI
Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/HServerInfo.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/HServerInfo.java?rev=769989&r1=769988&r2=769989&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/HServerInfo.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/HServerInfo.java Wed Apr 29 23:14:57 2009
@@ -111,6 +111,13 @@
}
/**
+ * @param infoPort - new port of info server
+ */
+ public void setInfoPort(int infoPort) {
+ this.infoPort = infoPort;
+ }
+
+ /**
* @param startCode the startCode to set
*/
public synchronized void setStartCode(long startCode) {
Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java?rev=769989&r1=769988&r2=769989&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java Wed Apr 29 23:14:57 2009
@@ -26,6 +26,7 @@
import java.lang.management.RuntimeMXBean;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
+import java.net.BindException;
import java.net.InetSocketAddress;
import java.util.ArrayList;
import java.util.Arrays;
@@ -1056,11 +1057,30 @@
this.leases.start();
// Put up info server.
int port = this.conf.getInt("hbase.regionserver.info.port", 60030);
+ // -1 is for disabling info server
if (port >= 0) {
- String a = this.conf.get("hbase.master.info.bindAddress", "0.0.0.0");
- this.infoServer = new InfoServer("regionserver", a, port, false);
- this.infoServer.setAttribute("regionserver", this);
- this.infoServer.start();
+ String addr = this.conf.get("hbase.master.info.bindAddress", "0.0.0.0");
+ // check if auto port bind enabled
+ boolean auto = this.conf.getBoolean("hbase.regionserver.info.port.auto",
+ false);
+ while (true) {
+ try {
+ this.infoServer = new InfoServer("regionserver", addr, port, false);
+ this.infoServer.setAttribute("regionserver", this);
+ this.infoServer.start();
+ break;
+ } catch (BindException e) {
+ if (!auto){
+ // auto bind disabled throw BindException
+ throw e;
+ }
+ // auto bind enabled, try to use another port
+ LOG.info("Failed binding http info server to port: " + port);
+ port++;
+ // update HRS server info
+ serverInfo.setInfoPort(port);
+ }
+ }
}
// Set up the safe mode handler if safe mode has been configured.
Modified: hadoop/hbase/trunk/src/test/hbase-site.xml
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/test/hbase-site.xml?rev=769989&r1=769988&r2=769989&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/test/hbase-site.xml (original)
+++ hadoop/hbase/trunk/src/test/hbase-site.xml Wed Apr 29 23:14:57 2009
@@ -82,6 +82,14 @@
</description>
</property>
<property>
+ <name>hbase.regionserver.info.port.auto</name>
+ <value>true</value>
+ <description>Info server auto port bind. Enables automatic port
+ search if hbase.regionserver.info.port is already in use.
+ Enabled for testing to run multiple tests on one machine.
+ </description>
+ </property>
+ <property>
<name>hbase.master.lease.thread.wakefrequency</name>
<value>3000</value>
<description>The interval between checks for expired region server leases.
Modified: hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/MiniHBaseCluster.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/MiniHBaseCluster.java?rev=769989&r1=769988&r2=769989&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/MiniHBaseCluster.java (original)
+++ hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/MiniHBaseCluster.java Wed Apr 29 23:14:57 2009
@@ -20,6 +20,7 @@
package org.apache.hadoop.hbase;
import java.io.IOException;
+import java.net.BindException;
import java.util.List;
import org.apache.commons.logging.Log;
@@ -54,8 +55,20 @@
private void init(final int nRegionNodes) throws IOException {
try {
// start up a LocalHBaseCluster
- hbaseCluster = new LocalHBaseCluster(conf, nRegionNodes);
- hbaseCluster.startup();
+ while (true) {
+ try {
+ hbaseCluster = new LocalHBaseCluster(conf, nRegionNodes);
+ hbaseCluster.startup();
+ } catch (BindException e) {
+ //this port is already in use. try to use another (for multiple testing)
+ int port = conf.getInt("hbase.master.port", DEFAULT_MASTER_PORT);
+ LOG.info("MiniHBaseCluster: Failed binding Master to port: " + port);
+ port++;
+ conf.setInt("hbase.master.port", port);
+ continue;
+ }
+ break;
+ }
} catch(IOException e) {
shutdown();
throw e;
Modified: hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/MiniZooKeeperCluster.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/MiniZooKeeperCluster.java?rev=769989&r1=769988&r2=769989&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/MiniZooKeeperCluster.java (original)
+++ hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/MiniZooKeeperCluster.java Wed Apr 29 23:14:57 2009
@@ -25,6 +25,7 @@
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.Reader;
+import java.net.BindException;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.util.HashMap;
@@ -48,7 +49,6 @@
private static final Log LOG = LogFactory.getLog(MiniZooKeeperCluster.class);
// TODO: make this more configurable?
- private static final int CLIENT_PORT_START = 21810; // use non-standard port
private static final int LEADER_PORT_START = 31810; // use non-standard port
private static final int TICK_TIME = 2000;
private static final int INIT_LIMIT = 3;
@@ -56,6 +56,7 @@
private static final int CONNECTION_TIMEOUT = 30000;
private boolean started;
+ private int clientPortStart = 21810; // use non-standard port
private int numPeers;
private File baseDir;
private String quorumServers;
@@ -119,13 +120,23 @@
recreateDir(dir);
ZooKeeperServer server = new ZooKeeperServer(dir, dir, TICK_TIME);
- standaloneServerFactory = new NIOServerCnxn.Factory(CLIENT_PORT_START);
+ while (true) {
+ try {
+ standaloneServerFactory = new NIOServerCnxn.Factory(clientPortStart);
+ } catch (BindException e) {
+ LOG.info("Faild binding ZK Server to client port: " + clientPortStart);
+ //this port is already in use. try to use another
+ clientPortStart++;
+ continue;
+ }
+ break;
+ }
standaloneServerFactory.startup(server);
- quorumServers = "localhost:" + CLIENT_PORT_START;
+ quorumServers = "localhost:" + clientPortStart;
ZooKeeperWrapper.setQuorumServers(quorumServers);
- if (!waitForServerUp(CLIENT_PORT_START, CONNECTION_TIMEOUT)) {
+ if (!waitForServerUp(clientPortStart, CONNECTION_TIMEOUT)) {
throw new IOException("Waiting for startup of standalone server");
}
}
@@ -149,7 +160,7 @@
File dir = new File(baseDir, "zookeeper-peer-" + id);
recreateDir(dir);
- int port = CLIENT_PORT_START + id;
+ int port = clientPortStart + id;
quorumPeers[id - 1] = new QuorumPeer(peers, dir, dir, port, 0, id,
TICK_TIME, INIT_LIMIT, SYNC_LIMIT);
@@ -169,7 +180,7 @@
// Wait for quorum peers to be up before going on.
for (int id = 1; id <= numPeers; ++id) {
- int port = CLIENT_PORT_START + id;
+ int port = clientPortStart + id;
if (!waitForServerUp(port, CONNECTION_TIMEOUT)) {
throw new IOException("Waiting for startup of peer " + id);
}
@@ -220,7 +231,7 @@
}
for (int id = 1; id <= quorumPeers.length; ++id) {
- int port = CLIENT_PORT_START + id;
+ int port = clientPortStart + id;
if (!waitForServerDown(port, CONNECTION_TIMEOUT)) {
throw new IOException("Waiting for shutdown of peer " + id);
}
@@ -229,7 +240,7 @@
private void shutdownStandalone() throws IOException {
standaloneServerFactory.shutdown();
- if (!waitForServerDown(CLIENT_PORT_START, CONNECTION_TIMEOUT)) {
+ if (!waitForServerDown(clientPortStart, CONNECTION_TIMEOUT)) {
throw new IOException("Waiting for shutdown of standalone server");
}
}