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 -> {