From ca6fb53a9b2f88d143eae3fe9e20b4722bb574c1 Mon Sep 17 00:00:00 2001 From: ulysses-you Date: Wed, 3 Feb 2021 19:31:26 +0800 Subject: [PATCH] [KYUUBI #345] Catch Throwable instead of Exception MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ![ulysses-you](https://badgen.net/badge/Hello/ulysses-you/green) [![Closes #345](https://badgen.net/badge/Preview/Closes%20%23345/blue)](https://github.com/yaooqinn/kyuubi/pull/345) ![3](https://badgen.net/badge/%2B/3/red) ![1](https://badgen.net/badge/-/1/green) ![1](https://badgen.net/badge/commits/1/yellow) ![Target Issue](https://badgen.net/badge/Missing/Target%20Issue/ff0000) ![Test Plan](https://badgen.net/badge/Missing/Test%20Plan/ff0000) ![Bug](https://badgen.net/badge/Label/Bug/) [❨?❩](https://pullrequestbadge.com/?utm_medium=github&utm_source=yaooqinn&utm_campaign=badge_info) ### _Why are the changes needed?_ We might get this error when running spark sql,so it's more reasonable to catch `Throwable`. ``` java.lang.NoClassDefFoundError: org/apache/hadoop/hive/serde2/SerDe at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:763) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) at java.net.URLClassLoader.access$100(URLClassLoader.java:73) at java.net.URLClassLoader$1.run(URLClassLoader.java:368) at java.net.URLClassLoader$1.run(URLClassLoader.java:362) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:361) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader.java:411) ``` ### _How was this patch tested?_ - [ ] Add some test cases that check the changes thoroughly including negative and positive cases if possible - [ ] Add screenshots for manual tests if appropriate - [ ] [Run test](https://kyuubi.readthedocs.io/en/latest/tools/testing.html#running-tests) locally before make a pull request Closes #345 from ulysses-you/throwable. b6ffacd [ulysses-you] throw Authored-by: ulysses-you Signed-off-by: Kent Yao (cherry picked from commit fbf1e3506c4fda097dd8fcc7c055b0b106711ca1) Signed-off-by: Kent Yao --- .../apache/kyuubi/engine/spark/operation/SparkOperation.scala | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/externals/kyuubi-spark-sql-engine/src/main/scala/org/apache/kyuubi/engine/spark/operation/SparkOperation.scala b/externals/kyuubi-spark-sql-engine/src/main/scala/org/apache/kyuubi/engine/spark/operation/SparkOperation.scala index 22612731805..3c6f80e0a70 100644 --- a/externals/kyuubi-spark-sql-engine/src/main/scala/org/apache/kyuubi/engine/spark/operation/SparkOperation.scala +++ b/externals/kyuubi-spark-sql-engine/src/main/scala/org/apache/kyuubi/engine/spark/operation/SparkOperation.scala @@ -85,7 +85,9 @@ abstract class SparkOperation(spark: SparkSession, opType: OperationType, sessio } protected def onError(cancel: Boolean = false): PartialFunction[Throwable, Unit] = { - case e: Exception => + // We should use Throwable instead of Exception since `java.lang.NoClassDefFoundError` + // could be thrown. + case e: Throwable => if (cancel) spark.sparkContext.cancelJobGroup(statementId) state.synchronized { val errMsg = KyuubiSQLException.stringifyException(e)