diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/updatermatcher/GenericResourceUpdaterMatcher.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/updatermatcher/GenericResourceUpdaterMatcher.java index 2a5bae03b9..43d0b2fedf 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/updatermatcher/GenericResourceUpdaterMatcher.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/updatermatcher/GenericResourceUpdaterMatcher.java @@ -30,6 +30,8 @@ public R updateResource(R actual, R desired, Context context) { Map actualMap = kubernetesSerialization.convertValue(actual, Map.class); Map desiredMap = kubernetesSerialization.convertValue(desired, Map.class); // replace all top level fields from actual with desired, but merge metadata separately + // note that this ensures that `resourceVersion` is present, therefore optimistic + // locking will happen on server side var metadata = actualMap.remove(METADATA); actualMap.replaceAll((k, v) -> desiredMap.get(k)); actualMap.putAll(desiredMap);