HADOOP-15250. Split-DNS MultiHomed Server Network Cluster Network IPC Client Bind Addr Wrong Contributed by Ajay Kumar
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/8f42dafc Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/8f42dafc Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/8f42dafc Branch: refs/heads/HDDS-4 Commit: 8f42dafcf82d5b426dd931dc5ddd177dd6f283f7 Parents: 68c6ec7 Author: Steve Loughran <ste...@apache.org> Authored: Tue May 1 22:32:40 2018 +0100 Committer: Steve Loughran <ste...@apache.org> Committed: Tue May 1 22:32:40 2018 +0100 ---------------------------------------------------------------------- .../apache/hadoop/fs/CommonConfigurationKeys.java | 4 ++++ .../src/main/java/org/apache/hadoop/ipc/Client.java | 16 ++++++++++++---- .../main/java/org/apache/hadoop/net/NetUtils.java | 16 ++++++++++++++++ .../src/main/resources/core-default.xml | 8 ++++++++ .../java/org/apache/hadoop/net/TestNetUtils.java | 8 ++++++++ 5 files changed, 48 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/8f42dafc/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/CommonConfigurationKeys.java ---------------------------------------------------------------------- diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/CommonConfigurationKeys.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/CommonConfigurationKeys.java index 043e52a..1eb27f8 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/CommonConfigurationKeys.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/CommonConfigurationKeys.java @@ -341,6 +341,10 @@ public class CommonConfigurationKeys extends CommonConfigurationKeysPublic { public static final String IPC_CLIENT_FALLBACK_TO_SIMPLE_AUTH_ALLOWED_KEY = "ipc.client.fallback-to-simple-auth-allowed"; public static final boolean IPC_CLIENT_FALLBACK_TO_SIMPLE_AUTH_ALLOWED_DEFAULT = false; + public static final String IPC_CLIENT_BIND_WILDCARD_ADDR_KEY = "ipc.client" + + ".bind.wildcard.addr"; + public static final boolean IPC_CLIENT_BIND_WILDCARD_ADDR_DEFAULT = false; + public static final String IPC_CLIENT_CONNECT_MAX_RETRIES_ON_SASL_KEY = "ipc.client.connect.max.retries.on.sasl"; public static final int IPC_CLIENT_CONNECT_MAX_RETRIES_ON_SASL_DEFAULT = 5; http://git-wip-us.apache.org/repos/asf/hadoop/blob/8f42dafc/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/Client.java ---------------------------------------------------------------------- diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/Client.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/Client.java index a0417d6..163e80d 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/Client.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/Client.java @@ -135,6 +135,7 @@ public class Client implements AutoCloseable { private final int connectionTimeout; private final boolean fallbackAllowed; + private final boolean bindToWildCardAddress; private final byte[] clientId; private final int maxAsyncCalls; private final AtomicInteger asyncCallCounter = new AtomicInteger(0); @@ -674,10 +675,10 @@ public class Client implements AutoCloseable { InetAddress localAddr = NetUtils.getLocalInetAddress(host); if (localAddr != null) { this.socket.setReuseAddress(true); - if (LOG.isDebugEnabled()) { - LOG.debug("Binding " + principal + " to " + localAddr); - } - bindAddr = new InetSocketAddress(localAddr, 0); + localAddr = NetUtils.bindToLocalAddress(localAddr, + bindToWildCardAddress); + LOG.debug("Binding {} to {}", principal, localAddr); + this.socket.bind(new InetSocketAddress(localAddr, 0)); } } } @@ -1277,6 +1278,13 @@ public class Client implements AutoCloseable { CommonConfigurationKeys.IPC_CLIENT_CONNECT_TIMEOUT_DEFAULT); this.fallbackAllowed = conf.getBoolean(CommonConfigurationKeys.IPC_CLIENT_FALLBACK_TO_SIMPLE_AUTH_ALLOWED_KEY, CommonConfigurationKeys.IPC_CLIENT_FALLBACK_TO_SIMPLE_AUTH_ALLOWED_DEFAULT); + this.bindToWildCardAddress = conf + .getBoolean(CommonConfigurationKeys.IPC_CLIENT_BIND_WILDCARD_ADDR_KEY, + CommonConfigurationKeys.IPC_CLIENT_BIND_WILDCARD_ADDR_DEFAULT); + LOG.debug("{} set to true. Will bind client sockets to wildcard " + + "address.", + CommonConfigurationKeys.IPC_CLIENT_BIND_WILDCARD_ADDR_KEY); + this.clientId = ClientId.getClientId(); this.sendParamsExecutor = clientExcecutorFactory.refAndGetInstance(); this.maxAsyncCalls = conf.getInt( http://git-wip-us.apache.org/repos/asf/hadoop/blob/8f42dafc/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/NetUtils.java ---------------------------------------------------------------------- diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/NetUtils.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/NetUtils.java index e16c2a3..0f9cfc3 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/NetUtils.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/NetUtils.java @@ -952,4 +952,20 @@ public class NetUtils { } return port; } + + /** + * Return an @{@link InetAddress} to bind to. If bindWildCardAddress is true + * than returns null. + * + * @param localAddr + * @param bindWildCardAddress + * @returns InetAddress + */ + public static InetAddress bindToLocalAddress(InetAddress localAddr, boolean + bindWildCardAddress) { + if (!bindWildCardAddress) { + return localAddr; + } + return null; + } } http://git-wip-us.apache.org/repos/asf/hadoop/blob/8f42dafc/hadoop-common-project/hadoop-common/src/main/resources/core-default.xml ---------------------------------------------------------------------- diff --git a/hadoop-common-project/hadoop-common/src/main/resources/core-default.xml b/hadoop-common-project/hadoop-common/src/main/resources/core-default.xml index fd72618..3a00131 100644 --- a/hadoop-common-project/hadoop-common/src/main/resources/core-default.xml +++ b/hadoop-common-project/hadoop-common/src/main/resources/core-default.xml @@ -3051,4 +3051,12 @@ System tags to group related properties together. </description> </property> + + <property> + <name>ipc.client.bind.wildcard.addr</name> + <value>false</value> + <description>When set to true Clients will bind socket to wildcard + address. (i.e 0.0.0.0) + </description> + </property> </configuration> http://git-wip-us.apache.org/repos/asf/hadoop/blob/8f42dafc/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/net/TestNetUtils.java ---------------------------------------------------------------------- diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/net/TestNetUtils.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/net/TestNetUtils.java index b463c95..30176f2 100644 --- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/net/TestNetUtils.java +++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/net/TestNetUtils.java @@ -707,6 +707,14 @@ public class TestNetUtils { assertEquals(defaultAddr.trim(), NetUtils.getHostPortString(addr)); } + @Test + public void testBindToLocalAddress() throws Exception { + assertNotNull(NetUtils + .bindToLocalAddress(NetUtils.getLocalInetAddress("127.0.0.1"), false)); + assertNull(NetUtils + .bindToLocalAddress(NetUtils.getLocalInetAddress("127.0.0.1"), true)); + } + private <T> void assertBetterArrayEquals(T[] expect, T[]got) { String expectStr = StringUtils.join(expect, ", "); String gotStr = StringUtils.join(got, ", "); --------------------------------------------------------------------- To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-commits-h...@hadoop.apache.org