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 95fc69a4 [FLINK-39819] Avoid redundant JSON String round-trips in 
SpecUtils.clone and DiffResult.toString (#1128)
95fc69a4 is described below

commit 95fc69a4cc467d98a0475afaed7da9816a45378e
Author: Dennis-Mircea Ciupitu <[email protected]>
AuthorDate: Thu Jun 4 12:19:20 2026 +0300

    [FLINK-39819] Avoid redundant JSON String round-trips in SpecUtils.clone 
and DiffResult.toString (#1128)
---
 .../flink/kubernetes/operator/api/utils/SpecUtils.java |  9 ++-------
 .../kubernetes/operator/api/utils/SpecUtilsTest.java   | 18 ++++++++++++++++++
 .../operator/reconciler/diff/DiffResult.java           |  8 ++------
 3 files changed, 22 insertions(+), 13 deletions(-)

diff --git 
a/flink-kubernetes-operator-api/src/main/java/org/apache/flink/kubernetes/operator/api/utils/SpecUtils.java
 
b/flink-kubernetes-operator-api/src/main/java/org/apache/flink/kubernetes/operator/api/utils/SpecUtils.java
index ec18bac2..c74adcf6 100644
--- 
a/flink-kubernetes-operator-api/src/main/java/org/apache/flink/kubernetes/operator/api/utils/SpecUtils.java
+++ 
b/flink-kubernetes-operator-api/src/main/java/org/apache/flink/kubernetes/operator/api/utils/SpecUtils.java
@@ -130,16 +130,11 @@ public class SpecUtils {
         }
     }
 
+    @SuppressWarnings("unchecked")
     public static <T> T clone(T object) {
         if (object == null) {
             return null;
         }
-        try {
-            return (T)
-                    objectMapper.readValue(
-                            objectMapper.writeValueAsString(object), 
object.getClass());
-        } catch (JsonProcessingException e) {
-            throw new IllegalStateException(e);
-        }
+        return (T) objectMapper.convertValue(object, object.getClass());
     }
 }
diff --git 
a/flink-kubernetes-operator-api/src/test/java/org/apache/flink/kubernetes/operator/api/utils/SpecUtilsTest.java
 
b/flink-kubernetes-operator-api/src/test/java/org/apache/flink/kubernetes/operator/api/utils/SpecUtilsTest.java
index bcb22e86..cd4f0722 100644
--- 
a/flink-kubernetes-operator-api/src/test/java/org/apache/flink/kubernetes/operator/api/utils/SpecUtilsTest.java
+++ 
b/flink-kubernetes-operator-api/src/test/java/org/apache/flink/kubernetes/operator/api/utils/SpecUtilsTest.java
@@ -27,11 +27,29 @@ import com.fasterxml.jackson.databind.node.ObjectNode;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertNotSame;
 import static org.junit.jupiter.api.Assertions.assertNull;
 
 /** Test for {@link SpecUtils}. */
 class SpecUtilsTest {
 
+    @Test
+    void testCloneProducesDeepCopy() {
+        FlinkDeploymentSpec original = 
BaseTestUtils.buildApplicationCluster().getSpec();
+
+        FlinkDeploymentSpec cloned = SpecUtils.clone(original);
+
+        assertNotSame(original, cloned);
+        assertEquals(original, cloned);
+        assertNotSame(original.getJob(), cloned.getJob());
+
+        cloned.getJob().setParallelism(original.getJob().getParallelism() + 1);
+
+        assertNotEquals(original.getJob().getParallelism(), 
cloned.getJob().getParallelism());
+        assertNull(SpecUtils.clone(null));
+    }
+
     @Test
     void testSpecSerializationWithVersion() throws JsonProcessingException {
         FlinkDeployment app = BaseTestUtils.buildApplicationCluster();
diff --git 
a/flink-kubernetes-operator/src/main/java/org/apache/flink/kubernetes/operator/reconciler/diff/DiffResult.java
 
b/flink-kubernetes-operator/src/main/java/org/apache/flink/kubernetes/operator/reconciler/diff/DiffResult.java
index 2e2ea9b8..3a9afaa1 100644
--- 
a/flink-kubernetes-operator/src/main/java/org/apache/flink/kubernetes/operator/reconciler/diff/DiffResult.java
+++ 
b/flink-kubernetes-operator/src/main/java/org/apache/flink/kubernetes/operator/reconciler/diff/DiffResult.java
@@ -70,12 +70,8 @@ public class DiffResult<T> {
         diffList.forEach(
                 diff -> {
                     try {
-                        JsonNode diffBefore =
-                                objectMapper.readTree(
-                                        
objectMapper.writeValueAsString(diff.getLeft()));
-                        JsonNode diffAfter =
-                                objectMapper.readTree(
-                                        
objectMapper.writeValueAsString(diff.getRight()));
+                        JsonNode diffBefore = 
objectMapper.valueToTree(diff.getLeft());
+                        JsonNode diffAfter = 
objectMapper.valueToTree(diff.getRight());
                         JsonNode jsonDiff = JsonDiff.asJson(diffBefore, 
diffAfter);
                         jsonDiff.forEach(
                                 row -> {

Reply via email to