Skip to content

Commit 82ea869

Browse files
committed
cloning resource for patch status
Signed-off-by: Attila Mészáros <[email protected]>
1 parent 33650e9 commit 82ea869

File tree

1 file changed

+10
-6
lines changed

1 file changed

+10
-6
lines changed

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/ReconciliationDispatcher.java

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,8 @@ class ReconciliationDispatcher<P extends HasMetadata> {
5858

5959
public ReconciliationDispatcher(Controller<P> controller) {
6060
this(controller,
61-
new CustomResourceFacade<>(controller.getCRClient(), controller.getConfiguration()));
61+
new CustomResourceFacade<>(controller.getCRClient(), controller.getConfiguration(),
62+
controller.getConfiguration().getConfigurationService().getResourceCloner()));
6263
}
6364

6465
public PostExecutionControl<P> handleExecution(ExecutionScope<P> executionScope) {
@@ -364,14 +365,16 @@ static class CustomResourceFacade<R extends HasMetadata> {
364365
private final MixedOperation<R, KubernetesResourceList<R>, Resource<R>> resourceOperation;
365366
private final boolean useSSA;
366367
private final String fieldManager;
368+
private final Cloner cloner;
367369

368370
public CustomResourceFacade(
369-
MixedOperation<R, KubernetesResourceList<R>, Resource<R>> resourceOperation,
370-
ControllerConfiguration<R> configuration) {
371+
MixedOperation<R, KubernetesResourceList<R>, Resource<R>> resourceOperation,
372+
ControllerConfiguration<R> configuration, Cloner cloner) {
371373
this.resourceOperation = resourceOperation;
372374
this.useSSA =
373375
configuration.getConfigurationService().useSSAToPatchPrimaryResource();
374376
this.fieldManager = configuration.fieldManager();
377+
this.cloner = cloner;
375378
}
376379

377380
public R getResource(String namespace, String name) {
@@ -422,14 +425,15 @@ public R patchStatus(R resource, R originalResource) {
422425

423426
private R editStatus(R resource, R originalResource) {
424427
String resourceVersion = resource.getMetadata().getResourceVersion();
428+
R clonedOriginal = cloner.clone(originalResource);
425429
try {
426-
originalResource.getMetadata().setResourceVersion(null);
430+
clonedOriginal.getMetadata().setResourceVersion(null);
427431
resource.getMetadata().setResourceVersion(null);
428-
var res = resource(originalResource);
432+
var res = resource(clonedOriginal);
429433
return res.editStatus(r -> resource);
430434
} finally {
431435
// restore initial resource version
432-
originalResource.getMetadata().setResourceVersion(resourceVersion);
436+
clonedOriginal.getMetadata().setResourceVersion(resourceVersion);
433437
resource.getMetadata().setResourceVersion(resourceVersion);
434438
}
435439
}

0 commit comments

Comments
 (0)