Skip to content

Commit 180c174

Browse files
metacosmcsviri
authored andcommitted
refactor: simplify
Signed-off-by: Chris Laprun <claprun@redhat.com>
1 parent 7152fc8 commit 180c174

File tree

2 files changed

+37
-56
lines changed

2 files changed

+37
-56
lines changed

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

Lines changed: 31 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,7 @@
2828
import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
2929
import io.javaoperatorsdk.operator.processing.Controller;
3030

31-
import static io.javaoperatorsdk.operator.processing.KubernetesResourceUtils.getName;
32-
import static io.javaoperatorsdk.operator.processing.KubernetesResourceUtils.getUID;
33-
import static io.javaoperatorsdk.operator.processing.KubernetesResourceUtils.getVersion;
31+
import static io.javaoperatorsdk.operator.processing.KubernetesResourceUtils.*;
3432

3533
/**
3634
* Handles calls and results of a Reconciler and finalizer related logic
@@ -48,8 +46,7 @@ class ReconciliationDispatcher<P extends HasMetadata> {
4846
private final boolean retryConfigurationHasZeroAttempts;
4947
private final Cloner cloner;
5048

51-
ReconciliationDispatcher(Controller<P> controller,
52-
CustomResourceFacade<P> customResourceFacade) {
49+
ReconciliationDispatcher(Controller<P> controller, CustomResourceFacade<P> customResourceFacade) {
5350
this.controller = controller;
5451
this.customResourceFacade = customResourceFacade;
5552
this.cloner = controller.getConfiguration().getConfigurationService().getResourceCloner();
@@ -59,7 +56,8 @@ class ReconciliationDispatcher<P extends HasMetadata> {
5956
}
6057

6158
public ReconciliationDispatcher(Controller<P> controller) {
62-
this(controller, new CustomResourceFacade<>(controller.getCRClient()));
59+
this(controller,
60+
new CustomResourceFacade<>(controller.getCRClient(), controller.getConfiguration()));
6361
}
6462

6563
public PostExecutionControl<P> handleExecution(ExecutionScope<P> executionScope) {
@@ -141,33 +139,24 @@ private PostExecutionControl<P> reconcileExecution(ExecutionScope<P> executionSc
141139

142140
UpdateControl<P> updateControl = controller.reconcile(resourceForExecution, context);
143141
P updatedCustomResource = null;
142+
final var toUpdate =
143+
updateControl.isNoUpdate() ? originalResource : updateControl.getResource();
144144
if (updateControl.isUpdateResourceAndStatus()) {
145-
updatedCustomResource =
146-
updateCustomResource(updateControl.getResource());
147-
updateControl
148-
.getResource()
145+
updatedCustomResource = updateCustomResource(toUpdate);
146+
toUpdate
149147
.getMetadata()
150148
.setResourceVersion(updatedCustomResource.getMetadata().getResourceVersion());
151-
updatedCustomResource =
152-
updateStatusGenerationAware(updateControl.getResource(), originalResource,
153-
updateControl.isPatchStatus(), context);
154-
} else if (updateControl.isUpdateStatus()) {
155-
updatedCustomResource =
156-
updateStatusGenerationAware(updateControl.getResource(), originalResource,
157-
updateControl.isPatchStatus(), context);
158149
} else if (updateControl.isUpdateResource()) {
150+
updatedCustomResource = updateCustomResource(toUpdate);
151+
}
152+
153+
// check if status also needs to be updated
154+
final var updateObservedGeneration = updateControl.isNoUpdate() ?
155+
shouldUpdateObservedGenerationAutomatically(resourceForExecution) :
156+
shouldUpdateObservedGenerationAutomatically(updatedCustomResource);
157+
if (updateControl.isUpdateResourceAndStatus() || updateControl.isUpdateStatus() || updateObservedGeneration) {
159158
updatedCustomResource =
160-
updateCustomResource(updateControl.getResource());
161-
if (shouldUpdateObservedGenerationAutomatically(updatedCustomResource)) {
162-
updatedCustomResource =
163-
updateStatusGenerationAware(updateControl.getResource(), originalResource,
164-
updateControl.isPatchStatus(), context);
165-
}
166-
} else if (updateControl.isNoUpdate()
167-
&& shouldUpdateObservedGenerationAutomatically(resourceForExecution)) {
168-
updatedCustomResource =
169-
updateStatusGenerationAware(originalResource, originalResource,
170-
updateControl.isPatchStatus(), context);
159+
updateStatusGenerationAware(toUpdate, originalResource, updateControl.isPatchStatus());
171160
}
172161
return createPostExecutionControl(updatedCustomResource, updateControl);
173162
}
@@ -198,8 +187,7 @@ public boolean isLastAttempt() {
198187
P updatedResource = null;
199188
if (errorStatusUpdateControl.getResource().isPresent()) {
200189
updatedResource = errorStatusUpdateControl.isPatch() ? customResourceFacade
201-
.patchStatus(errorStatusUpdateControl.getResource().orElseThrow(), originalResource,
202-
context)
190+
.patchStatus(errorStatusUpdateControl.getResource().orElseThrow(), originalResource)
203191
: customResourceFacade
204192
.updateStatus(errorStatusUpdateControl.getResource().orElseThrow());
205193
}
@@ -227,11 +215,10 @@ private boolean isErrorStatusHandlerPresent() {
227215
return controller.getReconciler() instanceof ErrorStatusHandler;
228216
}
229217

230-
private P updateStatusGenerationAware(P resource, P originalResource, boolean patch,
231-
Context<P> context) {
218+
private P updateStatusGenerationAware(P resource, P originalResource, boolean patch) {
232219
updateStatusObservedGenerationIfRequired(resource);
233220
if (patch) {
234-
return customResourceFacade.patchStatus(resource, originalResource, context);
221+
return customResourceFacade.patchStatus(resource, originalResource);
235222
} else {
236223
return customResourceFacade.updateStatus(resource);
237224
}
@@ -384,10 +371,16 @@ public P conflictRetryingUpdate(P resource, Function<P, Boolean> modificationFun
384371
static class CustomResourceFacade<R extends HasMetadata> {
385372

386373
private final MixedOperation<R, KubernetesResourceList<R>, Resource<R>> resourceOperation;
374+
private final boolean useSSAToUpdateStatus;
375+
private final String fieldManager;
387376

388377
public CustomResourceFacade(
389-
MixedOperation<R, KubernetesResourceList<R>, Resource<R>> resourceOperation) {
378+
MixedOperation<R, KubernetesResourceList<R>, Resource<R>> resourceOperation,
379+
ControllerConfiguration<R> configuration) {
390380
this.resourceOperation = resourceOperation;
381+
this.useSSAToUpdateStatus =
382+
configuration.getConfigurationService().useSSAForResourceStatusPatch();
383+
this.fieldManager = configuration.fieldManager();
391384
}
392385

393386
public R getResource(String namespace, String name) {
@@ -416,23 +409,21 @@ public R updateStatus(R resource) {
416409
.updateStatus();
417410
}
418411

419-
public R patchStatus(R resource, R originalResource, Context<?> context) {
420-
var useSSA = context.getControllerConfiguration().getConfigurationService()
421-
.useSSAForResourceStatusPatch();
422-
log.trace("Patching status for resource: {} with ssa: {}", resource, useSSA);
412+
public R patchStatus(R resource, R originalResource) {
413+
log.trace("Patching status for resource: {} with ssa: {}", resource, useSSAToUpdateStatus);
423414
String resourceVersion = resource.getMetadata().getResourceVersion();
424415
// don't do optimistic locking on patch
425416
originalResource.getMetadata().setResourceVersion(null);
426417
resource.getMetadata().setResourceVersion(null);
427418
try {
428-
if (useSSA) {
419+
if (useSSAToUpdateStatus) {
429420
var managedFields = resource.getMetadata().getManagedFields();
430421
try {
431422

432423
resource.getMetadata().setManagedFields(Collections.emptyList());
433424
var res = resource(resource);
434425
return res.subresource("status").patch(new PatchContext.Builder()
435-
.withFieldManager(context.getControllerConfiguration().fieldManager())
426+
.withFieldManager(fieldManager)
436427
.withForce(true)
437428
.withPatchType(PatchType.SERVER_SIDE_APPLY)
438429
.build());

operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/ReconciliationDispatcherTest.java

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -43,19 +43,9 @@
4343
import static io.javaoperatorsdk.operator.TestUtils.markForDeletion;
4444
import static io.javaoperatorsdk.operator.processing.event.ReconciliationDispatcher.MAX_UPDATE_RETRY;
4545
import static org.assertj.core.api.Assertions.assertThat;
46-
import static org.junit.jupiter.api.Assertions.assertEquals;
47-
import static org.junit.jupiter.api.Assertions.assertFalse;
48-
import static org.junit.jupiter.api.Assertions.assertTrue;
49-
import static org.junit.jupiter.api.Assertions.fail;
46+
import static org.junit.jupiter.api.Assertions.*;
5047
import static org.mockito.ArgumentMatchers.argThat;
51-
import static org.mockito.Mockito.any;
52-
import static org.mockito.Mockito.eq;
53-
import static org.mockito.Mockito.mock;
54-
import static org.mockito.Mockito.never;
55-
import static org.mockito.Mockito.spy;
56-
import static org.mockito.Mockito.times;
57-
import static org.mockito.Mockito.verify;
58-
import static org.mockito.Mockito.when;
48+
import static org.mockito.Mockito.*;
5949

6050
@SuppressWarnings({"unchecked", "rawtypes"})
6151
class ReconciliationDispatcherTest {
@@ -158,7 +148,7 @@ void updatesOnlyStatusSubResourceIfFinalizerSet() {
158148

159149
reconciliationDispatcher.handleExecution(executionScopeWithCREvent(testCustomResource));
160150

161-
verify(customResourceFacade, times(1)).patchStatus(eq(testCustomResource), any(), any());
151+
verify(customResourceFacade, times(1)).patchStatus(eq(testCustomResource), any());
162152
verify(customResourceFacade, never()).updateResource(any());
163153
}
164154

@@ -184,7 +174,7 @@ void patchesStatus() {
184174

185175
reconciliationDispatcher.handleExecution(executionScopeWithCREvent(testCustomResource));
186176

187-
verify(customResourceFacade, times(1)).patchStatus(eq(testCustomResource), any(), any());
177+
verify(customResourceFacade, times(1)).patchStatus(eq(testCustomResource), any());
188178
verify(customResourceFacade, never()).updateStatus(any());
189179
verify(customResourceFacade, never()).updateResource(any());
190180
}
@@ -456,7 +446,7 @@ void setObservedGenerationForStatusIfNeeded() throws Exception {
456446

457447
when(reconciler.reconcile(any(), any()))
458448
.thenReturn(UpdateControl.patchStatus(observedGenResource));
459-
when(facade.patchStatus(eq(observedGenResource), any(), any())).thenReturn(observedGenResource);
449+
when(facade.patchStatus(eq(observedGenResource), any())).thenReturn(observedGenResource);
460450

461451
PostExecutionControl<ObservedGenCustomResource> control = dispatcher.handleExecution(
462452
executionScopeWithCREvent(observedGenResource));
@@ -609,7 +599,7 @@ void errorStatusHandlerCanPatchResource() {
609599
reconciliationDispatcher.handleExecution(
610600
new ExecutionScope(null).setResource(testCustomResource));
611601

612-
verify(customResourceFacade, times(1)).patchStatus(eq(testCustomResource), any(), any());
602+
verify(customResourceFacade, times(1)).patchStatus(eq(testCustomResource), any());
613603
verify(((ErrorStatusHandler) reconciler), times(1)).updateErrorStatus(eq(testCustomResource),
614604
any(), any());
615605
}

0 commit comments

Comments
 (0)