Skip to content

Commit 47ef983

Browse files
committed
progress
Signed-off-by: Attila Mészáros <csviri@gmail.com>
1 parent f36e10c commit 47ef983

File tree

4 files changed

+43
-3
lines changed

4 files changed

+43
-3
lines changed

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ public class Controller<P extends HasMetadata>
7676
private final GroupVersionKind associatedGVK;
7777
private final EventProcessor<P> eventProcessor;
7878
private final ControllerHealthInfo controllerHealthInfo;
79+
private final EventSourceContext<P> eventSourceContext;
7980

8081
public Controller(Reconciler<P> reconciler,
8182
ControllerConfiguration<P> configuration,
@@ -98,9 +99,9 @@ public Controller(Reconciler<P> reconciler,
9899
eventProcessor = new EventProcessor<>(eventSourceManager, configurationService);
99100
eventSourceManager.postProcessDefaultEventSourcesAfterProcessorInitializer();
100101
controllerHealthInfo = new ControllerHealthInfo(eventSourceManager);
101-
final var context = new EventSourceContext<>(
102+
eventSourceContext = new EventSourceContext<>(
102103
eventSourceManager.getControllerResourceEventSource(), configuration, kubernetesClient);
103-
initAndRegisterEventSources(context);
104+
initAndRegisterEventSources(eventSourceContext);
104105
configurationService.getMetrics().controllerRegistered(this);
105106
}
106107

@@ -440,4 +441,8 @@ public EventProcessor<P> getEventProcessor() {
440441
public ExecutorServiceManager getExecutorServiceManager() {
441442
return getConfiguration().getConfigurationService().getExecutorServiceManager();
442443
}
444+
445+
public EventSourceContext<P> eventSourceContext() {
446+
return eventSourceContext;
447+
}
443448
}

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowReconcileExecutor.java

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,38 @@ private synchronized <R> void handleReconcile(DependentResourceNode<R, P> depend
6464

6565
boolean reconcileConditionMet = isConditionMet(dependentResourceNode.getReconcilePrecondition(),
6666
dependentResourceNode.getDependentResource());
67-
if (!reconcileConditionMet) {
67+
boolean activationConditionMet = isConditionMet(dependentResourceNode.getActivationCondition(),
68+
dependentResourceNode.getDependentResource());
69+
70+
registerEventSourceForActivationCondition(activationConditionMet, dependentResourceNode);
71+
72+
if (!reconcileConditionMet || !activationConditionMet) {
6873
handleReconcileConditionNotMet(dependentResourceNode);
6974
} else {
7075
submit(dependentResourceNode, new NodeReconcileExecutor<>(dependentResourceNode), RECONCILE);
7176
}
7277
}
7378

79+
private <R> void registerEventSourceForActivationCondition(boolean activationConditionMet,
80+
DependentResourceNode<R, P> dependentResourceNode) {
81+
if (dependentResourceNode.getActivationCondition().isPresent()) {
82+
if (activationConditionMet) {
83+
// todo create issue for v5 to return name also from DependentResource.eventSource
84+
var eventSource =
85+
dependentResourceNode.getDependentResource().eventSource(context.eventSourceRetriever()
86+
.eventSourceContexForDynamicRegistration());
87+
88+
eventSource.ifPresent(es -> {
89+
// todo check if event source with the name not exists yet, if does do not register.
90+
context.eventSourceRetriever()
91+
.dynamicallyRegisterEventSource(dependentResourceNode.getName(), es);
92+
});
93+
} else {
94+
// todo deregister event source
95+
}
96+
}
97+
}
98+
7499
private synchronized void handleDelete(DependentResourceNode dependentResourceNode) {
75100
log.debug("Submitting for delete: {}", dependentResourceNode);
76101

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import io.javaoperatorsdk.operator.OperatorException;
1818
import io.javaoperatorsdk.operator.api.config.ExecutorServiceManager;
1919
import io.javaoperatorsdk.operator.api.config.NamespaceChangeable;
20+
import io.javaoperatorsdk.operator.api.reconciler.EventSourceContext;
2021
import io.javaoperatorsdk.operator.api.reconciler.EventSourceInitializer;
2122
import io.javaoperatorsdk.operator.processing.Controller;
2223
import io.javaoperatorsdk.operator.processing.LifecycleAware;
@@ -242,6 +243,11 @@ public void dynamicallyDeRegisterEventSource(String name) {
242243
// todo
243244
}
244245

246+
@Override
247+
public EventSourceContext<P> eventSourceContexForDynamicRegistration() {
248+
return controller.eventSourceContext();
249+
}
250+
245251
/**
246252
* @deprecated Use {@link #getResourceEventSourceFor(Class)} instead
247253
*

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.util.List;
44

55
import io.fabric8.kubernetes.api.model.HasMetadata;
6+
import io.javaoperatorsdk.operator.api.reconciler.EventSourceContext;
67
import io.javaoperatorsdk.operator.processing.event.source.EventSource;
78
import io.javaoperatorsdk.operator.processing.event.source.ResourceEventSource;
89

@@ -21,4 +22,7 @@ default <R> ResourceEventSource<R, P> getResourceEventSourceFor(Class<R> depende
2122
void dynamicallyRegisterEventSource(String name, EventSource eventSource);
2223

2324
void dynamicallyDeRegisterEventSource(String name);
25+
26+
EventSourceContext<P> eventSourceContexForDynamicRegistration();
27+
2428
}

0 commit comments

Comments
 (0)