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();

Reply via email to