diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowReconcileExecutor.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowReconcileExecutor.java index 27b5ad45da..33aad99811 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowReconcileExecutor.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowReconcileExecutor.java @@ -84,7 +84,7 @@ private void registerOrDeregisterEventSourceBasedOnActivation(boolean activa if (activationConditionMet) { var eventSource = dependentResourceNode.getDependentResource().eventSource(context.eventSourceRetriever() - .eventSourceContexForDynamicRegistration()); + .eventSourceContextForDynamicRegistration()); var es = eventSource.orElseThrow(); context.eventSourceRetriever() .dynamicallyRegisterEventSource(dependentResourceNode.getName(), es); 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 824c24e276..5ae700cedc 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 @@ -1,10 +1,6 @@ package io.javaoperatorsdk.operator.processing.event; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Set; +import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -233,24 +229,28 @@ public List> getResourceEventSourcesFor(Class d } @Override - public synchronized void dynamicallyRegisterEventSource(String name, EventSource eventSource) { - if (eventSources.existing(name, eventSource) != null) { - return; + public synchronized EventSource dynamicallyRegisterEventSource(String name, + EventSource eventSource) { + var es = eventSources.existing(name, eventSource); + if (es != null) { + return es; } registerEventSource(name, eventSource); eventSource.start(); + return eventSource; } @Override - public synchronized void dynamicallyDeRegisterEventSource(String name) { + public synchronized Optional dynamicallyDeRegisterEventSource(String name) { EventSource es = eventSources.remove(name); if (es != null) { es.stop(); } + return Optional.ofNullable(es); } @Override - public EventSourceContext

eventSourceContexForDynamicRegistration() { + public EventSourceContext

eventSourceContextForDynamicRegistration() { return controller.eventSourceContext(); } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventSourceRetriever.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventSourceRetriever.java index 67f149f5cd..a8e7e24f81 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventSourceRetriever.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventSourceRetriever.java @@ -1,6 +1,7 @@ package io.javaoperatorsdk.operator.processing.event; import java.util.List; +import java.util.Optional; import io.fabric8.kubernetes.api.model.HasMetadata; import io.javaoperatorsdk.operator.api.reconciler.EventSourceContext; @@ -40,8 +41,9 @@ default ResourceEventSource getResourceEventSourceFor(Class depende * * @param name of the event source * @param eventSource to register + * @return the actual event source registered. Might not be the same as the parameter. */ - void dynamicallyRegisterEventSource(String name, EventSource eventSource); + EventSource dynamicallyRegisterEventSource(String name, EventSource eventSource); /** * De-registers (and stops) the {@link EventSource} associated with the specified name. If no such @@ -57,9 +59,10 @@ default ResourceEventSource getResourceEventSourceFor(Class depende *

* * @param name of the event source + * @return the actual event source deregistered if there is one. */ - void dynamicallyDeRegisterEventSource(String name); + Optional dynamicallyDeRegisterEventSource(String name); - EventSourceContext

eventSourceContexForDynamicRegistration(); + EventSourceContext

eventSourceContextForDynamicRegistration(); }