You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by da...@apache.org on 2019/10/16 22:06:50 UTC

[hadoop] branch branch-3.2 updated: HADOOP-16640. WASB: Override getCanonicalServiceName() to return URI

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 <da...@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-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org