Skip to content

Commit bb1776e

Browse files
committed
fix: managed workflow result is available even when exception is thrown
Fixes #2551 Signed-off-by: Chris Laprun <[email protected]>
1 parent 41463e1 commit bb1776e

File tree

2 files changed

+29
-5
lines changed

2 files changed

+29
-5
lines changed

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

+6-1
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import io.javaoperatorsdk.operator.api.reconciler.dependent.managed.DefaultManagedDependentResourceContext;
4242
import io.javaoperatorsdk.operator.health.ControllerHealthInfo;
4343
import io.javaoperatorsdk.operator.processing.dependent.workflow.Workflow;
44+
import io.javaoperatorsdk.operator.processing.dependent.workflow.WorkflowBuilder;
4445
import io.javaoperatorsdk.operator.processing.dependent.workflow.WorkflowCleanupResult;
4546
import io.javaoperatorsdk.operator.processing.event.EventProcessor;
4647
import io.javaoperatorsdk.operator.processing.event.EventSourceManager;
@@ -93,7 +94,11 @@ public Controller(Reconciler<P> reconciler,
9394
isCleaner = reconciler instanceof Cleaner;
9495

9596
final var managed = configurationService.getWorkflowFactory().workflowFor(configuration);
96-
managedWorkflow = managed.resolve(kubernetesClient, configuration);
97+
// wrap original wrapper so that we can properly set the result in case it's throwing an
98+
// exception
99+
final Workflow workflow = managed.resolve(kubernetesClient, configuration);
100+
managedWorkflow = WorkflowBuilder.from(workflow)
101+
.withThrowExceptionFurther(false).build();
97102

98103
eventSourceManager = new EventSourceManager<>(this);
99104
eventProcessor = new EventProcessor<>(eventSourceManager, configurationService);

Diff for: operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowBuilder.java

+23-4
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import java.util.HashSet;
66
import java.util.Map;
77
import java.util.Set;
8+
import java.util.stream.Collectors;
89

910
import io.fabric8.kubernetes.api.model.HasMetadata;
1011
import io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResource;
@@ -14,11 +15,21 @@
1415
@SuppressWarnings({"rawtypes", "unchecked"})
1516
public class WorkflowBuilder<P extends HasMetadata> {
1617

17-
private final Map<String, DependentResourceNode<?, P>> dependentResourceNodes =
18-
new HashMap<>();
19-
private boolean throwExceptionAutomatically = THROW_EXCEPTION_AUTOMATICALLY_DEFAULT;
18+
private final Map<String, DependentResourceNode<?, P>> dependentResourceNodes;
19+
private boolean throwExceptionAutomatically;
2020
private DependentResourceNode currentNode;
21-
private boolean isCleaner = false;
21+
private boolean isCleaner;
22+
23+
public WorkflowBuilder() {
24+
this(new HashMap<>(), THROW_EXCEPTION_AUTOMATICALLY_DEFAULT, false);
25+
}
26+
27+
private WorkflowBuilder(Map<String, DependentResourceNode<?, P>> dependentResourceNodes,
28+
boolean throwExceptionAutomatically, boolean isCleaner) {
29+
this.dependentResourceNodes = dependentResourceNodes;
30+
this.throwExceptionAutomatically = throwExceptionAutomatically;
31+
this.isCleaner = isCleaner;
32+
}
2233

2334
public WorkflowBuilder<P> addDependentResource(DependentResource dependentResource) {
2435
return addDependentResource(dependentResource, null);
@@ -91,4 +102,12 @@ public Workflow<P> build() {
91102
return new DefaultWorkflow(new HashSet<>(dependentResourceNodes.values()),
92103
throwExceptionAutomatically, isCleaner);
93104
}
105+
106+
public static <P extends HasMetadata> WorkflowBuilder<P> from(Workflow<P> workflow) {
107+
final Map<String, DependentResourceNode<?, P>> nodes =
108+
workflow.getDependentResourcesByName().entrySet().stream()
109+
.collect(Collectors.toMap(Map.Entry::getKey,
110+
e -> new DependentResourceNode(e.getKey(), e.getValue())));
111+
return new WorkflowBuilder<>(nodes, false, workflow.hasCleaner());
112+
}
94113
}

0 commit comments

Comments
 (0)