gaborgsomogyi commented on code in PR #535:
URL: 
https://github.com/apache/flink-kubernetes-operator/pull/535#discussion_r1151883050


##########
flink-kubernetes-operator/src/main/java/org/apache/flink/kubernetes/operator/utils/FlinkUtils.java:
##########
@@ -106,6 +99,54 @@ private static void mergeInto(JsonNode toNode, JsonNode 
fromNode) {
         }
     }
 
+    private static void mergeArray(
+            ArrayNode toChildNode, ArrayNode fromChildNode, boolean 
mergeArraysByName) {
+        if (namesDefined(toChildNode) && namesDefined(fromChildNode) && 
mergeArraysByName) {
+            var toGrouped = groupByName(toChildNode);
+            var fromGrouped = groupByName(fromChildNode);
+            fromGrouped.forEach(
+                    (name, fromElement) ->
+                            toGrouped.compute(
+                                    name,
+                                    (n, toElement) -> {
+                                        if (toElement == null) {
+                                            return fromElement;
+                                        }
+                                        mergeInto(toElement, fromElement, 
mergeArraysByName);
+                                        return toElement;
+                                    }));
+
+            toChildNode.removeAll();
+            toGrouped.forEach((n, e) -> toChildNode.add(e));
+        } else {
+            for (int i = 0; i < fromChildNode.size(); i++) {
+                JsonNode updatedChildNode = fromChildNode.get(i);
+                if (toChildNode.size() <= i) {
+                    // append new node
+                    toChildNode.add(updatedChildNode);
+                }
+                mergeInto(toChildNode.get(i), updatedChildNode, 
mergeArraysByName);
+            }
+        }
+    }
+
+    private static boolean namesDefined(ArrayNode node) {
+        var it = node.elements();
+        while (it.hasNext()) {
+            var next = it.next();
+            if (!next.has("name")) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    private static Map<String, ObjectNode> groupByName(ArrayNode node) {
+        var out = new LinkedHashMap<String, ObjectNode>();
+        node.elements().forEachRemaining(e -> 
out.put((e.get("name").asText()), (ObjectNode) e));

Review Comment:
   Does `ObjectNode` cast is safe?



##########
flink-kubernetes-operator/src/main/java/org/apache/flink/kubernetes/operator/utils/FlinkUtils.java:
##########
@@ -106,6 +99,54 @@ private static void mergeInto(JsonNode toNode, JsonNode 
fromNode) {
         }
     }
 
+    private static void mergeArray(
+            ArrayNode toChildNode, ArrayNode fromChildNode, boolean 
mergeArraysByName) {
+        if (namesDefined(toChildNode) && namesDefined(fromChildNode) && 
mergeArraysByName) {
+            var toGrouped = groupByName(toChildNode);
+            var fromGrouped = groupByName(fromChildNode);
+            fromGrouped.forEach(
+                    (name, fromElement) ->
+                            toGrouped.compute(
+                                    name,
+                                    (n, toElement) -> {
+                                        if (toElement == null) {
+                                            return fromElement;
+                                        }
+                                        mergeInto(toElement, fromElement, 
mergeArraysByName);
+                                        return toElement;
+                                    }));
+
+            toChildNode.removeAll();
+            toGrouped.forEach((n, e) -> toChildNode.add(e));

Review Comment:
   Nit: `toGrouped.values().forEach(toChildNode::add);`



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to