This is an automated email from the ASF dual-hosted git repository.
gyfora pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/flink-kubernetes-operator.git
The following commit(s) were added to refs/heads/main by this push:
new c479a460 [FLINK-38517] Fixed equal check to happen after inplace
modifications diffResult
c479a460 is described below
commit c479a460b1d9f62d685d2d6208ec275fef8938ce
Author: Daniel Rossos <[email protected]>
AuthorDate: Tue Nov 4 02:14:57 2025 -0500
[FLINK-38517] Fixed equal check to happen after inplace modifications
diffResult
---
.../diff/FlinkBlueGreenDeploymentSpecDiff.java | 10 ++--
.../diff/FlinkBlueGreenDeploymentSpecDiffTest.java | 63 ++++++++++++++++++++++
2 files changed, 69 insertions(+), 4 deletions(-)
diff --git
a/flink-kubernetes-operator/src/main/java/org/apache/flink/kubernetes/operator/reconciler/diff/FlinkBlueGreenDeploymentSpecDiff.java
b/flink-kubernetes-operator/src/main/java/org/apache/flink/kubernetes/operator/reconciler/diff/FlinkBlueGreenDeploymentSpecDiff.java
index f11f71c5..04c243d4 100644
---
a/flink-kubernetes-operator/src/main/java/org/apache/flink/kubernetes/operator/reconciler/diff/FlinkBlueGreenDeploymentSpecDiff.java
+++
b/flink-kubernetes-operator/src/main/java/org/apache/flink/kubernetes/operator/reconciler/diff/FlinkBlueGreenDeploymentSpecDiff.java
@@ -59,15 +59,17 @@ public class FlinkBlueGreenDeploymentSpecDiff {
FlinkDeploymentSpec leftSpec = left.getTemplate().getSpec();
FlinkDeploymentSpec rightSpec = right.getTemplate().getSpec();
+ // Used in Case 2 & 3: Delegate to ReflectiveDiffBuilder for nested
spec comparison
+ // Calculate diffResult before comparison to apply in-place removal of
ignored fields
+ DiffResult<FlinkDeploymentSpec> diffResult =
+ new ReflectiveDiffBuilder<>(deploymentMode, leftSpec,
rightSpec).build();
+
// Case 1: FlinkDeploymentSpecs are identical
if (leftSpec.equals(rightSpec)) {
return BlueGreenDiffType.IGNORE;
}
- // Case 2 & 3: Delegate to ReflectiveDiffBuilder for nested spec
comparison
- DiffResult<FlinkDeploymentSpec> diffResult =
- new ReflectiveDiffBuilder<>(deploymentMode, leftSpec,
rightSpec).build();
-
+ // Extract the diff type from ReflectiveDiffBuilder result
DiffType diffType = diffResult.getType();
// Case 2: ReflectiveDiffBuilder returns IGNORE
diff --git
a/flink-kubernetes-operator/src/test/java/org/apache/flink/kubernetes/operator/reconciler/diff/FlinkBlueGreenDeploymentSpecDiffTest.java
b/flink-kubernetes-operator/src/test/java/org/apache/flink/kubernetes/operator/reconciler/diff/FlinkBlueGreenDeploymentSpecDiffTest.java
index 37786833..9fe6b8bd 100644
---
a/flink-kubernetes-operator/src/test/java/org/apache/flink/kubernetes/operator/reconciler/diff/FlinkBlueGreenDeploymentSpecDiffTest.java
+++
b/flink-kubernetes-operator/src/test/java/org/apache/flink/kubernetes/operator/reconciler/diff/FlinkBlueGreenDeploymentSpecDiffTest.java
@@ -33,6 +33,7 @@ import
org.apache.flink.kubernetes.operator.api.spec.TaskManagerSpec;
import org.apache.flink.kubernetes.operator.api.spec.UpgradeMode;
import io.fabric8.kubernetes.api.model.ObjectMeta;
+import io.fabric8.kubernetes.api.model.PodTemplateSpecBuilder;
import org.junit.jupiter.api.Test;
import java.util.HashMap;
@@ -133,6 +134,68 @@ public class FlinkBlueGreenDeploymentSpecDiffTest {
assertEquals(BlueGreenDiffType.IGNORE, diff.compare());
}
+ @Test
+ public void testIgnoreForRootPodTemplateAdditionalProps() {
+ FlinkBlueGreenDeploymentSpec spec1 = createBasicSpec();
+ FlinkBlueGreenDeploymentSpec spec2 = createBasicSpec();
+
+ // Set spec1 to have empty podTemplate to not cause valid diff to be
detected
+ spec1.getTemplate().getSpec().setPodTemplate(new
PodTemplateSpecBuilder().build());
+ spec2.getTemplate()
+ .getSpec()
+ .setPodTemplate(
+ new PodTemplateSpecBuilder()
+ .withAdditionalProperties(Map.of("apiVersion",
"v1"))
+ .build());
+ FlinkBlueGreenDeploymentSpecDiff diff =
+ new FlinkBlueGreenDeploymentSpecDiff(DEPLOYMENT_MODE, spec1,
spec2);
+ assertEquals(BlueGreenDiffType.IGNORE, diff.compare());
+ }
+
+ @Test
+ public void testIgnoreForJobManagerPodTemplateAdditionalProps() {
+ FlinkBlueGreenDeploymentSpec spec1 = createBasicSpec();
+ FlinkBlueGreenDeploymentSpec spec2 = createBasicSpec();
+
+ // Set spec1 to have empty podTemplate to not cause valid diff to be
detected
+ spec1.getTemplate()
+ .getSpec()
+ .getJobManager()
+ .setPodTemplate(new PodTemplateSpecBuilder().build());
+ spec2.getTemplate()
+ .getSpec()
+ .getJobManager()
+ .setPodTemplate(
+ new PodTemplateSpecBuilder()
+ .withAdditionalProperties(Map.of("apiVersion",
"v1"))
+ .build());
+ FlinkBlueGreenDeploymentSpecDiff diff =
+ new FlinkBlueGreenDeploymentSpecDiff(DEPLOYMENT_MODE, spec1,
spec2);
+ assertEquals(BlueGreenDiffType.IGNORE, diff.compare());
+ }
+
+ @Test
+ public void testIgnoreForTaskManagerPodTemplateAdditionalProps() {
+ FlinkBlueGreenDeploymentSpec spec1 = createBasicSpec();
+ FlinkBlueGreenDeploymentSpec spec2 = createBasicSpec();
+
+ // Set spec1 to have empty podTemplate to not cause valid diff to be
detected
+ spec1.getTemplate()
+ .getSpec()
+ .getTaskManager()
+ .setPodTemplate(new PodTemplateSpecBuilder().build());
+ spec2.getTemplate()
+ .getSpec()
+ .getTaskManager()
+ .setPodTemplate(
+ new PodTemplateSpecBuilder()
+ .withAdditionalProperties(Map.of("apiVersion",
"v1"))
+ .build());
+ FlinkBlueGreenDeploymentSpecDiff diff =
+ new FlinkBlueGreenDeploymentSpecDiff(DEPLOYMENT_MODE, spec1,
spec2);
+ assertEquals(BlueGreenDiffType.IGNORE, diff.compare());
+ }
+
@Test
public void testTransitionForNestedSpecDifference() {
FlinkBlueGreenDeploymentSpec spec1 = createBasicSpec();