You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spark.apache.org by gu...@apache.org on 2023/06/19 00:57:26 UTC

[spark] branch master updated: [SPARK-44092][CORE] Add `Utils.isJavaVersionAtLeast21` and make `core` module pass with Java 21

This is an automated email from the ASF dual-hosted git repository.

gurwls223 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 3a9185964a0 [SPARK-44092][CORE] Add `Utils.isJavaVersionAtLeast21` and make `core` module pass with Java 21
3a9185964a0 is described below

commit 3a9185964a0de3c720a6b77d38a446258b73468e
Author: Dongjoon Hyun <do...@apache.org>
AuthorDate: Mon Jun 19 09:57:14 2023 +0900

    [SPARK-44092][CORE] Add `Utils.isJavaVersionAtLeast21` and make `core` module pass with Java 21
    
    ### What changes were proposed in this pull request?
    
    This PR aims to make `core` module tests succeed in Java 21. To do that, this PR
    - Adds a utility variable `Utils.isJavaVersionAtLeast21` because Apache Commons Lang3 `3.12.0` doesn't have a constant for Java 21 yet.
    - Fix `UtilsSuite` according to the Java behavior change of `Files.createDirectories` API.
    
    ### Why are the changes needed?
    
    Java 20+ changes the behavior.
    - https://github.com/openjdk/jdk/commit/169a5d48afbc6627f36a768c17c2a5e56219d9c7
    ```
    8294193: Files.createDirectories throws FileAlreadyExistsException for a symbolic link whose target is an existing directory
    ```
    
    ### Does this PR introduce _any_ user-facing change?
    
    No.
    
    ### How was this patch tested?
    
    Manual tests in Java 21.
    
    **JAVA**
    ```
    $ java -version
    openjdk version "21-ea" 2023-09-19
    OpenJDK Runtime Environment (build 21-ea+27-2343)
    OpenJDK 64-Bit Server VM (build 21-ea+27-2343, mixed mode, sharing)
    ```
    
    **BEFORE**
    ```
    $ $ build/sbt "core/test" -Dtest.exclude.tags=org.apache.spark.tags.ExtendedLevelDBTest
    ...
    [info] *** 1 TEST FAILED ***
    [error] Failed: Total 3451, Failed 1, Errors 0, Passed 3450, Ignored 10, Canceled 5
    [error] Failed tests:
    [error]         org.apache.spark.util.UtilsSuite
    [error] (core / Test / test) sbt.TestsFailedException: Tests unsuccessful
    [error] Total time: 1040 s (17:20), completed Jun 18, 2023, 12:27:59 AM
    ```
    
    **AFTER**
    ```
    $ build/sbt "core/testOnly org.apache.spark.util.UtilsSuite"
    ...
    [info] All tests passed.
    [success] Total time: 29 s, completed Jun 17, 2023, 11:16:23 PM
    ```
    
    Closes #41648 from dongjoon-hyun/SPARK-44092.
    
    Authored-by: Dongjoon Hyun <do...@apache.org>
    Signed-off-by: Hyukjin Kwon <gu...@apache.org>
---
 core/src/main/scala/org/apache/spark/util/Utils.scala      | 6 ++++++
 core/src/test/scala/org/apache/spark/util/UtilsSuite.scala | 6 +++++-
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/core/src/main/scala/org/apache/spark/util/Utils.scala b/core/src/main/scala/org/apache/spark/util/Utils.scala
index c785c135a45..6e8f2c496e8 100644
--- a/core/src/main/scala/org/apache/spark/util/Utils.scala
+++ b/core/src/main/scala/org/apache/spark/util/Utils.scala
@@ -1972,6 +1972,12 @@ private[spark] object Utils extends Logging with SparkClassUtils {
    */
   val isMac = SystemUtils.IS_OS_MAC_OSX
 
+  /**
+   * Whether the underlying Java version is at least 21.
+   */
+  val isJavaVersionAtLeast21 =
+    System.getProperty("java.version").split("[+.\\-]+", 3)(0).toInt >= 21
+
   /**
    * Whether the underlying operating system is Mac OS X and processor is Apple Silicon.
    */
diff --git a/core/src/test/scala/org/apache/spark/util/UtilsSuite.scala b/core/src/test/scala/org/apache/spark/util/UtilsSuite.scala
index a2990f087b7..7923e81949d 100644
--- a/core/src/test/scala/org/apache/spark/util/UtilsSuite.scala
+++ b/core/src/test/scala/org/apache/spark/util/UtilsSuite.scala
@@ -527,7 +527,11 @@ class UtilsSuite extends SparkFunSuite with ResetSystemProperties {
     // 6. Symbolic link
     val scenario6 = java.nio.file.Files.createSymbolicLink(new File(testDir, "scenario6")
       .toPath, scenario1.toPath).toFile
-    assert(!Utils.createDirectory(scenario6))
+    if (Utils.isJavaVersionAtLeast21) {
+      assert(Utils.createDirectory(scenario6))
+    } else {
+      assert(!Utils.createDirectory(scenario6))
+    }
     assert(scenario6.exists())
 
     // 7. Directory exists


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@spark.apache.org
For additional commands, e-mail: commits-help@spark.apache.org