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

ptoth 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 1ed8ce2  [SPARK-53026] Fix deserialize error for spec with 
DriverServiceIngressSpec field
1ed8ce2 is described below

commit 1ed8ce27df1de189831b832203ef578f696ed697
Author: Qi Tan <16416018+tqj...@users.noreply.github.com>
AuthorDate: Tue Aug 5 20:41:03 2025 +0200

    [SPARK-53026] Fix deserialize error for spec with DriverServiceIngressSpec 
field
    
    ### What changes were proposed in this pull request?
    Add two annotations for DriverServiceIngressSpec constructor
    
    ### Why are the changes needed?
    Without the annotation, when applying the spec with 
DriverServiceIngressSpec, deserialization failed.
    
    ### Does this PR introduce _any_ user-facing change?
    no
    
    ### How was this patch tested?
    unit test
    
    ### Was this patch authored or co-authored using generative AI tooling?
    no
    
    Closes #292 from TQJADE/ingress-fix.
    
    Authored-by: Qi Tan <16416018+tqj...@users.noreply.github.com>
    Signed-off-by: Peter Toth <p_t...@apple.com>
---
 .../operator/spec/DriverServiceIngressSpec.java    |  4 ++
 .../k8s/operator/spec/ApplicationSpecTest.java     | 23 +++++++++
 .../spark-job-with-driver-service-ingress.json     | 59 ++++++++++++++++++++++
 3 files changed, 86 insertions(+)

diff --git 
a/spark-operator-api/src/main/java/org/apache/spark/k8s/operator/spec/DriverServiceIngressSpec.java
 
b/spark-operator-api/src/main/java/org/apache/spark/k8s/operator/spec/DriverServiceIngressSpec.java
index 5ddccf1..e04f994 100644
--- 
a/spark-operator-api/src/main/java/org/apache/spark/k8s/operator/spec/DriverServiceIngressSpec.java
+++ 
b/spark-operator-api/src/main/java/org/apache/spark/k8s/operator/spec/DriverServiceIngressSpec.java
@@ -25,13 +25,17 @@ import io.fabric8.generator.annotation.Required;
 import io.fabric8.kubernetes.api.model.ObjectMeta;
 import io.fabric8.kubernetes.api.model.ServiceSpec;
 import io.fabric8.kubernetes.api.model.networking.v1.IngressSpec;
+import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 /** Spec for a driver service ingress. */
 @Data
 @Builder
 @JsonInclude(JsonInclude.Include.NON_NULL)
+@NoArgsConstructor
+@AllArgsConstructor
 @JsonIgnoreProperties(ignoreUnknown = true)
 public class DriverServiceIngressSpec {
   @Required protected ObjectMeta serviceMetadata;
diff --git 
a/spark-operator-api/src/test/java/org/apache/spark/k8s/operator/spec/ApplicationSpecTest.java
 
b/spark-operator-api/src/test/java/org/apache/spark/k8s/operator/spec/ApplicationSpecTest.java
index 31693c9..59e6544 100644
--- 
a/spark-operator-api/src/test/java/org/apache/spark/k8s/operator/spec/ApplicationSpecTest.java
+++ 
b/spark-operator-api/src/test/java/org/apache/spark/k8s/operator/spec/ApplicationSpecTest.java
@@ -22,6 +22,10 @@ package org.apache.spark.k8s.operator.spec;
 import static org.apache.spark.k8s.operator.spec.DeploymentMode.ClusterMode;
 import static org.junit.jupiter.api.Assertions.*;
 
+import java.io.IOException;
+import java.io.InputStream;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
 import org.junit.jupiter.api.Test;
 
 class ApplicationSpecTest {
@@ -46,4 +50,23 @@ class ApplicationSpecTest {
     assertEquals(0, tolerations.instanceConfig.minExecutors);
     assertEquals(0, tolerations.instanceConfig.maxExecutors);
   }
+
+  @Test
+  void testSpecWithDriverServiceIngressList() throws IOException {
+    ObjectMapper objectMapper = new ObjectMapper();
+
+    InputStream inputStream =
+        getClass()
+            .getClassLoader()
+            .getResourceAsStream("spark-job-with-driver-service" + 
"-ingress.json");
+    ApplicationSpec spec = objectMapper.readValue(inputStream, 
ApplicationSpec.class);
+    assertNotNull(spec.getDriverServiceIngressList());
+    assertEquals(1, spec.getDriverServiceIngressList().size());
+
+    DriverServiceIngressSpec driverServiceIngress = 
spec.getDriverServiceIngressList().get(0);
+    assertNotNull(driverServiceIngress.getIngressMetadata());
+    assertNotNull(driverServiceIngress.getIngressSpec());
+    assertNotNull(driverServiceIngress.getServiceSpec());
+    assertNotNull(driverServiceIngress.getServiceMetadata());
+  }
 }
diff --git 
a/spark-operator-api/src/test/resources/spark-job-with-driver-service-ingress.json
 
b/spark-operator-api/src/test/resources/spark-job-with-driver-service-ingress.json
new file mode 100644
index 0000000..1f44cbd
--- /dev/null
+++ 
b/spark-operator-api/src/test/resources/spark-job-with-driver-service-ingress.json
@@ -0,0 +1,59 @@
+{
+  "mainClass": "org.apache.spark.examples.SparkPi",
+  "jars": "local:///opt/spark/examples/jars/spark-examples.jar",
+  "sparkConf": {
+    "spark.kubernetes.driver.master": "local[10]",
+    "spark.kubernetes.driver.request.cores": "5",
+    "spark.kubernetes.driver.limit.cores": "5",
+    "spark.kubernetes.authenticate.driver.serviceAccountName": "spark",
+    "spark.kubernetes.container.image": "apache/spark:4.0.0"
+  },
+  "runtimeVersions": {
+    "sparkVersion": "4.0.0"
+  },
+  "driverServiceIngressList": [
+    {
+      "serviceMetadata": {
+        "name": "spark-ui-service"
+      },
+      "serviceSpec": {
+        "ports": [
+          {
+            "protocol": "TCP",
+            "port": 80,
+            "targetPort": 4040
+          }
+        ]
+      },
+      "ingressMetadata": {
+        "name": "spark-ui-ingress",
+        "annotations": {
+          "nginx.ingress.kubernetes.io/rewrite-target": "/"
+        }
+      },
+      "ingressSpec": {
+        "ingressClassName": "nginx-example",
+        "rules": [
+          {
+            "http": {
+              "paths": [
+                {
+                  "path": "/",
+                  "pathType": "Prefix",
+                  "backend": {
+                    "service": {
+                      "name": "spark-ui-service",
+                      "port": {
+                        "number": 80
+                      }
+                    }
+                  }
+                }
+              ]
+            }
+          }
+        ]
+      }
+    }
+  ]
+}
\ No newline at end of file


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

Reply via email to