HADOOP-15753. ABFS: support path "abfs://mycluster/file/path" Contributed by Da Zhou.
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/26211019 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/26211019 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/26211019 Branch: refs/heads/HADOOP-15407 Commit: 26211019c80e6180297dd94abcefe718b70e8cd9 Parents: e5593cb Author: Thomas Marquardt <tm...@microsoft.com> Authored: Fri Sep 14 16:50:26 2018 +0000 Committer: Thomas Marquardt <tm...@microsoft.com> Committed: Mon Sep 17 19:54:01 2018 +0000 ---------------------------------------------------------------------- .../hadoop/fs/azurebfs/AzureBlobFileSystem.java | 23 +++++++++++++++++++ .../ITestAzureBlobFileSystemFileStatus.java | 24 ++++++++++++++++++++ 2 files changed, 47 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/26211019/hadoop-tools/hadoop-azure/src/main/java/org/apache/hadoop/fs/azurebfs/AzureBlobFileSystem.java ---------------------------------------------------------------------- diff --git a/hadoop-tools/hadoop-azure/src/main/java/org/apache/hadoop/fs/azurebfs/AzureBlobFileSystem.java b/hadoop-tools/hadoop-azure/src/main/java/org/apache/hadoop/fs/azurebfs/AzureBlobFileSystem.java index 7cbf4d7..2e8de78 100644 --- a/hadoop-tools/hadoop-azure/src/main/java/org/apache/hadoop/fs/azurebfs/AzureBlobFileSystem.java +++ b/hadoop-tools/hadoop-azure/src/main/java/org/apache/hadoop/fs/azurebfs/AzureBlobFileSystem.java @@ -366,6 +366,29 @@ public class AzureBlobFileSystem extends FileSystem { } } + /** + * Qualify a path to one which uses this FileSystem and, if relative, + * made absolute. + * @param path to qualify. + * @return this path if it contains a scheme and authority and is absolute, or + * a new path that includes a path and authority and is fully qualified + * @see Path#makeQualified(URI, Path) + * @throws IllegalArgumentException if the path has a schema/URI different + * from this FileSystem. + */ + @Override + public Path makeQualified(Path path) { + // To support format: abfs://{dfs.nameservices}/file/path, + // path need to be first converted to URI, then get the raw path string, + // during which {dfs.nameservices} will be omitted. + if (path != null ) { + String uriPath = path.toUri().getPath(); + path = uriPath.isEmpty() ? path : new Path(uriPath); + } + return super.makeQualified(path); + } + + @Override public Path getWorkingDirectory() { return this.workingDir; http://git-wip-us.apache.org/repos/asf/hadoop/blob/26211019/hadoop-tools/hadoop-azure/src/test/java/org/apache/hadoop/fs/azurebfs/ITestAzureBlobFileSystemFileStatus.java ---------------------------------------------------------------------- diff --git a/hadoop-tools/hadoop-azure/src/test/java/org/apache/hadoop/fs/azurebfs/ITestAzureBlobFileSystemFileStatus.java b/hadoop-tools/hadoop-azure/src/test/java/org/apache/hadoop/fs/azurebfs/ITestAzureBlobFileSystemFileStatus.java index b08b920..02f938f 100644 --- a/hadoop-tools/hadoop-azure/src/test/java/org/apache/hadoop/fs/azurebfs/ITestAzureBlobFileSystemFileStatus.java +++ b/hadoop-tools/hadoop-azure/src/test/java/org/apache/hadoop/fs/azurebfs/ITestAzureBlobFileSystemFileStatus.java @@ -98,4 +98,28 @@ public class ITestAzureBlobFileSystemFileStatus extends validateStatus(fs, TEST_FOLDER, true); } + @Test + public void testAbfsPathWithHost() throws IOException { + AzureBlobFileSystem fs = this.getFileSystem(); + Path pathWithHost1 = new Path("abfs://mycluster/abfs/file1.txt"); + Path pathwithouthost1 = new Path("/abfs/file1.txt"); + + Path pathWithHost2 = new Path("abfs://mycluster/abfs/file2.txt"); + Path pathwithouthost2 = new Path("/abfs/file2.txt"); + + // verify compatibility of this path format + fs.create(pathWithHost1); + assertTrue(fs.exists(pathwithouthost1)); + + fs.create(pathwithouthost2); + assertTrue(fs.exists(pathWithHost2)); + + // verify get + FileStatus fileStatus1 = fs.getFileStatus(pathWithHost1); + assertEquals(pathwithouthost1.getName(), fileStatus1.getPath().getName()); + + FileStatus fileStatus2 = fs.getFileStatus(pathwithouthost2); + assertEquals(pathWithHost2.getName(), fileStatus2.getPath().getName()); + } + } --------------------------------------------------------------------- To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-commits-h...@hadoop.apache.org