Skip to content

Commit 07f3053

Browse files
committed
feature: update observed generation on updateResource
1 parent 3982317 commit 07f3053

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,9 @@ private PostExecutionControl<R> reconcileExecution(ExecutionScope<R> executionSc
157157
updatedCustomResource = updateStatusGenerationAware(updateControl.getResource());
158158
} else if (updateControl.isUpdateResource()) {
159159
updatedCustomResource = updateCustomResource(updateControl.getResource());
160+
if (shouldUpdateObservedGenerationAutomatically(updatedCustomResource)) {
161+
updatedCustomResource = updateStatusGenerationAware(originalResource);
162+
}
160163
} else if (updateControl.isNoUpdate()
161164
&& shouldUpdateObservedGenerationAutomatically(resourceForExecution)) {
162165
updatedCustomResource = updateStatusGenerationAware(originalResource);

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

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@ private <R extends HasMetadata> ReconciliationDispatcher<R> init(R customResourc
6161
.thenReturn(UpdateControl.updateResource(customResource));
6262
when(reconciler.cleanup(eq(customResource), any()))
6363
.thenReturn(DeleteControl.defaultDelete());
64-
when(customResourceFacade.replaceWithLock(any())).thenReturn(null);
6564
Controller<R> controller =
6665
new Controller<>(reconciler, configuration, null);
6766

@@ -345,6 +344,27 @@ void updatesObservedGenerationOnNoUpdateUpdateControl() {
345344
.isEqualTo(1L);
346345
}
347346

347+
@Test
348+
void updateObservedGenerationOnCustomResourceUpdate() {
349+
var observedGenResource = createObservedGenCustomResource();
350+
351+
Reconciler<ObservedGenCustomResource> reconciler = mock(Reconciler.class);
352+
ControllerConfiguration<ObservedGenCustomResource> config =
353+
mock(ControllerConfiguration.class);
354+
CustomResourceFacade<ObservedGenCustomResource> facade = mock(CustomResourceFacade.class);
355+
when(config.isGenerationAware()).thenReturn(true);
356+
when(reconciler.reconcile(any(), any()))
357+
.thenReturn(UpdateControl.updateResource(observedGenResource));
358+
when(facade.replaceWithLock(any())).thenReturn(observedGenResource);
359+
when(facade.updateStatus(observedGenResource)).thenReturn(observedGenResource);
360+
var dispatcher = init(observedGenResource, reconciler, config, facade);
361+
362+
PostExecutionControl<ObservedGenCustomResource> control = dispatcher.handleExecution(
363+
executionScopeWithCREvent(observedGenResource));
364+
assertThat(control.getUpdatedCustomResource().get().getStatus().getObservedGeneration())
365+
.isEqualTo(1L);
366+
}
367+
348368
@Test
349369
void callErrorStatusHandlerIfImplemented() {
350370
testCustomResource.addFinalizer(DEFAULT_FINALIZER);

0 commit comments

Comments
 (0)