Merge 1176986 and 1177035 from trunk for HADOOP-7668.
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-0.23@1189976 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
11cf00062c
commit
436ee96472
|
@ -413,6 +413,9 @@ Release 0.23.0 - Unreleased
|
|||
|
||||
HADOOP-7762. Common side of MR-2736. (eli)
|
||||
|
||||
HADOOP-7668. Add a NetUtils method that can tell if an InetAddress
|
||||
belongs to local host. (suresh)
|
||||
|
||||
OPTIMIZATIONS
|
||||
|
||||
HADOOP-7333. Performance improvement in PureJavaCrc32. (Eric Caspole
|
||||
|
|
|
@ -560,6 +560,27 @@ public class NetUtils {
|
|||
return addr;
|
||||
}
|
||||
|
||||
/**
|
||||
* Given an InetAddress, checks to see if the address is a local address, by
|
||||
* comparing the address with all the interfaces on the node.
|
||||
* @param addr address to check if it is local node's address
|
||||
* @return true if the address corresponds to the local node
|
||||
*/
|
||||
public static boolean isLocalAddress(InetAddress addr) {
|
||||
// Check if the address is any local or loop back
|
||||
boolean local = addr.isAnyLocalAddress() || addr.isLoopbackAddress();
|
||||
|
||||
// Check if the address is defined on any interface
|
||||
if (!local) {
|
||||
try {
|
||||
local = NetworkInterface.getByInetAddress(addr) != null;
|
||||
} catch (SocketException e) {
|
||||
local = false;
|
||||
}
|
||||
}
|
||||
return local;
|
||||
}
|
||||
|
||||
/**
|
||||
* Take an IOException , the local host port and remote host port details and
|
||||
* return an IOException with the input exception as the cause and also
|
||||
|
|
|
@ -21,15 +21,19 @@ import junit.framework.AssertionFailedError;
|
|||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.BindException;
|
||||
import java.net.InetAddress;
|
||||
import java.net.NetworkInterface;
|
||||
import java.net.Socket;
|
||||
import java.net.ConnectException;
|
||||
import java.net.SocketException;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.UnknownHostException;
|
||||
import java.util.Enumeration;
|
||||
|
||||
import org.apache.hadoop.conf.Configuration;
|
||||
|
||||
|
@ -100,6 +104,34 @@ public class TestNetUtils {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for {@link NetUtils#isLocalAddress(java.net.InetAddress)}
|
||||
*/
|
||||
@Test
|
||||
public void testIsLocalAddress() throws Exception {
|
||||
// Test - local host is local address
|
||||
assertTrue(NetUtils.isLocalAddress(InetAddress.getLocalHost()));
|
||||
|
||||
// Test - all addresses bound network interface is local address
|
||||
Enumeration<NetworkInterface> interfaces = NetworkInterface
|
||||
.getNetworkInterfaces();
|
||||
if (interfaces != null) { // Iterate through all network interfaces
|
||||
while (interfaces.hasMoreElements()) {
|
||||
NetworkInterface i = interfaces.nextElement();
|
||||
Enumeration<InetAddress> addrs = i.getInetAddresses();
|
||||
if (addrs == null) {
|
||||
continue;
|
||||
}
|
||||
// Iterate through all the addresses of a network interface
|
||||
while (addrs.hasMoreElements()) {
|
||||
InetAddress addr = addrs.nextElement();
|
||||
assertTrue(NetUtils.isLocalAddress(addr));
|
||||
}
|
||||
}
|
||||
}
|
||||
assertFalse(NetUtils.isLocalAddress(InetAddress.getByName("8.8.8.8")));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testWrapConnectException() throws Throwable {
|
||||
IOException e = new ConnectException("failed");
|
||||
|
|
Loading…
Reference in New Issue