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

czweng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-paimon.git


The following commit(s) were added to refs/heads/master by this push:
     new 05524657d [common] Make it more accurate to locate exception when 
loading FileIoLoader. (#1327)
05524657d is described below

commit 05524657d1662ca63ee0a743642d578524f61e02
Author: LsomeYeah <[email protected]>
AuthorDate: Fri Jun 9 16:41:58 2023 +0800

    [common] Make it more accurate to locate exception when loading 
FileIoLoader. (#1327)
    
    This closes #1327.
---
 .../src/main/java/org/apache/paimon/fs/FileIO.java | 33 +++++++++++++++++-----
 .../java/org/apache/paimon/fs/FileIOUtils.java     | 21 ++++++--------
 2 files changed, 35 insertions(+), 19 deletions(-)

diff --git a/paimon-common/src/main/java/org/apache/paimon/fs/FileIO.java 
b/paimon-common/src/main/java/org/apache/paimon/fs/FileIO.java
index 04990ab63..699742838 100644
--- a/paimon-common/src/main/java/org/apache/paimon/fs/FileIO.java
+++ b/paimon-common/src/main/java/org/apache/paimon/fs/FileIO.java
@@ -34,8 +34,10 @@ import java.io.OutputStreamWriter;
 import java.io.Serializable;
 import java.net.URI;
 import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
 import java.util.ServiceLoader;
 import java.util.UUID;
@@ -250,13 +252,24 @@ public interface FileIO extends Serializable {
 
         // load fallbackIO
         FileIOLoader fallbackIO = config.fallbackIO();
+
+        List<IOException> ioExceptionList = new ArrayList<>();
+
         if (loader == null) {
-            loader = checkAccess(fallbackIO, path, config);
+            try {
+                loader = checkAccess(fallbackIO, path, config);
+            } catch (IOException ioException) {
+                ioExceptionList.add(ioException);
+            }
         }
 
         // load hadoopIO
         if (loader == null) {
-            loader = checkAccess(new HadoopFileIOLoader(), path, config);
+            try {
+                loader = checkAccess(new HadoopFileIOLoader(), path, config);
+            } catch (IOException ioException) {
+                ioExceptionList.add(ioException);
+            }
         }
 
         if (loader == null) {
@@ -267,11 +280,17 @@ public interface FileIO extends Serializable {
                                 + fallbackIO.getClass().getSimpleName()
                                 + " also cannot access this path.";
             }
-            throw new UnsupportedSchemeException(
-                    String.format(
-                            "Could not find a file io implementation for 
scheme '%s' in the classpath."
-                                    + "%s Hadoop FileSystem also cannot access 
this path '%s'.",
-                            uri.getScheme(), fallbackMsg, path));
+            UnsupportedSchemeException ex =
+                    new UnsupportedSchemeException(
+                            String.format(
+                                    "Could not find a file io implementation 
for scheme '%s' in the classpath."
+                                            + "%s Hadoop FileSystem also 
cannot access this path '%s'.",
+                                    uri.getScheme(), fallbackMsg, path));
+            for (IOException ioException : ioExceptionList) {
+                ex.addSuppressed(ioException);
+            }
+
+            throw ex;
         }
 
         FileIO fileIO = loader.load(path);
diff --git a/paimon-common/src/main/java/org/apache/paimon/fs/FileIOUtils.java 
b/paimon-common/src/main/java/org/apache/paimon/fs/FileIOUtils.java
index 94e595142..f7637c822 100644
--- a/paimon-common/src/main/java/org/apache/paimon/fs/FileIOUtils.java
+++ b/paimon-common/src/main/java/org/apache/paimon/fs/FileIOUtils.java
@@ -25,19 +25,16 @@ import java.io.IOException;
 /** Utils for {@link FileIO}. */
 public class FileIOUtils {
 
-    public static FileIOLoader checkAccess(FileIOLoader fileIO, Path path, 
CatalogContext config) {
-        try {
-            if (fileIO == null) {
-                return null;
-            }
-
-            // check access
-            FileIO io = fileIO.load(path);
-            io.configure(config);
-            io.exists(path);
-            return fileIO;
-        } catch (IOException ignore) {
+    public static FileIOLoader checkAccess(FileIOLoader fileIO, Path path, 
CatalogContext config)
+            throws IOException {
+        if (fileIO == null) {
             return null;
         }
+
+        // check access
+        FileIO io = fileIO.load(path);
+        io.configure(config);
+        io.exists(path);
+        return fileIO;
     }
 }

Reply via email to