Skip to content

Commit 1ed8ce2

Browse files
TQJADEPeter Toth
authored andcommitted
[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 apache#292 from TQJADE/ingress-fix. Authored-by: Qi Tan <[email protected]> Signed-off-by: Peter Toth <[email protected]>
1 parent 9791943 commit 1ed8ce2

File tree

3 files changed

+86
-0
lines changed

3 files changed

+86
-0
lines changed

spark-operator-api/src/main/java/org/apache/spark/k8s/operator/spec/DriverServiceIngressSpec.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,17 @@
2525
import io.fabric8.kubernetes.api.model.ObjectMeta;
2626
import io.fabric8.kubernetes.api.model.ServiceSpec;
2727
import io.fabric8.kubernetes.api.model.networking.v1.IngressSpec;
28+
import lombok.AllArgsConstructor;
2829
import lombok.Builder;
2930
import lombok.Data;
31+
import lombok.NoArgsConstructor;
3032

3133
/** Spec for a driver service ingress. */
3234
@Data
3335
@Builder
3436
@JsonInclude(JsonInclude.Include.NON_NULL)
37+
@NoArgsConstructor
38+
@AllArgsConstructor
3539
@JsonIgnoreProperties(ignoreUnknown = true)
3640
public class DriverServiceIngressSpec {
3741
@Required protected ObjectMeta serviceMetadata;

spark-operator-api/src/test/java/org/apache/spark/k8s/operator/spec/ApplicationSpecTest.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@
2222
import static org.apache.spark.k8s.operator.spec.DeploymentMode.ClusterMode;
2323
import static org.junit.jupiter.api.Assertions.*;
2424

25+
import java.io.IOException;
26+
import java.io.InputStream;
27+
28+
import com.fasterxml.jackson.databind.ObjectMapper;
2529
import org.junit.jupiter.api.Test;
2630

2731
class ApplicationSpecTest {
@@ -46,4 +50,23 @@ void testInitSpecWithDefaults() {
4650
assertEquals(0, tolerations.instanceConfig.minExecutors);
4751
assertEquals(0, tolerations.instanceConfig.maxExecutors);
4852
}
53+
54+
@Test
55+
void testSpecWithDriverServiceIngressList() throws IOException {
56+
ObjectMapper objectMapper = new ObjectMapper();
57+
58+
InputStream inputStream =
59+
getClass()
60+
.getClassLoader()
61+
.getResourceAsStream("spark-job-with-driver-service" + "-ingress.json");
62+
ApplicationSpec spec = objectMapper.readValue(inputStream, ApplicationSpec.class);
63+
assertNotNull(spec.getDriverServiceIngressList());
64+
assertEquals(1, spec.getDriverServiceIngressList().size());
65+
66+
DriverServiceIngressSpec driverServiceIngress = spec.getDriverServiceIngressList().get(0);
67+
assertNotNull(driverServiceIngress.getIngressMetadata());
68+
assertNotNull(driverServiceIngress.getIngressSpec());
69+
assertNotNull(driverServiceIngress.getServiceSpec());
70+
assertNotNull(driverServiceIngress.getServiceMetadata());
71+
}
4972
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
{
2+
"mainClass": "org.apache.spark.examples.SparkPi",
3+
"jars": "local:///opt/spark/examples/jars/spark-examples.jar",
4+
"sparkConf": {
5+
"spark.kubernetes.driver.master": "local[10]",
6+
"spark.kubernetes.driver.request.cores": "5",
7+
"spark.kubernetes.driver.limit.cores": "5",
8+
"spark.kubernetes.authenticate.driver.serviceAccountName": "spark",
9+
"spark.kubernetes.container.image": "apache/spark:4.0.0"
10+
},
11+
"runtimeVersions": {
12+
"sparkVersion": "4.0.0"
13+
},
14+
"driverServiceIngressList": [
15+
{
16+
"serviceMetadata": {
17+
"name": "spark-ui-service"
18+
},
19+
"serviceSpec": {
20+
"ports": [
21+
{
22+
"protocol": "TCP",
23+
"port": 80,
24+
"targetPort": 4040
25+
}
26+
]
27+
},
28+
"ingressMetadata": {
29+
"name": "spark-ui-ingress",
30+
"annotations": {
31+
"nginx.ingress.kubernetes.io/rewrite-target": "/"
32+
}
33+
},
34+
"ingressSpec": {
35+
"ingressClassName": "nginx-example",
36+
"rules": [
37+
{
38+
"http": {
39+
"paths": [
40+
{
41+
"path": "/",
42+
"pathType": "Prefix",
43+
"backend": {
44+
"service": {
45+
"name": "spark-ui-service",
46+
"port": {
47+
"number": 80
48+
}
49+
}
50+
}
51+
}
52+
]
53+
}
54+
}
55+
]
56+
}
57+
}
58+
]
59+
}

0 commit comments

Comments
 (0)