|
1 | 1 | package io.javaoperatorsdk.operator.processing;
|
2 | 2 |
|
3 |
| -import java.util.*; |
| 3 | +import java.util.ArrayList; |
| 4 | +import java.util.HashMap; |
| 5 | +import java.util.List; |
| 6 | +import java.util.Map; |
| 7 | +import java.util.Optional; |
| 8 | +import java.util.Set; |
4 | 9 |
|
5 | 10 | import org.slf4j.Logger;
|
6 | 11 | import org.slf4j.LoggerFactory;
|
|
18 | 23 | import io.javaoperatorsdk.operator.RegisteredController;
|
19 | 24 | import io.javaoperatorsdk.operator.api.config.ControllerConfiguration;
|
20 | 25 | import io.javaoperatorsdk.operator.api.config.ExecutorServiceManager;
|
| 26 | +import io.javaoperatorsdk.operator.api.config.workflow.WorkflowSpec; |
21 | 27 | import io.javaoperatorsdk.operator.api.monitoring.Metrics;
|
22 | 28 | import io.javaoperatorsdk.operator.api.monitoring.Metrics.ControllerExecution;
|
23 |
| -import io.javaoperatorsdk.operator.api.reconciler.*; |
| 29 | +import io.javaoperatorsdk.operator.api.reconciler.Cleaner; |
| 30 | +import io.javaoperatorsdk.operator.api.reconciler.Constants; |
| 31 | +import io.javaoperatorsdk.operator.api.reconciler.Context; |
| 32 | +import io.javaoperatorsdk.operator.api.reconciler.ContextInitializer; |
| 33 | +import io.javaoperatorsdk.operator.api.reconciler.DeleteControl; |
| 34 | +import io.javaoperatorsdk.operator.api.reconciler.EventSourceContext; |
| 35 | +import io.javaoperatorsdk.operator.api.reconciler.Ignore; |
| 36 | +import io.javaoperatorsdk.operator.api.reconciler.Reconciler; |
| 37 | +import io.javaoperatorsdk.operator.api.reconciler.UpdateControl; |
24 | 38 | import io.javaoperatorsdk.operator.api.reconciler.dependent.EventSourceNotFoundException;
|
25 | 39 | import io.javaoperatorsdk.operator.api.reconciler.dependent.EventSourceProvider;
|
26 | 40 | import io.javaoperatorsdk.operator.api.reconciler.dependent.EventSourceReferencer;
|
@@ -129,9 +143,11 @@ public Map<String, Object> metadata() {
|
129 | 143 | @Override
|
130 | 144 | public UpdateControl<P> execute() throws Exception {
|
131 | 145 | initContextIfNeeded(resource, context);
|
132 |
| - if (!managedWorkflow.isEmpty()) { |
133 |
| - managedWorkflow.reconcile(resource, context); |
134 |
| - } |
| 146 | + configuration.getWorkflowSpec().ifPresent(ws -> { |
| 147 | + if (!managedWorkflow.isEmpty() && !isWorkflowExplicitInvocation()) { |
| 148 | + managedWorkflow.reconcile(resource, context); |
| 149 | + } |
| 150 | + }); |
135 | 151 | return reconciler.reconcile(resource, context);
|
136 | 152 | }
|
137 | 153 | });
|
@@ -171,9 +187,12 @@ public Map<String, Object> metadata() {
|
171 | 187 | public DeleteControl execute() {
|
172 | 188 | initContextIfNeeded(resource, context);
|
173 | 189 | WorkflowCleanupResult workflowCleanupResult = null;
|
174 |
| - if (managedWorkflow.hasCleaner()) { |
| 190 | + |
| 191 | + // The cleanup is called also when explicit invocation is true, but the cleaner is not implemented |
| 192 | + if (managedWorkflow.hasCleaner() || !isWorkflowExplicitInvocation()) { |
175 | 193 | workflowCleanupResult = managedWorkflow.cleanup(resource, context);
|
176 | 194 | }
|
| 195 | + |
177 | 196 | if (isCleaner) {
|
178 | 197 | var cleanupResult = ((Cleaner<P>) reconciler).cleanup(resource, context);
|
179 | 198 | if (!cleanupResult.isRemoveFinalizer()) {
|
@@ -430,4 +449,32 @@ public ExecutorServiceManager getExecutorServiceManager() {
|
430 | 449 | public EventSourceContext<P> eventSourceContext() {
|
431 | 450 | return eventSourceContext;
|
432 | 451 | }
|
| 452 | + |
| 453 | + public void reconcileManagedWorkflow(P primary, Context<P> context) { |
| 454 | + if (!managedWorkflow.isEmpty()) { |
| 455 | + var res = managedWorkflow.reconcile(primary, context); |
| 456 | + ((DefaultManagedWorkflowAndDependentResourceContext) context |
| 457 | + .managedWorkflowAndDependentResourceContext()) |
| 458 | + .setWorkflowExecutionResult(res); |
| 459 | + res.throwAggregateExceptionIfErrorsPresent(); |
| 460 | + } |
| 461 | + } |
| 462 | + |
| 463 | + public WorkflowCleanupResult cleanupManagedWorkflow(P resource, Context<P> context) { |
| 464 | + if (managedWorkflow.hasCleaner()) { |
| 465 | + var workflowCleanupResult = managedWorkflow.cleanup(resource, context); |
| 466 | + ((DefaultManagedWorkflowAndDependentResourceContext) context |
| 467 | + .managedWorkflowAndDependentResourceContext()) |
| 468 | + .setWorkflowCleanupResult(workflowCleanupResult); |
| 469 | + workflowCleanupResult.throwAggregateExceptionIfErrorsPresent(); |
| 470 | + return workflowCleanupResult; |
| 471 | + } else { |
| 472 | + return null; |
| 473 | + } |
| 474 | + } |
| 475 | + |
| 476 | + public boolean isWorkflowExplicitInvocation() { |
| 477 | + return configuration.getWorkflowSpec().map(WorkflowSpec::isExplicitInvocation) |
| 478 | + .orElse(false); |
| 479 | + } |
433 | 480 | }
|
0 commit comments