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

dongjoon pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/spark-kubernetes-operator.git


The following commit(s) were added to refs/heads/main by this push:
     new f861130  [SPARK-56446] Use Java `Optional` in 
`SparkAppDriverConf.create` method signature
f861130 is described below

commit f8611303b1b4df6fbc2e7f87770e35206f3a94c8
Author: Dongjoon Hyun <[email protected]>
AuthorDate: Fri Apr 10 11:58:51 2026 -0700

    [SPARK-56446] Use Java `Optional` in `SparkAppDriverConf.create` method 
signature
    
    ### What changes were proposed in this pull request?
    
    This PR changes the `proxyUser` parameter of `SparkAppDriverConf.create` 
(and its private constructor) from Scala `Option<String>` to 
`java.util.Optional<String>`, and updates all call sites accordingly. The Scala 
`Option` is now used only at a single `super(...)` invocation inside the 
constructor via `scala.Option.apply(proxyUser.orElse(null))`.
    
    ### Why are the changes needed?
    
    `SparkAppDriverConf` is a Java class in this repository, but its public 
factory previously leaked `scala.Option` into every Java caller (production 
code and tests), forcing them to use `Option.apply(...)` / `Option.empty()`. 
Using `java.util.Optional` gives Java callers a natural API and aligns with the 
recent direction of adopting Java-friendly Spark APIs (e.g., 
`JavaMainAppResource`, `KubernetesDriverSpec`).
    
    ### Does this PR introduce _any_ user-facing change?
    
    No behavior change.
    
    ### How was this patch tested?
    
    Pass the CIs with the existing `SparkAppDriverConfTest` tests, which were 
updated to pass `Optional.empty()`.
    
    ### Was this patch authored or co-authored using generative AI tooling?
    
    Generated-by: Claude Opus 4.6
    
    Closes #634 from dongjoon-hyun/SPARK-56446.
    
    Authored-by: Dongjoon Hyun <[email protected]>
    Signed-off-by: Dongjoon Hyun <[email protected]>
---
 .../apache/spark/k8s/operator/SparkAppDriverConf.java   | 17 ++++++++++++-----
 .../spark/k8s/operator/SparkAppSubmissionWorker.java    |  5 ++---
 .../spark/k8s/operator/SparkAppDriverConfTest.java      |  9 ++++-----
 3 files changed, 18 insertions(+), 13 deletions(-)

diff --git 
a/spark-submission-worker/src/main/java/org/apache/spark/k8s/operator/SparkAppDriverConf.java
 
b/spark-submission-worker/src/main/java/org/apache/spark/k8s/operator/SparkAppDriverConf.java
index a4cb03a..e6a3099 100644
--- 
a/spark-submission-worker/src/main/java/org/apache/spark/k8s/operator/SparkAppDriverConf.java
+++ 
b/spark-submission-worker/src/main/java/org/apache/spark/k8s/operator/SparkAppDriverConf.java
@@ -21,7 +21,7 @@ package org.apache.spark.k8s.operator;
 
 import static org.apache.spark.k8s.operator.Constants.LABEL_SPARK_VERSION_NAME;
 
-import scala.Option;
+import java.util.Optional;
 
 import org.apache.spark.SparkConf;
 import org.apache.spark.deploy.k8s.Config;
@@ -41,8 +41,15 @@ public final class SparkAppDriverConf extends 
KubernetesDriverConf {
       MainAppResource mainAppResource,
       String mainClass,
       String[] appArgs,
-      Option<String> proxyUser) {
-    super(sparkConf, appId, mainAppResource, mainClass, appArgs, proxyUser, 
null);
+      Optional<String> proxyUser) {
+    super(
+        sparkConf,
+        appId,
+        mainAppResource,
+        mainClass,
+        appArgs,
+        scala.Option.apply(proxyUser.orElse(null)),
+        null);
     this.sparkVersion = sparkVersion;
   }
 
@@ -54,7 +61,7 @@ public final class SparkAppDriverConf extends 
KubernetesDriverConf {
    * @param mainAppResource The main application resource.
    * @param mainClass The main class of the application.
    * @param appArgs The application arguments.
-   * @param proxyUser The proxy user option.
+   * @param proxyUser The proxy user.
    * @return A new SparkAppDriverConf instance.
    */
   public static SparkAppDriverConf create(
@@ -64,7 +71,7 @@ public final class SparkAppDriverConf extends 
KubernetesDriverConf {
       MainAppResource mainAppResource,
       String mainClass,
       String[] appArgs,
-      Option<String> proxyUser) {
+      Optional<String> proxyUser) {
     // pre-create check only
     KubernetesVolumeUtils.parseVolumesWithPrefix(
         sparkConf, Config.KUBERNETES_EXECUTOR_VOLUMES_PREFIX());
diff --git 
a/spark-submission-worker/src/main/java/org/apache/spark/k8s/operator/SparkAppSubmissionWorker.java
 
b/spark-submission-worker/src/main/java/org/apache/spark/k8s/operator/SparkAppSubmissionWorker.java
index fe7b978..ab3802e 100644
--- 
a/spark-submission-worker/src/main/java/org/apache/spark/k8s/operator/SparkAppSubmissionWorker.java
+++ 
b/spark-submission-worker/src/main/java/org/apache/spark/k8s/operator/SparkAppSubmissionWorker.java
@@ -26,8 +26,7 @@ import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 import java.util.List;
 import java.util.Map;
-
-import scala.Option;
+import java.util.Optional;
 
 import io.fabric8.kubernetes.client.KubernetesClient;
 
@@ -181,7 +180,7 @@ public class SparkAppSubmissionWorker {
         primaryResource,
         applicationSpec.getMainClass(),
         applicationSpec.getDriverArgs().toArray(String[]::new),
-        Option.apply(applicationSpec.getProxyUser()));
+        Optional.ofNullable(applicationSpec.getProxyUser()));
   }
 
   /**
diff --git 
a/spark-submission-worker/src/test/java/org/apache/spark/k8s/operator/SparkAppDriverConfTest.java
 
b/spark-submission-worker/src/test/java/org/apache/spark/k8s/operator/SparkAppDriverConfTest.java
index fd94d3a..39809c3 100644
--- 
a/spark-submission-worker/src/test/java/org/apache/spark/k8s/operator/SparkAppDriverConfTest.java
+++ 
b/spark-submission-worker/src/test/java/org/apache/spark/k8s/operator/SparkAppDriverConfTest.java
@@ -23,10 +23,9 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.Mockito.mock;
 
+import java.util.Optional;
 import java.util.UUID;
 
-import scala.Option;
-
 import org.junit.jupiter.api.Test;
 
 import org.apache.spark.SparkConf;
@@ -50,7 +49,7 @@ class SparkAppDriverConfTest {
             mock(JavaMainAppResource.class),
             "foo",
             null,
-            Option.empty());
+            Optional.empty());
     String resourcePrefix = sparkAppDriverConf.resourceNamePrefix();
     assertEquals(
         resourcePrefix,
@@ -79,7 +78,7 @@ class SparkAppDriverConfTest {
             mock(JavaMainAppResource.class),
             "foo",
             null,
-            Option.empty());
+            Optional.empty());
     String configMapNameDriver = sparkAppDriverConf.configMapNameDriver();
     assertTrue(
         configMapNameDriver.length() <= 253,
@@ -100,7 +99,7 @@ class SparkAppDriverConfTest {
             mock(JavaMainAppResource.class),
             "foo",
             null,
-            Option.empty());
+            Optional.empty());
     assertEquals(VERSION, 
sparkAppDriverConf.labels().get("spark-version").get());
   }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to