From ef9f8ca13d8dca8031c045bad801fceb3e00aa15 Mon Sep 17 00:00:00 2001 From: Wei-Chiu Chuang Date: Thu, 25 Oct 2018 09:33:31 -0700 Subject: [PATCH] HADOOP-15864. Job submitter / executor fail when SBN domain name can not resolved. Contributed by He Xiaoqiao. (cherry picked from commit fb2b72e6fce019130e10964a644b94cddbab1c06) (cherry picked from commit fd02c501c0cea3ec55956e11b390111519cedc00) --- .../apache/hadoop/security/SecurityUtil.java | 9 ++++---- .../ha/TestDelegationTokensWithHA.java | 23 +++++++++++++++++++ 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/SecurityUtil.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/SecurityUtil.java index 5f8cb293535..6aed434bd80 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/SecurityUtil.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/SecurityUtil.java @@ -421,7 +421,7 @@ public final class SecurityUtil { */ public static void setTokenService(Token token, InetSocketAddress addr) { Text service = buildTokenService(addr); - if (token != null) { + if (token != null && service != null) { token.setService(service); if (LOG.isDebugEnabled()) { LOG.debug("Acquired token "+token); // Token#toString() prints service @@ -441,9 +441,10 @@ public final class SecurityUtil { String host = null; if (useIpForTokenService) { if (addr.isUnresolved()) { // host has no ip address - throw new IllegalArgumentException( - new UnknownHostException(addr.getHostName()) - ); + LOG.warn("unable to resolve host name " + addr + + ". Failure to construct a correct token service " + + "name may result in operation failures"); + return null; } host = addr.getAddress().getHostAddress(); } else { diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/ha/TestDelegationTokensWithHA.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/ha/TestDelegationTokensWithHA.java index ca44c798010..087fba1dbe2 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/ha/TestDelegationTokensWithHA.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/ha/TestDelegationTokensWithHA.java @@ -332,6 +332,29 @@ public class TestDelegationTokensWithHA { } } + @Test(timeout = 300000) + public void testHAUtilClonesDTsDomainNameResolvedFail() throws Exception { + final Token token = + getDelegationToken(fs, "JobTracker"); + + UserGroupInformation ugi = UserGroupInformation.createRemoteUser("test"); + + URI haUri = new URI("hdfs://my-ha-uri/"); + token.setService(HAUtilClient.buildTokenServiceForLogicalUri(haUri, + HdfsConstants.HDFS_URI_SCHEME)); + ugi.addToken(token); + + Collection nnAddrs = new HashSet(); + nnAddrs.add(new InetSocketAddress("domainname.doesnot.exist", + nn0.getNameNodeAddress().getPort())); + nnAddrs.add(new InetSocketAddress("localhost", + nn1.getNameNodeAddress().getPort())); + HAUtilClient.cloneDelegationTokenForLogicalUri(ugi, haUri, nnAddrs); + + Collection> tokens = ugi.getTokens(); + assertEquals(3, tokens.size()); + } + /** * HDFS-3062: DistributedFileSystem.getCanonicalServiceName() throws an * exception if the URI is a logical URI. This bug fails the combination of