This is an automated email from the ASF dual-hosted git repository.

morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 479e62de0f [Fix](multi catalog)Fix hive partition contains special 
character bug (#22541)
479e62de0f is described below

commit 479e62de0f0097fc601464a74e014a39903aa5d5
Author: Jibing-Li <64681310+jibing...@users.noreply.github.com>
AuthorDate: Thu Aug 3 23:53:25 2023 +0800

    [Fix](multi catalog)Fix hive partition contains special character bug 
(#22541)
    
    Hive partition path may contain special characters, need to encode it 
before creating a URI object based on the file path.
---
 .../main/java/org/apache/doris/common/util/S3Util.java   | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/util/S3Util.java 
b/fe/fe-core/src/main/java/org/apache/doris/common/util/S3Util.java
index 623e699fb6..fe59dcee33 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/common/util/S3Util.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/common/util/S3Util.java
@@ -39,8 +39,12 @@ import software.amazon.awssdk.regions.Region;
 import software.amazon.awssdk.services.s3.S3Client;
 import software.amazon.awssdk.services.s3.S3Configuration;
 
+import java.io.UnsupportedEncodingException;
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.net.URLDecoder;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
 import java.time.Duration;
 import java.util.Map;
 
@@ -85,15 +89,21 @@ public class S3Util {
                 return normalizedHdfsPath(location, props);
             }
             return location;
-        } catch (URISyntaxException e) {
+        } catch (URISyntaxException | UnsupportedEncodingException e) {
             throw new RuntimeException(e.getMessage(), e);
         }
     }
 
-    private static String normalizedHdfsPath(String location, Map<String, 
String> props) throws URISyntaxException {
+    private static String normalizedHdfsPath(String location, Map<String, 
String> props)
+            throws URISyntaxException, UnsupportedEncodingException {
+        // Hive partition may contain special characters such as ' ', '<', '>' 
and so on.
+        // Need to encode these characters before creating URI.
+        // But doesn't encode '/' and ':' so that we can get the correct uri 
host.
+        location = URLEncoder.encode(location, 
StandardCharsets.UTF_8.name()).replace("%2F", "/").replace("%3A", ":");
         URI normalizedUri = new URI(location);
         // compatible with 'hdfs:///' or 'hdfs:/'
         if (StringUtils.isEmpty(normalizedUri.getHost())) {
+            location = URLDecoder.decode(location, 
StandardCharsets.UTF_8.name());
             String normalizedPrefix = HdfsResource.HDFS_PREFIX + "//";
             String brokenPrefix = HdfsResource.HDFS_PREFIX + "/";
             if (location.startsWith(brokenPrefix) && 
!location.startsWith(normalizedPrefix)) {
@@ -116,7 +126,7 @@ public class S3Util {
                 }
             }
         }
-        return location;
+        return URLDecoder.decode(location, StandardCharsets.UTF_8.name());
     }
 
     /**


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to