From 6df09b34a5714c10caaef5722e947b751b107dfb Mon Sep 17 00:00:00 2001 From: Chris Laprun Date: Tue, 2 Dec 2025 14:22:07 +0100 Subject: [PATCH 1/2] fix: grammar issue Signed-off-by: Chris Laprun --- .../en/docs/documentation/reconciler.md | 2 +- .../api/config/BaseConfigurationService.java | 6 ++-- .../api/config/ControllerConfiguration.java | 8 ++++++ .../ControllerConfigurationOverrider.java | 19 +++++++++---- .../ResolvedControllerConfiguration.java | 16 +++++------ .../operator/api/reconciler/Context.java | 2 +- .../reconciler/ControllerConfiguration.java | 8 +++++- .../operator/processing/Controller.java | 6 ++-- .../processing/event/EventProcessor.java | 28 +++++++++---------- .../processing/event/EventSourceManager.java | 2 +- .../processing/event/EventSources.java | 4 +-- .../event/ReconciliationDispatcher.java | 14 +++++----- .../event/source/timer/TimerEventSource.java | 10 +++---- .../PeriodicCleanerExpectationManager.java | 2 +- .../operator/processing/ControllerTest.java | 8 +++--- .../processing/event/EventProcessorTest.java | 12 ++++---- .../event/ReconciliationDispatcherTest.java | 4 +-- .../expectation/ExpectationReconciler.java | 2 +- ...TriggerReconcilerOnAllEventReconciler.java | 4 ++- .../SelectiveFinalizerHandlingIT.java | 2 +- .../SelectiveFinalizerHandlingReconciler.java | 2 +- 21 files changed, 93 insertions(+), 68 deletions(-) diff --git a/docs/content/en/docs/documentation/reconciler.md b/docs/content/en/docs/documentation/reconciler.md index c0f40b1e30..5dae8e8ed4 100644 --- a/docs/content/en/docs/documentation/reconciler.md +++ b/docs/content/en/docs/documentation/reconciler.md @@ -239,7 +239,7 @@ However, there are cases when controllers do not strictly follow those patterns, and you don't want to use finalizers. For those cases, you typically want to clean up your caches when the primary resource is deleted. -For such use cases you can set [`triggerReconcilerOnAllEvent`](https://github.com/operator-framework/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/ControllerConfiguration.java#L81) +For such use cases you can set [`triggerReconcilerOnAllEvents`](https://github.com/operator-framework/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/ControllerConfiguration.java#L107) to `true`, as a result, the `reconcile` method will be triggered on ALL events (so also `Delete` events), making it possible to support the above use cases. diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/BaseConfigurationService.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/BaseConfigurationService.java index 18ef8b598c..0a7d3ece04 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/BaseConfigurationService.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/BaseConfigurationService.java @@ -319,8 +319,8 @@ private

ResolvedControllerConfiguration

controllerCon final var dependentFieldManager = fieldManager.equals(CONTROLLER_NAME_AS_FIELD_MANAGER) ? name : fieldManager; - var triggerReconcilerOnAllEvent = - annotation != null && annotation.triggerReconcilerOnAllEvent(); + var triggerReconcilerOnAllEvents = + annotation != null && annotation.triggerReconcilerOnAllEvents(); InformerConfiguration

informerConfig = InformerConfiguration.builder(resourceClass) @@ -342,7 +342,7 @@ private

ResolvedControllerConfiguration

controllerCon dependentFieldManager, this, informerConfig, - triggerReconcilerOnAllEvent); + triggerReconcilerOnAllEvents); } /** diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ControllerConfiguration.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ControllerConfiguration.java index a601092454..8bddc8479e 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ControllerConfiguration.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ControllerConfiguration.java @@ -108,7 +108,15 @@ default String fieldManager() { C getConfigurationFor(DependentResourceSpec spec); + /** + * @deprecated use {@link #triggerReconcilerOnAllEvents()} instead + */ + @Deprecated(forRemoval = true) default boolean triggerReconcilerOnAllEvent() { + return triggerReconcilerOnAllEvents(); + } + + default boolean triggerReconcilerOnAllEvents() { return false; } } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ControllerConfigurationOverrider.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ControllerConfigurationOverrider.java index 4a2d97c6ff..7856654f1e 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ControllerConfigurationOverrider.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ControllerConfigurationOverrider.java @@ -45,7 +45,7 @@ public class ControllerConfigurationOverrider { private Duration reconciliationMaxInterval; private Map configurations; private final InformerConfiguration.Builder config; - private boolean triggerReconcilerOnAllEvent; + private boolean triggerReconcilerOnAllEvents; private ControllerConfigurationOverrider(ControllerConfiguration original) { this.finalizer = original.getFinalizerName(); @@ -58,7 +58,7 @@ private ControllerConfigurationOverrider(ControllerConfiguration original) { this.rateLimiter = original.getRateLimiter(); this.name = original.getName(); this.fieldManager = original.fieldManager(); - this.triggerReconcilerOnAllEvent = original.triggerReconcilerOnAllEvent(); + this.triggerReconcilerOnAllEvents = original.triggerReconcilerOnAllEvents(); } public ControllerConfigurationOverrider withFinalizer(String finalizer) { @@ -171,9 +171,18 @@ public ControllerConfigurationOverrider withFieldManager(String dependentFiel return this; } + /** + * @deprecated use {@link #withTriggerReconcilerOnAllEvents(boolean)} instead + */ + @Deprecated(forRemoval = true) public ControllerConfigurationOverrider withTriggerReconcilerOnAllEvent( - boolean triggerReconcilerOnAllEvent) { - this.triggerReconcilerOnAllEvent = triggerReconcilerOnAllEvent; + boolean triggerReconcilerOnAllEvents) { + return withTriggerReconcilerOnAllEvents(triggerReconcilerOnAllEvents); + } + + public ControllerConfigurationOverrider withTriggerReconcilerOnAllEvents( + boolean triggerReconcilerOnAllEvents) { + this.triggerReconcilerOnAllEvents = triggerReconcilerOnAllEvents; return this; } @@ -221,7 +230,7 @@ public ControllerConfiguration build() { fieldManager, original.getConfigurationService(), config.buildForController(), - triggerReconcilerOnAllEvent, + triggerReconcilerOnAllEvents, original.getWorkflowSpec().orElse(null)); } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ResolvedControllerConfiguration.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ResolvedControllerConfiguration.java index ccb5ab86a8..3e620f8f91 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ResolvedControllerConfiguration.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ResolvedControllerConfiguration.java @@ -44,7 +44,7 @@ public class ResolvedControllerConfiguration

private final Map configurations; private final ConfigurationService configurationService; private final String fieldManager; - private final boolean triggerReconcilerOnAllEvent; + private final boolean triggerReconcilerOnAllEvents; private WorkflowSpec workflowSpec; public ResolvedControllerConfiguration(ControllerConfiguration

other) { @@ -60,7 +60,7 @@ public ResolvedControllerConfiguration(ControllerConfiguration

other) { other.fieldManager(), other.getConfigurationService(), other.getInformerConfig(), - other.triggerReconcilerOnAllEvent(), + other.triggerReconcilerOnAllEvents(), other.getWorkflowSpec().orElse(null)); } @@ -76,7 +76,7 @@ public ResolvedControllerConfiguration( String fieldManager, ConfigurationService configurationService, InformerConfiguration

informerConfig, - boolean triggerReconcilerOnAllEvent, + boolean triggerReconcilerOnAllEvents, WorkflowSpec workflowSpec) { this( name, @@ -90,7 +90,7 @@ public ResolvedControllerConfiguration( fieldManager, configurationService, informerConfig, - triggerReconcilerOnAllEvent); + triggerReconcilerOnAllEvents); setWorkflowSpec(workflowSpec); } @@ -106,7 +106,7 @@ protected ResolvedControllerConfiguration( String fieldManager, ConfigurationService configurationService, InformerConfiguration

informerConfig, - boolean triggerReconcilerOnAllEvent) { + boolean triggerReconcilerOnAllEvents) { this.informerConfig = informerConfig; this.configurationService = configurationService; this.name = ControllerConfiguration.ensureValidName(name, associatedReconcilerClassName); @@ -119,7 +119,7 @@ protected ResolvedControllerConfiguration( this.finalizer = ControllerConfiguration.ensureValidFinalizerName(finalizer, getResourceTypeName()); this.fieldManager = fieldManager; - this.triggerReconcilerOnAllEvent = triggerReconcilerOnAllEvent; + this.triggerReconcilerOnAllEvents = triggerReconcilerOnAllEvents; } protected ResolvedControllerConfiguration( @@ -231,7 +231,7 @@ public String fieldManager() { } @Override - public boolean triggerReconcilerOnAllEvent() { - return triggerReconcilerOnAllEvent; + public boolean triggerReconcilerOnAllEvents() { + return triggerReconcilerOnAllEvents; } } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Context.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Context.java index cc9a2d9776..cc7c865dc5 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Context.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Context.java @@ -91,7 +91,7 @@ default Stream getSecondaryResourcesAsStream(Class expectedType) { /** * To check if the primary resource is already deleted. This value can be true only if you turn on * {@link - * io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration#triggerReconcilerOnAllEvent()} + * io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration#triggerReconcilerOnAllEvents()} * * @return true Delete event received for primary resource * @since 5.2.0 diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/ControllerConfiguration.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/ControllerConfiguration.java index f98471fb27..d305c28824 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/ControllerConfiguration.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/ControllerConfiguration.java @@ -93,10 +93,16 @@ MaxReconciliationInterval maxReconciliationInterval() default */ String fieldManager() default CONTROLLER_NAME_AS_FIELD_MANAGER; + /** + * @deprecated use {@link #triggerReconcilerOnAllEvents()} instead + */ + @Deprecated(forRemoval = true) + boolean triggerReconcilerOnAllEvent() default false; + /** * By settings to true, reconcile method will be triggered on every event, thus even for Delete * event. You cannot use {@link Cleaner} or managed dependent resources in that case. See * documentation for further details. */ - boolean triggerReconcilerOnAllEvent() default false; + boolean triggerReconcilerOnAllEvents() default false; } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/Controller.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/Controller.java index 9a730470d4..bc3a43a9a3 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/Controller.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/Controller.java @@ -77,10 +77,10 @@ public class Controller

private static final String STATUS = "status"; private static final String BOTH = "both"; public static final String CLEANER_NOT_SUPPORTED_ON_ALL_EVENT_ERROR_MESSAGE = - "Cleaner is not supported when triggerReconcilerOnAllEvent enabled."; + "Cleaner is not supported when triggerReconcilerOnAllEvents enabled."; public static final String MANAGED_WORKFLOWS_NOT_SUPPORTED_TRIGGER_RECONCILER_ON_ALL_EVENT_ERROR_MESSAGE = - "Managed workflows are not supported when triggerReconcilerOnAllEvent enabled."; + "Managed workflows are not supported when triggerReconcilerOnAllEvents enabled."; private final Reconciler

reconciler; private final ControllerConfiguration

configuration; @@ -117,7 +117,7 @@ public Controller( explicitWorkflowInvocation = configuration.getWorkflowSpec().map(WorkflowSpec::isExplicitInvocation).orElse(false); - if (configuration.triggerReconcilerOnAllEvent()) { + if (configuration.triggerReconcilerOnAllEvents()) { if (isCleaner) { throw new OperatorException(CLEANER_NOT_SUPPORTED_ON_ALL_EVENT_ERROR_MESSAGE); } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventProcessor.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventProcessor.java index 7a07e1d5d8..3685b509aa 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventProcessor.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventProcessor.java @@ -146,7 +146,7 @@ public synchronized void handleEvent(Event event) { } private void handleMarkedEventForResource(ResourceState state) { - if (state.deleteEventPresent() && !triggerOnAllEvent()) { + if (state.deleteEventPresent() && !triggerOnAllEvents()) { cleanupForDeletedEvent(state.getId()); } else if (!state.processedMarkForDeletionPresent()) { submitReconciliationExecution(state); @@ -181,7 +181,7 @@ private void submitReconciliationExecution(ResourceState state) { state.getRetry(), state.deleteEventPresent(), state.isDeleteFinalStateUnknown()); - state.unMarkEventReceived(triggerOnAllEvent()); + state.unMarkEventReceived(triggerOnAllEvents()); metrics.reconcileCustomResource(latest, state.getRetry(), metricsMetadata); log.debug("Executing events for custom resource. Scope: {}", executionScope); executor.execute(new ReconcilerExecutor(resourceID, executionScope)); @@ -208,7 +208,7 @@ private void submitReconciliationExecution(ResourceState state) { @SuppressWarnings("unchecked") private P getResourceFromState(ResourceState state) { - if (triggerOnAllEvent()) { + if (triggerOnAllEvents()) { log.debug("Getting resource from state for {}", state.getId()); return (P) state.getLastKnownResource(); } else { @@ -239,10 +239,10 @@ private void handleEventMarking(Event event, ResourceState state) { // removed, but also the informers websocket is disconnected and later reconnected. So // meanwhile the resource could be deleted and recreated. In this case we just mark a new // event as below. - state.markEventReceived(triggerOnAllEvent()); + state.markEventReceived(triggerOnAllEvents()); } } else if (!state.deleteEventPresent() && !state.processedMarkForDeletionPresent()) { - state.markEventReceived(triggerOnAllEvent()); + state.markEventReceived(triggerOnAllEvents()); } else if (isTriggerOnAllEventAndDeleteEventPresent(state)) { state.markAdditionalEventAfterDeleteEvent(); } else if (log.isDebugEnabled()) { @@ -286,15 +286,15 @@ synchronized void eventProcessingFinished( // Either way we don't want to retry. if (isRetryConfigured() && postExecutionControl.exceptionDuringExecution() - && (!state.deleteEventPresent() || triggerOnAllEvent())) { + && (!state.deleteEventPresent() || triggerOnAllEvents())) { handleRetryOnException( executionScope, postExecutionControl.getRuntimeException().orElseThrow()); return; } cleanupOnSuccessfulExecution(executionScope); metrics.finishedReconciliation(executionScope.getResource(), metricsMetadata); - if ((triggerOnAllEvent() && executionScope.isDeleteEvent()) - || (!triggerOnAllEvent() && state.deleteEventPresent())) { + if ((triggerOnAllEvents() && executionScope.isDeleteEvent()) + || (!triggerOnAllEvents() && state.deleteEventPresent())) { cleanupForDeletedEvent(executionScope.getResourceID()); } else if (postExecutionControl.isFinalizerRemoved()) { state.markProcessedMarkForDeletion(); @@ -310,7 +310,7 @@ synchronized void eventProcessingFinished( } private boolean isTriggerOnAllEventAndDeleteEventPresent(ResourceState state) { - return triggerOnAllEvent() && state.deleteEventPresent(); + return triggerOnAllEvents() && state.deleteEventPresent(); } /** @@ -370,8 +370,8 @@ private void handleRetryOnException(ExecutionScope

executionScope, Exception var resourceID = state.getId(); boolean eventPresent = state.eventPresent() - || (triggerOnAllEvent() && state.isAdditionalEventPresentAfterDeleteEvent()); - state.markEventReceived(triggerOnAllEvent()); + || (triggerOnAllEvents() && state.isAdditionalEventPresentAfterDeleteEvent()); + state.markEventReceived(triggerOnAllEvents()); retryAwareErrorLogging(state.getRetry(), eventPresent, exception, executionScope); if (eventPresent) { @@ -517,7 +517,7 @@ public void run() { // we try to get the most up-to-date resource from cache var actualResource = cache.get(resourceID); if (actualResource.isEmpty()) { - if (triggerOnAllEvent()) { + if (triggerOnAllEvents()) { log.debug( "Resource not found in the cache, checking for delete event resource: {}", resourceID); @@ -578,7 +578,7 @@ public synchronized boolean isRunning() { } // shortening - private boolean triggerOnAllEvent() { - return controllerConfiguration.triggerReconcilerOnAllEvent(); + private boolean triggerOnAllEvents() { + return controllerConfiguration.triggerReconcilerOnAllEvents(); } } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventSourceManager.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventSourceManager.java index db8f9bd8c5..411fc10e31 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventSourceManager.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventSourceManager.java @@ -55,7 +55,7 @@ public class EventSourceManager

public EventSourceManager(Controller

controller) { this( controller, - new EventSources<>(controller.getConfiguration().triggerReconcilerOnAllEvent())); + new EventSources<>(controller.getConfiguration().triggerReconcilerOnAllEvents())); } EventSourceManager(Controller

controller, EventSources

eventSources) { diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventSources.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventSources.java index 1832fdb14e..b482d26dca 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventSources.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventSources.java @@ -40,9 +40,9 @@ class EventSources

{ private final TimerEventSource

retryAndRescheduleTimerEventSource; private ControllerEventSource

controllerEventSource; - public EventSources(boolean triggerReconcilerOnAllEvent) { + public EventSources(boolean triggerReconcilerOnAllEvents) { retryAndRescheduleTimerEventSource = - new TimerEventSource<>("RetryAndRescheduleTimerEventSource", triggerReconcilerOnAllEvent); + new TimerEventSource<>("RetryAndRescheduleTimerEventSource", triggerReconcilerOnAllEvents); } EventSources() { diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/ReconciliationDispatcher.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/ReconciliationDispatcher.java index 8a1ddb4c5a..da4ae9835a 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/ReconciliationDispatcher.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/ReconciliationDispatcher.java @@ -100,7 +100,7 @@ private PostExecutionControl

handleDispatch(ExecutionScope

executionScope) originalResource.getMetadata().getNamespace()); final var markedForDeletion = originalResource.isMarkedForDeletion(); - if (!triggerOnAllEvent() + if (!triggerOnAllEvents() && markedForDeletion && shouldNotDispatchToCleanupWhenMarkedForDeletion(originalResource)) { log.debug( @@ -118,7 +118,7 @@ && shouldNotDispatchToCleanupWhenMarkedForDeletion(originalResource)) { executionScope.isDeleteFinalStateUnknown()); // checking the cleaner for all-event-mode - if (!triggerOnAllEvent() && markedForDeletion) { + if (!triggerOnAllEvents() && markedForDeletion) { return handleCleanup(resourceForExecution, originalResource, context, executionScope); } else { return handleReconcile(executionScope, resourceForExecution, originalResource, context); @@ -137,7 +137,7 @@ private PostExecutionControl

handleReconcile( P originalResource, Context

context) throws Exception { - if (!triggerOnAllEvent() + if (!triggerOnAllEvents() && controller.useFinalizer() && !originalResource.hasFinalizer(configuration().getFinalizerName())) { /* @@ -329,7 +329,7 @@ private PostExecutionControl

handleCleanup( } DeleteControl deleteControl = controller.cleanup(resourceForExecution, context); final var useFinalizer = controller.useFinalizer(); - if (useFinalizer && !triggerOnAllEvent()) { + if (useFinalizer && !triggerOnAllEvents()) { // note that we don't reschedule here even if instructed. Removing finalizer means that // cleanup is finished, nothing left to be done final var finalizerName = configuration().getFinalizerName(); @@ -477,7 +477,7 @@ public P conflictRetryingPatch( } private void validateExecutionScope(ExecutionScope

executionScope) { - if (!triggerOnAllEvent() + if (!triggerOnAllEvents() && (executionScope.isDeleteEvent() || executionScope.isDeleteFinalStateUnknown())) { throw new OperatorException( "isDeleteEvent or isDeleteFinalStateUnknown cannot be true if not triggerOnAllEvent." @@ -589,7 +589,7 @@ private Resource resource(R resource) { } } - private boolean triggerOnAllEvent() { - return configuration().triggerReconcilerOnAllEvent(); + private boolean triggerOnAllEvents() { + return configuration().triggerReconcilerOnAllEvents(); } } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/timer/TimerEventSource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/timer/TimerEventSource.java index c1f59eecb8..2530c661ab 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/timer/TimerEventSource.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/timer/TimerEventSource.java @@ -37,15 +37,15 @@ public class TimerEventSource extends AbstractEventSource private Timer timer; private final Map onceTasks = new ConcurrentHashMap<>(); - private boolean triggerReconcilerOnAllEvent; + private boolean triggerReconcilerOnAllEvents; public TimerEventSource() { super(Void.class); } - public TimerEventSource(String name, boolean triggerReconcilerOnAllEvent) { + public TimerEventSource(String name, boolean triggerReconcilerOnAllEvents) { super(Void.class, name); - this.triggerReconcilerOnAllEvent = triggerReconcilerOnAllEvent; + this.triggerReconcilerOnAllEvents = triggerReconcilerOnAllEvents; } @SuppressWarnings("unused") @@ -68,9 +68,9 @@ public void scheduleOnce(ResourceID resourceID, long delay) { @Override public void onResourceDeleted(R resource) { - // for triggerReconcilerOnAllEvent the cancelOnceSchedule will be called on + // for triggerReconcilerOnAllEvents the cancelOnceSchedule will be called on // successful delete event processing - if (!triggerReconcilerOnAllEvent) { + if (!triggerReconcilerOnAllEvents) { cancelOnceSchedule(ResourceID.fromResource(resource)); } } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/expectation/PeriodicCleanerExpectationManager.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/expectation/PeriodicCleanerExpectationManager.java index 491a8b3ff4..9350f436e8 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/expectation/PeriodicCleanerExpectationManager.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/expectation/PeriodicCleanerExpectationManager.java @@ -29,7 +29,7 @@ /** * Expectation manager implementation that works without enabling {@link - * ControllerConfiguration#triggerReconcilerOnAllEvent()}. Periodically checks and cleans + * ControllerConfiguration#triggerReconcilerOnAllEvents()}. Periodically checks and cleans * expectations for primary resources which are no longer present in the cache. */ @Experimental(API_MIGHT_CHANGE) diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/ControllerTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/ControllerTest.java index 100aece1af..9eeba7ab1a 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/ControllerTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/ControllerTest.java @@ -96,11 +96,11 @@ void usesFinalizerIfThereIfReconcilerImplementsCleaner() { } @Test - void cleanerNotAllowedWithTriggerOnAllEventEnabled() { + void cleanerNotAllowedWithTriggerOnAllEventsEnabled() { Reconciler reconciler = mock(Reconciler.class, withSettings().extraInterfaces(Cleaner.class)); final var configuration = MockControllerConfiguration.forResource(Secret.class); when(configuration.getConfigurationService()).thenReturn(new BaseConfigurationService()); - when(configuration.triggerReconcilerOnAllEvent()).thenReturn(true); + when(configuration.triggerReconcilerOnAllEvents()).thenReturn(true); var exception = assertThrows( @@ -113,7 +113,7 @@ void cleanerNotAllowedWithTriggerOnAllEventEnabled() { } @Test - void managedWorkflowNotAllowedWithOnAllEventEnabled() { + void managedWorkflowNotAllowedWithOnAllEventsEnabled() { Reconciler reconciler = mock(Reconciler.class); final var configuration = MockControllerConfiguration.forResource(Secret.class); @@ -130,7 +130,7 @@ void managedWorkflowNotAllowedWithOnAllEventEnabled() { var managedWorkflowMock = workflow(true); when(mockManagedWorkflow.resolve(any(), any())).thenReturn(managedWorkflowMock); - when(configuration.triggerReconcilerOnAllEvent()).thenReturn(true); + when(configuration.triggerReconcilerOnAllEvents()).thenReturn(true); var exception = assertThrows( diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/EventProcessorTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/EventProcessorTest.java index 27bac41a3c..ac187d7eb9 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/EventProcessorTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/EventProcessorTest.java @@ -520,7 +520,7 @@ void cleansUpForDeleteEventEvenIfProcessorNotStarted() { } @Test - void triggerOnAllEventProcessesDeleteEvent() { + void triggerOnAllEventProcessesDeleteEvents() { eventProcessor = spy( new EventProcessor( @@ -544,7 +544,7 @@ void triggerOnAllEventProcessesDeleteEvent() { // this is a special corner case that needs special care @Test - void triggerOnAllEventDeleteEventInstantlyAfterEvent() { + void triggerOnAllEventDeleteEventInstantlyAfterEvents() { var reconciliationDispatcherMock = mock(ReconciliationDispatcher.class); when(reconciliationDispatcherMock.handleExecution(any())) .thenReturn(PostExecutionControl.defaultDispatch()); @@ -568,7 +568,7 @@ void triggerOnAllEventDeleteEventInstantlyAfterEvent() { } @Test - void triggerOnAllEventDeleteEventAfterEventProcessed() { + void triggerOnAllEventDeleteEventAfterEventsProcessed() { var reconciliationDispatcherMock = mock(ReconciliationDispatcher.class); when(reconciliationDispatcherMock.handleExecution(any())) .thenReturn(PostExecutionControl.defaultDispatch()); @@ -591,7 +591,7 @@ void triggerOnAllEventDeleteEventAfterEventProcessed() { } @Test - void triggerOnAllEventRetriesDeleteEventError() { + void triggerOnAllEventRetriesDeleteEventsError() { when(eventSourceManagerMock.retryEventSource()).thenReturn(mock(TimerEventSource.class)); eventProcessor = spy( @@ -812,14 +812,14 @@ ControllerConfiguration controllerConfiguration( Retry retry, RateLimiter rateLimiter, ConfigurationService configurationService, - boolean triggerOnAllEvent) { + boolean triggerOnAllEvents) { ControllerConfiguration res = mock(ControllerConfiguration.class); when(res.getName()).thenReturn("Test"); when(res.getRetry()).thenReturn(retry); when(res.getRateLimiter()).thenReturn(rateLimiter); when(res.maxReconciliationInterval()).thenReturn(Optional.of(Duration.ofMillis(1000))); when(res.getConfigurationService()).thenReturn(configurationService); - when(res.triggerReconcilerOnAllEvent()).thenReturn(triggerOnAllEvent); + when(res.triggerReconcilerOnAllEvents()).thenReturn(triggerOnAllEvents); return res; } } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/ReconciliationDispatcherTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/ReconciliationDispatcherTest.java index b0ff06d6b0..cc9df317ae 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/ReconciliationDispatcherTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/ReconciliationDispatcherTest.java @@ -703,7 +703,7 @@ void reSchedulesFromErrorHandler() { } @Test - void isDeleteEventCannotBeTrueIfNotTriggerOnAllEvent() { + void isDeleteEventCannotBeTrueIfNotTriggerOnAllEvents() { assertThrows( OperatorException.class, () -> @@ -712,7 +712,7 @@ void isDeleteEventCannotBeTrueIfNotTriggerOnAllEvent() { } @Test - void isDeleteFinalStateUnknownEventCannotBeTrueIfNotTriggerOnAllEvent() { + void isDeleteFinalStateUnknownEventCannotBeTrueIfNotTriggerOnAllEvents() { assertThrows( OperatorException.class, () -> diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/expectation/ExpectationReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/expectation/ExpectationReconciler.java index 3a57d3effd..01911075b3 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/expectation/ExpectationReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/expectation/ExpectationReconciler.java @@ -39,7 +39,7 @@ import io.javaoperatorsdk.operator.processing.expectation.Expectation; import io.javaoperatorsdk.operator.processing.expectation.ExpectationManager; -@ControllerConfiguration(triggerReconcilerOnAllEvent = true) +@ControllerConfiguration(triggerReconcilerOnAllEvents = true) public class ExpectationReconciler implements Reconciler { public static final String DEPLOYMENT_READY = "Deployment ready"; diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/triggerallevent/eventing/TriggerReconcilerOnAllEventReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/triggerallevent/eventing/TriggerReconcilerOnAllEventReconciler.java index ecdeff858b..0b8c0ff1e6 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/triggerallevent/eventing/TriggerReconcilerOnAllEventReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/triggerallevent/eventing/TriggerReconcilerOnAllEventReconciler.java @@ -26,7 +26,9 @@ import io.javaoperatorsdk.operator.api.reconciler.Reconciler; import io.javaoperatorsdk.operator.api.reconciler.UpdateControl; -@ControllerConfiguration(triggerReconcilerOnAllEvent = true, generationAwareEventProcessing = false) +@ControllerConfiguration( + triggerReconcilerOnAllEvents = true, + generationAwareEventProcessing = false) public class TriggerReconcilerOnAllEventReconciler implements Reconciler { diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/triggerallevent/finalizerhandling/SelectiveFinalizerHandlingIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/triggerallevent/finalizerhandling/SelectiveFinalizerHandlingIT.java index 64140898d5..a86dd7ec9b 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/triggerallevent/finalizerhandling/SelectiveFinalizerHandlingIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/triggerallevent/finalizerhandling/SelectiveFinalizerHandlingIT.java @@ -28,7 +28,7 @@ /** * The test showcases how manage finalizers only on some of the custom resources using - * `triggerReconcilerOnAllEvent` mode. + * `triggerReconcilerOnAllEvents` mode. */ public class SelectiveFinalizerHandlingIT { diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/triggerallevent/finalizerhandling/SelectiveFinalizerHandlingReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/triggerallevent/finalizerhandling/SelectiveFinalizerHandlingReconciler.java index efd7ab2d3b..9b3cd5683f 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/triggerallevent/finalizerhandling/SelectiveFinalizerHandlingReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/triggerallevent/finalizerhandling/SelectiveFinalizerHandlingReconciler.java @@ -21,7 +21,7 @@ import io.javaoperatorsdk.operator.api.reconciler.Reconciler; import io.javaoperatorsdk.operator.api.reconciler.UpdateControl; -@ControllerConfiguration(triggerReconcilerOnAllEvent = true) +@ControllerConfiguration(triggerReconcilerOnAllEvents = true) public class SelectiveFinalizerHandlingReconciler implements Reconciler { From be1436a59702b2c922f6b6182de10c775a502a34 Mon Sep 17 00:00:00 2001 From: Chris Laprun Date: Tue, 2 Dec 2025 15:21:40 +0100 Subject: [PATCH 2/2] fix: blog [skip ci] Signed-off-by: Chris Laprun --- docs/content/en/blog/releases/v5-2-release.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/content/en/blog/releases/v5-2-release.md b/docs/content/en/blog/releases/v5-2-release.md index 85b5b6992d..6dabaab9c8 100644 --- a/docs/content/en/blog/releases/v5-2-release.md +++ b/docs/content/en/blog/releases/v5-2-release.md @@ -44,7 +44,7 @@ See the [migration guide](/docs/migration/v5-2-migration) for detailed migration ### Trigger Reconciliation on All Events Version 5.2 introduces a new execution mode that provides finer control over when reconciliation occurs. By setting -[`triggerReconcilerOnAllEvent`](https://github.com/operator-framework/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/ControllerConfiguration.java) +[`triggerReconcilerOnAllEvents`](https://github.com/operator-framework/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/ControllerConfiguration.java) to `true`, your `reconcile` method will be called for **every** event, including `Delete` events. This is particularly useful when: @@ -61,7 +61,7 @@ When enabled: Example: ```java -@ControllerConfiguration(triggerReconcilerOnAllEvent = true) +@ControllerConfiguration(triggerReconcilerOnAllEvents = true) public class MyReconciler implements Reconciler { @Override