diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/ViewDistributedFileSystem.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/ViewDistributedFileSystem.java index 1afb5d9dc27..4fee9632906 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/ViewDistributedFileSystem.java +++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/ViewDistributedFileSystem.java @@ -1032,15 +1032,24 @@ protected int getDefaultPort() { return super.getDefaultPort(); } + /** + * If no mount points configured, it works same as + * {@link DistributedFileSystem#getDelegationToken(String)}. If + * there are mount points configured and if default fs(linkFallback) + * configured, then it will return default fs delegation token. Otherwise + * it will return null. + */ @Override public Token getDelegationToken(String renewer) throws IOException { if (this.vfs == null) { return super.getDelegationToken(renewer); } - //Let applications call getDelegationTokenIssuers and get respective - // delegation tokens from child fs. - throw new UnsupportedOperationException(); + + if (defaultDFS != null) { + return defaultDFS.getDelegationToken(renewer); + } + return null; } @Override diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestViewDistributedFileSystem.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestViewDistributedFileSystem.java index 0ba084131bd..da0cb59a193 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestViewDistributedFileSystem.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestViewDistributedFileSystem.java @@ -18,14 +18,17 @@ package org.apache.hadoop.hdfs; import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.fs.CommonConfigurationKeys; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.fs.PathHandle; +import org.apache.hadoop.fs.viewfs.ConfigUtil; import org.apache.hadoop.hdfs.protocol.HdfsConstants; import org.apache.hadoop.test.Whitebox; import org.junit.Test; import java.io.IOException; +import java.net.URI; public class TestViewDistributedFileSystem extends TestDistributedFileSystem{ @Override @@ -67,4 +70,23 @@ public void testOpenWithPathHandle() throws Exception { } } } + + @Override + public void testEmptyDelegationToken() throws IOException { + Configuration conf = getTestConfiguration(); + MiniDFSCluster cluster = null; + try { + cluster = new MiniDFSCluster.Builder(conf).numDataNodes(0).build(); + URI defaultUri = + URI.create(conf.get(CommonConfigurationKeys.FS_DEFAULT_NAME_KEY)); + ConfigUtil.addLinkFallback(conf, defaultUri.getHost(), defaultUri); + try (FileSystem fileSys = FileSystem.get(conf)) { + fileSys.getDelegationToken(""); + } + } finally { + if (cluster != null) { + cluster.shutdown(); + } + } + } }