Repository: incubator-impala Updated Branches: refs/heads/master 64ffbc4b5 -> 0c874189e
IMPALA-3949: Log the error message in FileSystemUtil.copyToLocal() To improve supportability, this commit logs the actual error stack trace that can cause FileSystemUtil.copyToLocal() to fail. Additionaly this also cleans up FileSystemUtil.isPathReachable() method to throw an exception on failures rather than returning false and then returning the error message as a string to callers. Change-Id: I5664a75aa837951de1d5dcc90e43bd8f313736b8 Reviewed-on: http://gerrit.cloudera.org:8080/4125 Reviewed-by: Bharath Vissapragada <[email protected]> Tested-by: Internal Jenkins Project: http://git-wip-us.apache.org/repos/asf/incubator-impala/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-impala/commit/6c446b35 Tree: http://git-wip-us.apache.org/repos/asf/incubator-impala/tree/6c446b35 Diff: http://git-wip-us.apache.org/repos/asf/incubator-impala/diff/6c446b35 Branch: refs/heads/master Commit: 6c446b35b951ba27b4a458c23f408379495f85ff Parents: 64ffbc4 Author: Bharath Vissapragada <[email protected]> Authored: Thu Aug 25 12:45:31 2016 -0700 Committer: Internal Jenkins <[email protected]> Committed: Tue Sep 13 21:36:28 2016 +0000 ---------------------------------------------------------------------- .../com/cloudera/impala/analysis/HdfsUri.java | 9 +++++- .../impala/catalog/CatalogServiceCatalog.java | 6 ++-- .../cloudera/impala/common/FileSystemUtil.java | 32 +++----------------- .../cloudera/impala/util/AvroSchemaUtils.java | 5 ++- 4 files changed, 19 insertions(+), 33 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/6c446b35/fe/src/main/java/com/cloudera/impala/analysis/HdfsUri.java ---------------------------------------------------------------------- diff --git a/fe/src/main/java/com/cloudera/impala/analysis/HdfsUri.java b/fe/src/main/java/com/cloudera/impala/analysis/HdfsUri.java index 77c0369..9fbe467 100644 --- a/fe/src/main/java/com/cloudera/impala/analysis/HdfsUri.java +++ b/fe/src/main/java/com/cloudera/impala/analysis/HdfsUri.java @@ -88,8 +88,15 @@ public class HdfsUri { Path parentPath = uriPath_.getParent(); try { FileSystem fs = uriPath_.getFileSystem(FileSystemUtil.getConfiguration()); + boolean pathExists = false; StringBuilder errorMsg = new StringBuilder(); - if (!FileSystemUtil.isPathReachable(parentPath, fs, errorMsg)) { + try { + pathExists = fs.exists(parentPath); + if (!pathExists) errorMsg.append("Path does not exist."); + } catch (Exception e) { + errorMsg.append(e.getMessage()); + } + if (!pathExists) { analyzer.addWarning(String.format("Path '%s' cannot be reached: %s", parentPath, errorMsg.toString())); } else if (perm != FsAction.NONE) { http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/6c446b35/fe/src/main/java/com/cloudera/impala/catalog/CatalogServiceCatalog.java ---------------------------------------------------------------------- diff --git a/fe/src/main/java/com/cloudera/impala/catalog/CatalogServiceCatalog.java b/fe/src/main/java/com/cloudera/impala/catalog/CatalogServiceCatalog.java index f43938b..27d25e1 100644 --- a/fe/src/main/java/com/cloudera/impala/catalog/CatalogServiceCatalog.java +++ b/fe/src/main/java/com/cloudera/impala/catalog/CatalogServiceCatalog.java @@ -458,11 +458,13 @@ public class CatalogServiceCatalog extends Catalog { try { Path localJarPath = new Path(LOCAL_LIBRARY_PATH, UUID.randomUUID().toString() + ".jar"); - if (!FileSystemUtil.copyToLocal(new Path(jarUri), localJarPath)) { + try { + FileSystemUtil.copyToLocal(new Path(jarUri), localJarPath); + } catch (IOException e) { String errorMsg = "Error loading Java function: " + db + "." + function.getFunctionName() + ". Couldn't copy " + jarUri + " to local path: " + localJarPath.toString(); - LOG.error(errorMsg); + LOG.error(errorMsg, e); throw new ImpalaRuntimeException(errorMsg); } URL[] classLoaderUrls = new URL[] {new URL(localJarPath.toString())}; http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/6c446b35/fe/src/main/java/com/cloudera/impala/common/FileSystemUtil.java ---------------------------------------------------------------------- diff --git a/fe/src/main/java/com/cloudera/impala/common/FileSystemUtil.java b/fe/src/main/java/com/cloudera/impala/common/FileSystemUtil.java index b0771e0..2239853 100644 --- a/fe/src/main/java/com/cloudera/impala/common/FileSystemUtil.java +++ b/fe/src/main/java/com/cloudera/impala/common/FileSystemUtil.java @@ -371,34 +371,12 @@ public class FileSystemUtil { } /** - * Copies the source file to a destination path on the local filesystem and returns true - * if successful. + * Copies the source file to a destination path on the local filesystem. + * Throws IOException on failure. */ - public static boolean copyToLocal(Path source, Path dest) { - try { - FileSystem fs = source.getFileSystem(CONF); - fs.copyToLocalFile(source, dest); - } catch (IOException e) { - return false; - } - return true; - } - - /** - * Return true if the path can be reached, false for all other cases - * File doesn't exist, cannot access the FileSystem, etc. - */ - public static boolean isPathReachable(Path path, FileSystem fs, StringBuilder error_msg) { - try { - if (fs.exists(path)) { - return true; - } else { - error_msg.append("Path does not exist."); - } - } catch (Exception e) { - error_msg.append(e.getMessage()); - } - return false; + public static void copyToLocal(Path source, Path dest) throws IOException { + FileSystem fs = source.getFileSystem(CONF); + fs.copyToLocalFile(source, dest); } /** http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/6c446b35/fe/src/main/java/com/cloudera/impala/util/AvroSchemaUtils.java ---------------------------------------------------------------------- diff --git a/fe/src/main/java/com/cloudera/impala/util/AvroSchemaUtils.java b/fe/src/main/java/com/cloudera/impala/util/AvroSchemaUtils.java index b1e7910..f86c347 100644 --- a/fe/src/main/java/com/cloudera/impala/util/AvroSchemaUtils.java +++ b/fe/src/main/java/com/cloudera/impala/util/AvroSchemaUtils.java @@ -83,10 +83,9 @@ public class AvroSchemaUtils { Path path = new Path(url); FileSystem fs = null; fs = path.getFileSystem(FileSystemUtil.getConfiguration()); - StringBuilder errorMsg = new StringBuilder(); - if (!FileSystemUtil.isPathReachable(path, fs, errorMsg)) { + if (!fs.exists(path)) { throw new AnalysisException(String.format( - "Invalid avro.schema.url: %s. %s", url, errorMsg)); + "Invalid avro.schema.url: %s. Path does not exist.", url)); } schema = FileSystemUtil.readFile(path); }
