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 09e726d3658f [SPARK-51605][CONNECT] Try to create the parent directory 
before touching the logFile
09e726d3658f is described below

commit 09e726d3658f4ee6f2e96375db9b5551165d5a36
Author: yangjie01 <yangji...@baidu.com>
AuthorDate: Thu Mar 27 13:06:09 2025 +0800

    [SPARK-51605][CONNECT] Try to create the parent directory before touching 
the logFile
    
    ### What changes were proposed in this pull request?
    This PR try to create the parent directory before touching the log file in 
`connect.SparkSession.withLocalConnectServer` to avoid issues when the parent 
directory does not exist.
    
    ### Why are the changes needed?
    When the `logs` directory does not exist under the `SPARK_HOME` path, 
executing `bin/spark-shell --remote local` will result in the following error:
    
    ```
    bin/spark-shell --remote local
    WARNING: Using incubator modules: jdk.incubator.vector
    Exception in thread "main" java.nio.file.NoSuchFileException: 
/Users/yangjie01/Tools/spark-4.1.0-SNAPSHOT-bin-3.4.1/logs
      at 
java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:92)
      at 
java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:106)
      at 
java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)
      at 
java.base/sun.nio.fs.UnixFileAttributeViews$Basic.readAttributes(UnixFileAttributeViews.java:55)
      at 
java.base/sun.nio.fs.UnixFileSystemProvider.readAttributes(UnixFileSystemProvider.java:148)
      at java.base/java.nio.file.Files.readAttributes(Files.java:1851)
      at 
java.base/sun.nio.fs.PollingWatchService.doPrivilegedRegister(PollingWatchService.java:173)
      at 
java.base/sun.nio.fs.PollingWatchService$2.run(PollingWatchService.java:154)
      at 
java.base/sun.nio.fs.PollingWatchService$2.run(PollingWatchService.java:151)
      at 
java.base/java.security.AccessController.doPrivileged(AccessController.java:569)
      at 
java.base/sun.nio.fs.PollingWatchService.register(PollingWatchService.java:150)
      at java.base/sun.nio.fs.UnixPath.register(UnixPath.java:885)
      at java.base/java.nio.file.Path.register(Path.java:894)
      at 
org.apache.spark.sql.connect.SparkSession$.waitUntilFileExists(SparkSession.scala:717)
      at 
org.apache.spark.sql.connect.SparkSession$.$anonfun$withLocalConnectServer$13(SparkSession.scala:798)
      at 
org.apache.spark.sql.connect.SparkSession$.$anonfun$withLocalConnectServer$13$adapted(SparkSession.scala:791)
      at scala.Option.foreach(Option.scala:437)
      at 
org.apache.spark.sql.connect.SparkSession$.withLocalConnectServer(SparkSession.scala:791)
      at 
org.apache.spark.sql.application.ConnectRepl$.doMain(ConnectRepl.scala:67)
      at 
org.apache.spark.sql.application.ConnectRepl$.main(ConnectRepl.scala:57)
      at org.apache.spark.sql.application.ConnectRepl.main(ConnectRepl.scala)
      at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native 
Method)
      at 
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
      at 
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.base/java.lang.reflect.Method.invoke(Method.java:569)
      at 
org.apache.spark.deploy.JavaMainApplication.start(SparkApplication.scala:52)
      at 
org.apache.spark.deploy.SparkSubmit.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:1027)
      at org.apache.spark.deploy.SparkSubmit.doRunMain$1(SparkSubmit.scala:204)
      at org.apache.spark.deploy.SparkSubmit.submit(SparkSubmit.scala:227)
      at org.apache.spark.deploy.SparkSubmit.doSubmit(SparkSubmit.scala:96)
      at 
org.apache.spark.deploy.SparkSubmit$$anon$2.doSubmit(SparkSubmit.scala:1132)
      at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:1141)
      at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
    25/03/26 15:39:40 INFO ShutdownHookManager: Shutdown hook called
    25/03/26 15:39:40 INFO ShutdownHookManager: Deleting directory 
/private/var/folders/j2/cfn7w6795538n_416_27rkqm0000gn/T/spark-fe4c9d71-b7d7-437e-b486-514cc538cccc
    ```
    
    ### Does this PR introduce _any_ user-facing change?
    No
    
    ### How was this patch tested?
    - Pass GitHub Acitons
    - Manual Check:
    
    1. Package a Spark Client using the command `dev/make-distribution.sh --tgz 
-Phive`.
    2. Execute `bin/spark-shell --remote local`. Although the logs directory 
does not exist, the aforementioned error is no longer reported.
    3. After exiting the Connect REPL, execute `bin/spark-shell --remote local` 
again. At this point, the logs directory already exists, and the shell will 
start successfully. (Due to the unresolved issue SPARK-51606, it is necessary 
to manually kill the Connect Server process after exiting the Connect REPL.)
    
    ### Was this patch authored or co-authored using generative AI tooling?
    No
    
    Closes #50421 from LuciferYang/SPARK-51605.
    
    Authored-by: yangjie01 <yangji...@baidu.com>
    Signed-off-by: yangjie01 <yangji...@baidu.com>
---
 .../src/main/scala/org/apache/spark/sql/connect/SparkSession.scala       | 1 +
 1 file changed, 1 insertion(+)

diff --git 
a/sql/connect/common/src/main/scala/org/apache/spark/sql/connect/SparkSession.scala
 
b/sql/connect/common/src/main/scala/org/apache/spark/sql/connect/SparkSession.scala
index 4d93f797e1ec..52c8da9ecd1f 100644
--- 
a/sql/connect/common/src/main/scala/org/apache/spark/sql/connect/SparkSession.scala
+++ 
b/sql/connect/common/src/main/scala/org/apache/spark/sql/connect/SparkSession.scala
@@ -789,6 +789,7 @@ object SparkSession extends SparkSessionCompanion with 
Logging {
         Option(System.getenv("SPARK_LOG_DIR"))
           .orElse(Option(System.getenv("SPARK_HOME")).map(p => Paths.get(p, 
"logs").toString))
           .foreach { p =>
+            Files.createDirectories(Paths.get(p))
             val logFile = Paths
               .get(
                 p,


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

Reply via email to