From 7bba4c609c786482dfe814cbfe746488b34998b4 Mon Sep 17 00:00:00 2001 From: Uma Maheswara Rao G Date: Fri, 18 Sep 2020 02:48:10 -0700 Subject: [PATCH] HDFS-15585: ViewDFS#getDelegationToken should not throw UnsupportedOperationException. (#2312). Contributed by Uma Maheswara Rao G. --- .../hdfs/ViewDistributedFileSystem.java | 15 ++++++++++--- .../hdfs/TestViewDistributedFileSystem.java | 22 +++++++++++++++++++ 2 files changed, 34 insertions(+), 3 deletions(-) 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(); + } + } + } }