[ 
https://issues.apache.org/jira/browse/SPARK-59925?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Chandni Singh updated SPARK-59925:
----------------------------------
    Affects Version/s: kubernetes-operator-1.0.0
                           (was: 1.0.0)

> DriverResourceDecorator overwrites resource-defined labels with driver pod 
> labels
> ---------------------------------------------------------------------------------
>
>                 Key: SPARK-59925
>                 URL: https://issues.apache.org/jira/browse/SPARK-59925
>             Project: Spark
>          Issue Type: Improvement
>          Components: Kubernetes
>    Affects Versions: kubernetes-operator-1.0.0
>            Reporter: Chandni Singh
>            Priority: Major
>
> {{DriverResourceDecorator}} copies the driver pod's entire label map onto 
> every
> driver secondary resource:
> {code:java}
> new ObjectMetaBuilder(resource.getMetadata())
>     .addToOwnerReferences(buildOwnerReferenceTo(driverPod))
>     .addToLabels(driverPod.getMetadata().getLabels())
>     .build();
> {code}
> {{addToLabels(Map)}} is a put per key, so a driver pod label silently 
> replaces a
> label the user declared on the resource itself through {{serviceMetadata}} in
> {{{}DriverServiceIngressSpec{}}}, and since SPARK-58160 also in
> {{DriverHttpRouteSpec}} and {{{}DriverGrpcRouteSpec{}}}. The copy is 
> undocumented
> (the class javadoc covers only the owner reference).
> *Proposed fix*
> Apply the resource's own labels after the pod labels, so the resource's value 
> wins
> on conflict:
> {code:java}
> Map<String, String> labels = new HashMap<>();
> if (driverPod.getMetadata().getLabels() != null) {
>   labels.putAll(driverPod.getMetadata().getLabels());
> }
> if (resource.getMetadata().getLabels() != null) {
>   labels.putAll(resource.getMetadata().getLabels());
> }
> ObjectMeta metaData =
>     new ObjectMetaBuilder(resource.getMetadata())
>         .addToOwnerReferences(buildOwnerReferenceTo(driverPod))
>         .withLabels(labels)
>         .build();
> {code}
> Output is identical to today except on a key collision, where the resource now
> wins. Both maps are nullable, since {{serviceMetadata}} is optional.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

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

Reply via email to