This is an automated email from the ASF dual-hosted git repository. dazhou pushed a commit to branch branch-3.2 in repository https://gitbox.apache.org/repos/asf/hadoop.git
The following commit(s) were added to refs/heads/branch-3.2 by this push: new fe96407 HADOOP-16640. WASB: Override getCanonicalServiceName() to return URI fe96407 is described below commit fe9640745163aae9b910d18bc33d1fa6c06b968a Author: Da Zhou <daz...@apache.org> AuthorDate: Wed Oct 16 13:14:15 2019 -0700 HADOOP-16640. WASB: Override getCanonicalServiceName() to return URI (cherry picked from commit 9a8edb0aeddd7787b2654f6e2a8465c325e048a2) --- .../hadoop/fs/azure/NativeAzureFileSystem.java | 22 ++++++++++++++++ .../fs/azure/ITestWasbUriAndConfiguration.java | 30 +++++++++++++++++++++- 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/hadoop-tools/hadoop-azure/src/main/java/org/apache/hadoop/fs/azure/NativeAzureFileSystem.java b/hadoop-tools/hadoop-azure/src/main/java/org/apache/hadoop/fs/azure/NativeAzureFileSystem.java index f8962d9..e8e867e 100644 --- a/hadoop-tools/hadoop-azure/src/main/java/org/apache/hadoop/fs/azure/NativeAzureFileSystem.java +++ b/hadoop-tools/hadoop-azure/src/main/java/org/apache/hadoop/fs/azure/NativeAzureFileSystem.java @@ -641,6 +641,20 @@ public class NativeAzureFileSystem extends FileSystem { return "wasb"; } + /** + * If fs.azure.override.canonical.service.name is set as true, return URI of + * the WASB filesystem, otherwise use the default implementation. + * + * @return a service string that uniquely identifies this file system + */ + @Override + public String getCanonicalServiceName() { + if (returnUriAsCanonicalServiceName) { + return getUri().toString(); + } + return super.getCanonicalServiceName(); + } + /** * <p> @@ -724,6 +738,11 @@ public class NativeAzureFileSystem extends FileSystem { */ public static final String APPEND_SUPPORT_ENABLE_PROPERTY_NAME = "fs.azure.enable.append.support"; + /* + * Property to override canonical service name with filesystem's URI. + */ + public static final String RETURN_URI_AS_CANONICAL_SERVICE_NAME_PROPERTY_NAME = "fs.azure.override.canonical.service.name"; + /** * The configuration property to set number of threads to be used for rename operation. */ @@ -1190,6 +1209,7 @@ public class NativeAzureFileSystem extends FileSystem { // A counter to create unique (within-process) names for my metrics sources. private static AtomicInteger metricsSourceNameCounter = new AtomicInteger(); private boolean appendSupportEnabled = false; + private boolean returnUriAsCanonicalServiceName = false; private DelegationTokenAuthenticatedURL authURL; private DelegationTokenAuthenticatedURL.Token authToken = new DelegationTokenAuthenticatedURL.Token(); private String credServiceUrl; @@ -1387,6 +1407,8 @@ public class NativeAzureFileSystem extends FileSystem { if (UserGroupInformation.isSecurityEnabled() && kerberosSupportEnabled) { this.wasbDelegationTokenManager = new RemoteWasbDelegationTokenManager(conf); } + + this.returnUriAsCanonicalServiceName = conf.getBoolean(RETURN_URI_AS_CANONICAL_SERVICE_NAME_PROPERTY_NAME, false); } @Override diff --git a/hadoop-tools/hadoop-azure/src/test/java/org/apache/hadoop/fs/azure/ITestWasbUriAndConfiguration.java b/hadoop-tools/hadoop-azure/src/test/java/org/apache/hadoop/fs/azure/ITestWasbUriAndConfiguration.java index 19d329a..982e92b 100644 --- a/hadoop-tools/hadoop-azure/src/test/java/org/apache/hadoop/fs/azure/ITestWasbUriAndConfiguration.java +++ b/hadoop-tools/hadoop-azure/src/test/java/org/apache/hadoop/fs/azure/ITestWasbUriAndConfiguration.java @@ -19,6 +19,7 @@ package org.apache.hadoop.fs.azure; import static org.apache.hadoop.fs.CommonConfigurationKeysPublic.FS_DEFAULT_NAME_KEY; +import static org.apache.hadoop.fs.azure.NativeAzureFileSystem.RETURN_URI_AS_CANONICAL_SERVICE_NAME_PROPERTY_NAME; import static org.apache.hadoop.test.LambdaTestUtils.intercept; import static org.junit.Assume.assumeFalse; import static org.junit.Assume.assumeNotNull; @@ -44,7 +45,6 @@ import org.apache.hadoop.fs.AbstractFileSystem; import org.apache.hadoop.fs.FileContext; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; -import org.apache.hadoop.fs.UnsupportedFileSystemException; import org.apache.hadoop.fs.azure.AzureBlobStorageTestAccount.CreateOptions; import org.apache.hadoop.test.GenericTestUtils; @@ -640,4 +640,32 @@ public class ITestWasbUriAndConfiguration extends AbstractWasbTestWithTimeout { FileSystem.closeAll(); } } + + @Test + public void testCanonicalServiceName() throws Exception { + AzureBlobStorageTestAccount testAccount = AzureBlobStorageTestAccount.createMock(); + Configuration conf = testAccount.getFileSystem().getConf(); + String authority = testAccount.getFileSystem().getUri().getAuthority(); + URI defaultUri = new URI("wasbs", authority, null, null, null); + conf.set(FS_DEFAULT_NAME_KEY, defaultUri.toString()); + + try { + FileSystem fs0 = FileSystem.get(conf); + // Default getCanonicalServiceName() will try to resolve the host to IP, + // because the mock container does not exist, this call is expected to fail. + intercept(IllegalArgumentException.class, + "java.net.UnknownHostException", + () -> { + fs0.getCanonicalServiceName(); + }); + + conf.setBoolean(RETURN_URI_AS_CANONICAL_SERVICE_NAME_PROPERTY_NAME, true); + FileSystem fs1 = FileSystem.newInstance(defaultUri, conf); + Assert.assertEquals("getCanonicalServiceName() should return URI", + fs1.getUri().toString(), fs1.getCanonicalServiceName()); + } finally { + testAccount.cleanup(); + FileSystem.closeAll(); + } + } } --------------------------------------------------------------------- To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-commits-h...@hadoop.apache.org