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),

Reply via email to