Repository: hive Updated Branches: refs/heads/master b8d82844b -> a77e0468f
HIVE-20466: Improve org.apache.hadoop.hive.ql.exec.FunctionTask Experience (denys kuzmenko, reviewed by Peter Vary and Adam Szita) Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/a77e0468 Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/a77e0468 Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/a77e0468 Branch: refs/heads/master Commit: a77e0468f9a1be37939a5c2cc5ed8030ea1058e0 Parents: b8d8284 Author: denys kuzmenko <[email protected]> Authored: Thu Aug 30 11:06:48 2018 +0200 Committer: Adam Szita <[email protected]> Committed: Thu Aug 30 11:21:02 2018 +0200 ---------------------------------------------------------------------- .../apache/hadoop/hive/ql/exec/FunctionRegistry.java | 2 +- .../java/org/apache/hadoop/hive/ql/exec/Registry.java | 12 +++++++++--- .../create_function_nonexistent_class.q.out | 4 ++-- 3 files changed, 12 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/a77e0468/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java index 4459184..8bf0a9c 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java @@ -1678,7 +1678,7 @@ public final class FunctionRegistry { } public static FunctionInfo registerPermanentFunction(String functionName, - String className, boolean registerToSession, FunctionResource[] resources) { + String className, boolean registerToSession, FunctionResource[] resources) throws SemanticException { return system.registerPermanentFunction(functionName, className, registerToSession, resources); } http://git-wip-us.apache.org/repos/asf/hive/blob/a77e0468/ql/src/java/org/apache/hadoop/hive/ql/exec/Registry.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/Registry.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/Registry.java index 6f8a8f5..7c0efc4 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/Registry.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/Registry.java @@ -269,7 +269,7 @@ public class Registry { } public FunctionInfo registerPermanentFunction(String functionName, - String className, boolean registerToSession, FunctionResource... resources) { + String className, boolean registerToSession, FunctionResource... resources) throws SemanticException { FunctionInfo function = new FunctionInfo(functionName, className, resources); // register to session first for backward compatibility if (registerToSession) { @@ -652,7 +652,7 @@ public class Registry { } // should be called after session registry is checked - private FunctionInfo registerToSessionRegistry(String qualifiedName, FunctionInfo function) { + private FunctionInfo registerToSessionRegistry(String qualifiedName, FunctionInfo function) throws SemanticException { FunctionInfo ret = null; ClassLoader prev = Utilities.getSessionSpecifiedClassLoader(); try { @@ -682,8 +682,14 @@ public class Registry { // Lookup of UDf class failed LOG.error("Unable to load UDF class: " + e); Utilities.restoreSessionSpecifiedClassLoader(prev); + + throw new SemanticException("Unable to load UDF class: " + e + + "\nPlease ensure that the JAR file containing this class has been properly installed " + + "in the auxiliary directory or was added with ADD JAR command."); + }finally { + function.shareStateWith(ret); } - function.shareStateWith(ret); + return ret; } http://git-wip-us.apache.org/repos/asf/hive/blob/a77e0468/ql/src/test/results/clientnegative/create_function_nonexistent_class.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientnegative/create_function_nonexistent_class.q.out b/ql/src/test/results/clientnegative/create_function_nonexistent_class.q.out index 77467f6..55e66f8 100644 --- a/ql/src/test/results/clientnegative/create_function_nonexistent_class.q.out +++ b/ql/src/test/results/clientnegative/create_function_nonexistent_class.q.out @@ -2,5 +2,5 @@ PREHOOK: query: create function default.badfunc as 'my.nonexistent.class' PREHOOK: type: CREATEFUNCTION PREHOOK: Output: database:default PREHOOK: Output: default.badfunc -Failed to register default.badfunc using class my.nonexistent.class -FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.FunctionTask +FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.FunctionTask. Unable to load UDF class: java.lang.ClassNotFoundException: my.nonexistent.class +Please ensure that the JAR file containing this class has been properly installed in the auxiliary directory or was added with ADD JAR command.
