This is an automated email from the ASF dual-hosted git repository.
yangjie01 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/spark.git
The following commit(s) were added to refs/heads/master by this push:
new 16295a33822 [SPARK-44297][CORE][TESTS] Make
`ClassLoaderIsolationSuite` test pass with Scala 2.13
16295a33822 is described below
commit 16295a338220cc66fea5d91bcbd4213df0f2d4bd
Author: yangjie01 <[email protected]>
AuthorDate: Tue Jul 4 22:37:04 2023 +0800
[SPARK-44297][CORE][TESTS] Make `ClassLoaderIsolationSuite` test pass with
Scala 2.13
### What changes were proposed in this pull request?
The main change of this pr as follows:
1. rename `TestHelloV2.jar` and `TestHelloV3.jar` added in
https://github.com/apache/spark/pull/41789 to `TestHelloV2_2.12.jar` and
`TestHelloV3_2.12.jar`
2. Add corresponding `TestHelloV2_2.13.jar` and `TestHelloV3_2.13.jar`
which compiled with Scala 2.13
3. Make `ClassLoaderIsolationSuite` use the correct jar in testing
### Why are the changes needed?
Make `ClassLoaderIsolationSuite` test pass with Scala 2.13.
The Scala 2.13 daily test failed after
https://github.com/apache/spark/pull/41789
- https://github.com/apache/spark/actions/runs/5447771717/jobs/9910185372
```
[info] - Executor classloader isolation with JobArtifactSet *** FAILED ***
(83 milliseconds)
[info] org.apache.spark.SparkException: Job aborted due to stage failure:
Task 0 in stage 0.0 failed 1 times, most recent failure: Lost task 0.0 in stage
0.0 (TID 0) (localhost executor driver): java.lang.NoClassDefFoundError:
scala/Serializable
[info] at java.lang.ClassLoader.defineClass1(Native Method)
[info] at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
[info] at
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
[info] at java.net.URLClassLoader.defineClass(URLClassLoader.java:473)
[info] at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
[info] at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
[info] at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
[info] at java.security.AccessController.doPrivileged(Native Method)
[info] at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
[info] at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
[info] at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
[info] at java.lang.Class.forName0(Native Method)
[info] at java.lang.Class.forName(Class.java:348)
[info] at
org.apache.spark.util.SparkClassUtils.classForName(SparkClassUtils.scala:35)
[info] at
org.apache.spark.util.SparkClassUtils.classForName$(SparkClassUtils.scala:30)
[info] at org.apache.spark.util.Utils$.classForName(Utils.scala:94)
[info] at
org.apache.spark.executor.ClassLoaderIsolationSuite.$anonfun$new$3(ClassLoaderIsolationSuite.scala:53)
[info] at
scala.runtime.java8.JFunction1$mcVI$sp.apply(JFunction1$mcVI$sp.scala:18)
[info] at scala.collection.IterableOnceOps.foreach(IterableOnce.scala:576)
[info] at scala.collection.IterableOnceOps.foreach$(IterableOnce.scala:574)
[info] at
org.apache.spark.InterruptibleIterator.foreach(InterruptibleIterator.scala:28)
[info] at org.apache.spark.rdd.RDD.$anonfun$foreach$2(RDD.scala:1028)
[info] at
org.apache.spark.rdd.RDD.$anonfun$foreach$2$adapted(RDD.scala:1028)
[info] at
org.apache.spark.SparkContext.$anonfun$runJob$5(SparkContext.scala:2406)
[info] at
org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:93)
[info] at
org.apache.spark.TaskContext.runTaskWithListeners(TaskContext.scala:161)
[info] at org.apache.spark.scheduler.Task.run(Task.scala:141)
[info] at
org.apache.spark.executor.Executor$TaskRunner.$anonfun$run$4(Executor.scala:593)
[info] at org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:1478)
[info] at
org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:596)
[info] at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[info] at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[info] at java.lang.Thread.run(Thread.java:750)
[info] Caused by: java.lang.ClassNotFoundException: scala.Serializable
[info] at java.net.URLClassLoader.findClass(URLClassLoader.java:387)
[info] at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
[info] at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
[info] ... 33 more
```
### Does this PR introduce _any_ user-facing change?
No
### How was this patch tested?
- Pass GitHub Actions
- Manual check:
**Scala 2.12**
```
build/sbt "core/testOnly *ClassLoaderIsolationSuite"
```
```
[info] ClassLoaderIsolationSuite:
[info] - Executor classloader isolation with JobArtifactSet (1 second, 394
milliseconds)
[info] Run completed in 2 seconds, 437 milliseconds.
[info] Total number of tests run: 1
[info] Suites: completed 1, aborted 0
[info] Tests: succeeded 1, failed 0, canceled 0, ignored 0, pending 0
[info] All tests passed.
```
**Scala 2.13**
```
dev/change-scala-version.sh 2.13
build/sbt "core/testOnly *ClassLoaderIsolationSuite" -Pscala-2.13
```
```
[info] ClassLoaderIsolationSuite:
[info] - Executor classloader isolation with JobArtifactSet (1 second, 355
milliseconds)
[info] Run completed in 2 seconds, 264 milliseconds.
[info] Total number of tests run: 1
[info] Suites: completed 1, aborted 0
[info] Tests: succeeded 1, failed 0, canceled 0, ignored 0, pending 0
[info] All tests passed.
```
Closes #41852 from LuciferYang/SPARK-44297.
Authored-by: yangjie01 <[email protected]>
Signed-off-by: yangjie01 <[email protected]>
---
.../resources/{TestHelloV2.jar => TestHelloV2_2.12.jar} | Bin
core/src/test/resources/TestHelloV2_2.13.jar | Bin 0 -> 4118 bytes
.../resources/{TestHelloV3.jar => TestHelloV3_2.12.jar} | Bin
core/src/test/resources/TestHelloV3_2.13.jar | Bin 0 -> 3827 bytes
.../spark/executor/ClassLoaderIsolationSuite.scala | 14 ++++++++++++--
5 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/core/src/test/resources/TestHelloV2.jar
b/core/src/test/resources/TestHelloV2_2.12.jar
similarity index 100%
rename from core/src/test/resources/TestHelloV2.jar
rename to core/src/test/resources/TestHelloV2_2.12.jar
diff --git a/core/src/test/resources/TestHelloV2_2.13.jar
b/core/src/test/resources/TestHelloV2_2.13.jar
new file mode 100644
index 00000000000..6dee8fcd9c9
Binary files /dev/null and b/core/src/test/resources/TestHelloV2_2.13.jar differ
diff --git a/core/src/test/resources/TestHelloV3.jar
b/core/src/test/resources/TestHelloV3_2.12.jar
similarity index 100%
rename from core/src/test/resources/TestHelloV3.jar
rename to core/src/test/resources/TestHelloV3_2.12.jar
diff --git a/core/src/test/resources/TestHelloV3_2.13.jar
b/core/src/test/resources/TestHelloV3_2.13.jar
new file mode 100644
index 00000000000..0c292e7d81a
Binary files /dev/null and b/core/src/test/resources/TestHelloV3_2.13.jar differ
diff --git
a/core/src/test/scala/org/apache/spark/executor/ClassLoaderIsolationSuite.scala
b/core/src/test/scala/org/apache/spark/executor/ClassLoaderIsolationSuite.scala
index 33c1baccd72..72ee0e96fd0 100644
---
a/core/src/test/scala/org/apache/spark/executor/ClassLoaderIsolationSuite.scala
+++
b/core/src/test/scala/org/apache/spark/executor/ClassLoaderIsolationSuite.scala
@@ -17,21 +17,31 @@
package org.apache.spark.executor
+import scala.util.Properties
+
import org.apache.spark.{JobArtifactSet, LocalSparkContext, SparkConf,
SparkContext, SparkFunSuite}
import org.apache.spark.util.Utils
class ClassLoaderIsolationSuite extends SparkFunSuite with LocalSparkContext {
+
+ private val scalaVersion = Properties.versionNumberString
+ .split("\\.")
+ .take(2)
+ .mkString(".")
+
val jar1 =
Thread.currentThread().getContextClassLoader.getResource("TestUDTF.jar").toString
// package com.example
// object Hello { def test(): Int = 2 }
// case class Hello(x: Int, y: Int)
- val jar2 =
Thread.currentThread().getContextClassLoader.getResource("TestHelloV2.jar").toString
+ val jar2 = Thread.currentThread().getContextClassLoader
+ .getResource(s"TestHelloV2_$scalaVersion.jar").toString
// package com.example
// object Hello { def test(): Int = 3 }
// case class Hello(x: String)
- val jar3 =
Thread.currentThread().getContextClassLoader.getResource("TestHelloV3.jar").toString
+ val jar3 = Thread.currentThread().getContextClassLoader
+ .getResource(s"TestHelloV3_$scalaVersion.jar").toString
test("Executor classloader isolation with JobArtifactSet") {
sc = new SparkContext(new
SparkConf().setAppName("test").setMaster("local"))
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]