This is an automated email from the ASF dual-hosted git repository. vinoth pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/hudi.git
The following commit(s) were added to refs/heads/master by this push: new 590506752c1 [HUDI-7366] Fix HoodieLocation with encoded paths (#10602) 590506752c1 is described below commit 590506752c1034183906526c4c414e7500953f1b Author: Y Ethan Guo <ethan.guoyi...@gmail.com> AuthorDate: Mon Feb 5 17:31:35 2024 -0800 [HUDI-7366] Fix HoodieLocation with encoded paths (#10602) --- .../main/java/org/apache/hudi/storage/HoodieLocation.java | 3 ++- .../java/org/apache/hudi/io/storage/TestHoodieLocation.java | 12 ++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/hudi-io/src/main/java/org/apache/hudi/storage/HoodieLocation.java b/hudi-io/src/main/java/org/apache/hudi/storage/HoodieLocation.java index 3b3a05dc9b4..2073548b7d1 100644 --- a/hudi-io/src/main/java/org/apache/hudi/storage/HoodieLocation.java +++ b/hudi-io/src/main/java/org/apache/hudi/storage/HoodieLocation.java @@ -108,7 +108,8 @@ public class HoodieLocation implements Comparable<HoodieLocation>, Serializable parentUri.getAuthority(), parentPathWithSeparator, null, - parentUri.getFragment()).resolve(normalizedChild); + parentUri.getFragment()) + .resolve(new URI(null, null, normalizedChild, null, null)); this.uri = new URI( parentUri.getScheme(), parentUri.getAuthority(), diff --git a/hudi-io/src/test/java/org/apache/hudi/io/storage/TestHoodieLocation.java b/hudi-io/src/test/java/org/apache/hudi/io/storage/TestHoodieLocation.java index 4c765d2cc3f..7c3af8741ba 100644 --- a/hudi-io/src/test/java/org/apache/hudi/io/storage/TestHoodieLocation.java +++ b/hudi-io/src/test/java/org/apache/hudi/io/storage/TestHoodieLocation.java @@ -115,6 +115,18 @@ public class TestHoodieLocation { new HoodieLocation(new HoodieLocation(new URI("foo://bar/baz#bud")), "/fud#boo").toString()); } + @Test + public void testEncoded() { + // encoded character like `%2F` should be kept as is + assertEquals(new HoodieLocation("s3://foo/bar/1%2F2%2F3"), new HoodieLocation("s3://foo/bar", "1%2F2%2F3")); + assertEquals("s3://foo/bar/1%2F2%2F3", new HoodieLocation("s3://foo/bar", "1%2F2%2F3").toString()); + assertEquals(new HoodieLocation("s3://foo/bar/1%2F2%2F3"), + new HoodieLocation(new HoodieLocation("s3://foo/bar"), "1%2F2%2F3")); + assertEquals("s3://foo/bar/1%2F2%2F3", + new HoodieLocation(new HoodieLocation("s3://foo/bar"), "1%2F2%2F3").toString()); + assertEquals("s3://foo/bar/1%2F2%2F3", new HoodieLocation("s3://foo/bar/1%2F2%2F3").toString()); + } + @Test public void testPathToUriConversion() throws URISyntaxException { assertEquals(new URI(null, null, "/foo?bar", null, null),