HADOOP-9093. Merge 1433220 to branch-2

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1433222 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Suresh Srinivas 2013-01-14 23:52:57 +00:00
parent eae2575378
commit 68cf069f20
3 changed files with 38 additions and 5 deletions

View File

@ -230,6 +230,9 @@ Release 2.0.3-alpha - Unreleased
HADOOP-9183. Potential deadlock in ActiveStandbyElector. (tomwhite) HADOOP-9183. Potential deadlock in ActiveStandbyElector. (tomwhite)
HADOOP-9203. RPCCallBenchmark should find a random available port.
(Andrew Purtell via suresh)
Release 2.0.2-alpha - 2012-09-07 Release 2.0.2-alpha - 2012-09-07
INCOMPATIBLE CHANGES INCOMPATIBLE CHANGES

View File

@ -25,6 +25,7 @@
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
import java.net.NetworkInterface; import java.net.NetworkInterface;
import java.net.NoRouteToHostException; import java.net.NoRouteToHostException;
import java.net.ServerSocket;
import java.net.Socket; import java.net.Socket;
import java.net.SocketAddress; import java.net.SocketAddress;
import java.net.SocketException; import java.net.SocketException;
@ -865,4 +866,23 @@ public static List<InetAddress> getIPs(String subnet,
} }
return addrs; return addrs;
} }
/**
* Return a free port number. There is no guarantee it will remain free, so
* it should be used immediately.
*
* @returns A free port for binding a local socket
*/
public static int getFreeSocketPort() {
int port = 0;
try {
ServerSocket s = new ServerSocket(0);
port = s.getLocalPort();
s.close();
return port;
} catch (IOException e) {
// Could not get a free port. Return default port 0.
}
return port;
}
} }

View File

@ -67,7 +67,7 @@ private static class MyOptions {
private int serverReaderThreads = 1; private int serverReaderThreads = 1;
private int clientThreads = 0; private int clientThreads = 0;
private String host = "0.0.0.0"; private String host = "0.0.0.0";
private int port = 12345; private int port = 0;
public int secondsToRun = 15; public int secondsToRun = 15;
private int msgSize = 1024; private int msgSize = 1024;
public Class<? extends RpcEngine> rpcEngine = public Class<? extends RpcEngine> rpcEngine =
@ -201,11 +201,21 @@ private void processOptions(CommandLine line, Options opts)
} }
} }
public int getPort() {
if (port == 0) {
port = NetUtils.getFreeSocketPort();
if (port == 0) {
throw new RuntimeException("Could not find a free port");
}
}
return port;
}
@Override @Override
public String toString() { public String toString() {
return "rpcEngine=" + rpcEngine + "\nserverThreads=" + serverThreads return "rpcEngine=" + rpcEngine + "\nserverThreads=" + serverThreads
+ "\nserverReaderThreads=" + serverReaderThreads + "\nclientThreads=" + "\nserverReaderThreads=" + serverReaderThreads + "\nclientThreads="
+ clientThreads + "\nhost=" + host + "\nport=" + port + clientThreads + "\nhost=" + host + "\nport=" + getPort()
+ "\nsecondsToRun=" + secondsToRun + "\nmsgSize=" + msgSize; + "\nsecondsToRun=" + secondsToRun + "\nmsgSize=" + msgSize;
} }
} }
@ -228,12 +238,12 @@ private Server startServer(MyOptions opts) throws IOException {
.newReflectiveBlockingService(serverImpl); .newReflectiveBlockingService(serverImpl);
server = new RPC.Builder(conf).setProtocol(TestRpcService.class) server = new RPC.Builder(conf).setProtocol(TestRpcService.class)
.setInstance(service).setBindAddress(opts.host).setPort(opts.port) .setInstance(service).setBindAddress(opts.host).setPort(opts.getPort())
.setNumHandlers(opts.serverThreads).setVerbose(false).build(); .setNumHandlers(opts.serverThreads).setVerbose(false).build();
} else if (opts.rpcEngine == WritableRpcEngine.class) { } else if (opts.rpcEngine == WritableRpcEngine.class) {
server = new RPC.Builder(conf).setProtocol(TestProtocol.class) server = new RPC.Builder(conf).setProtocol(TestProtocol.class)
.setInstance(new TestRPC.TestImpl()).setBindAddress(opts.host) .setInstance(new TestRPC.TestImpl()).setBindAddress(opts.host)
.setPort(opts.port).setNumHandlers(opts.serverThreads) .setPort(opts.getPort()).setNumHandlers(opts.serverThreads)
.setVerbose(false).build(); .setVerbose(false).build();
} else { } else {
throw new RuntimeException("Bad engine: " + opts.rpcEngine); throw new RuntimeException("Bad engine: " + opts.rpcEngine);
@ -378,7 +388,7 @@ private interface RpcServiceWrapper {
* Create a client proxy for the specified engine. * Create a client proxy for the specified engine.
*/ */
private RpcServiceWrapper createRpcClient(MyOptions opts) throws IOException { private RpcServiceWrapper createRpcClient(MyOptions opts) throws IOException {
InetSocketAddress addr = NetUtils.createSocketAddr(opts.host, opts.port); InetSocketAddress addr = NetUtils.createSocketAddr(opts.host, opts.getPort());
if (opts.rpcEngine == ProtobufRpcEngine.class) { if (opts.rpcEngine == ProtobufRpcEngine.class) {
final TestRpcService proxy = RPC.getProxy(TestRpcService.class, 0, addr, conf); final TestRpcService proxy = RPC.getProxy(TestRpcService.class, 0, addr, conf);