Skip to content

Commit 5955ecd

Browse files
authored
feature: update observed generation on updateResource (#731)
1 parent 02e9171 commit 5955ecd

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
@@ -151,6 +151,9 @@ private PostExecutionControl<R> reconcileExecution(ExecutionScope<R> executionSc
151151
updatedCustomResource = updateStatusGenerationAware(updateControl.getResource());
152152
} else if (updateControl.isUpdateResource()) {
153153
updatedCustomResource = updateCustomResource(updateControl.getResource());
154+
if (shouldUpdateObservedGenerationAutomatically(updatedCustomResource)) {
155+
updatedCustomResource = updateStatusGenerationAware(originalResource);
156+
}
154157
} else if (updateControl.isNoUpdate()
155158
&& shouldUpdateObservedGenerationAutomatically(resourceForExecution)) {
156159
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
@@ -66,7 +66,6 @@ public <R extends HasMetadata> R clone(R object) {
6666
});
6767
when(reconciler.cleanup(eq(customResource), any()))
6868
.thenReturn(DeleteControl.defaultDelete());
69-
when(customResourceFacade.replaceWithLock(any())).thenReturn(null);
7069
Controller<R> controller =
7170
new Controller<>(reconciler, configuration, null);
7271

@@ -350,6 +349,27 @@ void updatesObservedGenerationOnNoUpdateUpdateControl() {
350349
.isEqualTo(1L);
351350
}
352351

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

0 commit comments

Comments
 (0)