diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt index ea67ea123c..b065f98e73 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt @@ -338,6 +338,9 @@ Trunk (Unreleased) HDFS-8412. Fix the test failures in HTTPFS. (umamahesh) + HDFS-8627. NPE thrown if unable to fetch token from Namenode + (J.Andreina via vinayakumarb) + Release 2.8.0 - UNRELEASED NEW FEATURES diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/DelegationTokenFetcher.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/DelegationTokenFetcher.java index 6376243727..803402dc94 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/DelegationTokenFetcher.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/DelegationTokenFetcher.java @@ -176,14 +176,17 @@ static void saveDelegationToken(Configuration conf, FileSystem fs, final String renewer, final Path tokenFile) throws IOException { Token token = fs.getDelegationToken(renewer); + if (null != token) { + Credentials cred = new Credentials(); + cred.addToken(token.getKind(), token); + cred.writeTokenStorageFile(tokenFile, conf); - Credentials cred = new Credentials(); - cred.addToken(token.getKind(), token); - cred.writeTokenStorageFile(tokenFile, conf); - - if (LOG.isDebugEnabled()) { - LOG.debug("Fetched token " + fs.getUri() + " for " + token.getService() - + " into " + tokenFile); + if (LOG.isDebugEnabled()) { + LOG.debug("Fetched token " + fs.getUri() + " for " + + token.getService() + " into " + tokenFile); + } + } else { + System.err.println("ERROR: Failed to fetch token from " + fs.getUri()); } } diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/tools/TestDelegationTokenFetcher.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/tools/TestDelegationTokenFetcher.java index b4cf1c0296..ab3933bb68 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/tools/TestDelegationTokenFetcher.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/tools/TestDelegationTokenFetcher.java @@ -90,4 +90,19 @@ public void expectedTokenIsRetrievedFromHttp() throws Exception { DelegationTokenFetcher.cancelTokens(conf, p); Assert.assertEquals(testToken, FakeRenewer.getLastCanceled()); } + + /** + * If token returned is null, saveDelegationToken should not + * throw nullPointerException + */ + @Test + public void testReturnedTokenIsNull() throws Exception { + WebHdfsFileSystem fs = mock(WebHdfsFileSystem.class); + doReturn(null).when(fs).getDelegationToken(anyString()); + Path p = new Path(f.getRoot().getAbsolutePath(), tokenFile); + DelegationTokenFetcher.saveDelegationToken(conf, fs, null, p); + // When Token returned is null, TokenFile should not exist + Assert.assertFalse(p.getFileSystem(conf).exists(p)); + + } }