Skip to content

Commit 36ff178

Browse files
committed
refactor: make Workflow and ManagedWorkflow more easily reusable
1 parent 8659e50 commit 36ff178

File tree

4 files changed

+56
-22
lines changed

4 files changed

+56
-22
lines changed

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

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,18 +22,18 @@ public class DefaultManagedWorkflow<P extends HasMetadata> implements ManagedWor
2222

2323
private final Set<String> topLevelResources;
2424
private final Set<String> bottomLevelResources;
25-
private final List<DependentResourceSpec<?, ?>> specs;
25+
private final List<DependentResourceSpec<?, ?>> orderedSpecs;
2626
private final boolean hasCleaner;
2727

28-
DefaultManagedWorkflow(List<DependentResourceSpec<?, ?>> dependentResourceSpecs,
28+
protected DefaultManagedWorkflow(List<DependentResourceSpec<?, ?>> orderedSpecs,
2929
boolean hasCleaner) {
3030
this.hasCleaner = hasCleaner;
31-
topLevelResources = new HashSet<>(dependentResourceSpecs.size());
32-
bottomLevelResources = dependentResourceSpecs.stream()
31+
topLevelResources = new HashSet<>(orderedSpecs.size());
32+
bottomLevelResources = orderedSpecs.stream()
3333
.map(DependentResourceSpec::getName)
3434
.collect(Collectors.toSet());
35-
specs = dependentResourceSpecs;
36-
dependentResourceSpecs.forEach(spec -> {
35+
this.orderedSpecs = orderedSpecs;
36+
orderedSpecs.forEach(spec -> {
3737
// add cycle detection?
3838
if (spec.getDependsOn().isEmpty()) {
3939
topLevelResources.add(spec.getName());
@@ -45,16 +45,22 @@ public class DefaultManagedWorkflow<P extends HasMetadata> implements ManagedWor
4545
});
4646
}
4747

48-
Set<String> getTopLevelResources() {
48+
@Override
49+
@SuppressWarnings("unused")
50+
public List<DependentResourceSpec<?, ?>> getOrderedSpecs() {
51+
return orderedSpecs;
52+
}
53+
54+
protected Set<String> getTopLevelResources() {
4955
return topLevelResources;
5056
}
5157

52-
Set<String> getBottomLevelResources() {
58+
protected Set<String> getBottomLevelResources() {
5359
return bottomLevelResources;
5460
}
5561

5662
List<String> nodeNames() {
57-
return specs.stream().map(DependentResourceSpec::getName).collect(Collectors.toList());
63+
return orderedSpecs.stream().map(DependentResourceSpec::getName).collect(Collectors.toList());
5864
}
5965

6066
@Override
@@ -64,15 +70,15 @@ public boolean hasCleaner() {
6470

6571
@Override
6672
public boolean isEmpty() {
67-
return specs.isEmpty();
73+
return orderedSpecs.isEmpty();
6874
}
6975

7076
@Override
7177
@SuppressWarnings("unchecked")
7278
public Workflow<P> resolve(KubernetesClient client,
7379
ControllerConfiguration<P> configuration) {
74-
final var alreadyResolved = new HashMap<String, DependentResourceNode>(specs.size());
75-
for (DependentResourceSpec spec : specs) {
80+
final var alreadyResolved = new HashMap<String, DependentResourceNode>(orderedSpecs.size());
81+
for (DependentResourceSpec spec : orderedSpecs) {
7682
final var node = new DependentResourceNode(spec.getName(),
7783
spec.getReconcileCondition(),
7884
spec.getDeletePostCondition(),

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public class DefaultWorkflow<P extends HasMetadata> implements Workflow<P> {
5252
}
5353
}
5454

55-
DefaultWorkflow(Map<String, DependentResourceNode> dependentResourceNodes,
55+
protected DefaultWorkflow(Map<String, DependentResourceNode> dependentResourceNodes,
5656
Set<DependentResourceNode> bottomLevelResource, Set<DependentResourceNode> topLevelResources,
5757
boolean throwExceptionAutomatically,
5858
boolean hasCleaner) {
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,27 @@
11
package io.javaoperatorsdk.operator.processing.dependent.workflow;
22

3+
import java.util.Collections;
4+
import java.util.List;
5+
36
import io.fabric8.kubernetes.api.model.HasMetadata;
47
import io.fabric8.kubernetes.client.KubernetesClient;
58
import io.javaoperatorsdk.operator.api.config.ControllerConfiguration;
9+
import io.javaoperatorsdk.operator.api.config.dependent.DependentResourceSpec;
610

711
public interface ManagedWorkflow<P extends HasMetadata> {
812

9-
boolean hasCleaner();
13+
@SuppressWarnings("unused")
14+
default List<DependentResourceSpec<?, ?>> getOrderedSpecs() {
15+
return Collections.emptyList();
16+
}
17+
18+
default boolean hasCleaner() {
19+
return false;
20+
}
1021

11-
boolean isEmpty();
22+
default boolean isEmpty() {
23+
return true;
24+
}
1225

1326
Workflow<P> resolve(KubernetesClient client, ControllerConfiguration<P> configuration);
1427
}
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.javaoperatorsdk.operator.processing.dependent.workflow;
22

3+
import java.util.Collections;
34
import java.util.Map;
45
import java.util.Set;
56

@@ -11,20 +12,34 @@ public interface Workflow<P extends HasMetadata> {
1112

1213
boolean THROW_EXCEPTION_AUTOMATICALLY_DEFAULT = true;
1314

14-
WorkflowReconcileResult reconcile(P primary, Context<P> context);
15+
default WorkflowReconcileResult reconcile(P primary, Context<P> context) {
16+
throw new UnsupportedOperationException("Implement this");
17+
}
1518

16-
WorkflowCleanupResult cleanup(P primary, Context<P> context);
19+
default WorkflowCleanupResult cleanup(P primary, Context<P> context) {
20+
throw new UnsupportedOperationException("Implement this");
21+
}
1722

1823
@SuppressWarnings("rawtypes")
19-
Set<DependentResourceNode> getTopLevelDependentResources();
24+
default Set<DependentResourceNode> getTopLevelDependentResources() {
25+
return Collections.emptySet();
26+
}
2027

2128
@SuppressWarnings("rawtypes")
22-
Set<DependentResourceNode> getBottomLevelResource();
29+
default Set<DependentResourceNode> getBottomLevelResource() {
30+
return Collections.emptySet();
31+
}
2332

24-
boolean hasCleaner();
33+
default boolean hasCleaner() {
34+
return false;
35+
}
2536

26-
boolean isEmpty();
37+
default boolean isEmpty() {
38+
return true;
39+
}
2740

2841
@SuppressWarnings("rawtypes")
29-
Map<String, DependentResource> getDependentResourcesByName();
42+
default Map<String, DependentResource> getDependentResourcesByName() {
43+
return Collections.emptyMap();
44+
}
3045
}

0 commit comments

Comments
 (0)