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;
}
}