Skip to content

Commit a2eb3ca

Browse files
committed
wip
1 parent 8177d9e commit a2eb3ca

File tree

7 files changed

+112
-5
lines changed

7 files changed

+112
-5
lines changed

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111
public class DependentResourceNode {
1212

1313
private final DependentResource<?, ?> dependentResource;
14-
private final ReconcileCondition reconcileCondition;
15-
private final CleanupCondition cleanupCondition;
14+
private ReconcileCondition reconcileCondition;
15+
private CleanupCondition cleanupCondition;
1616
private List<DependsOnRelation> dependsOnRelations = new ArrayList<>(1);
1717

1818
public DependentResourceNode(DependentResource<?, ?> dependentResource) {
@@ -51,6 +51,10 @@ public List<DependsOnRelation> getDependsOnRelations() {
5151
return dependsOnRelations;
5252
}
5353

54+
public void addDependsOnRelation(DependsOnRelation dependsOnRelation) {
55+
dependsOnRelations.add(dependsOnRelation);
56+
}
57+
5458
@Override
5559
public String toString() {
5660
return "DependentResourceNode{" +

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ public class DependsOnRelation {
1010

1111
public DependsOnRelation() {}
1212

13+
public DependsOnRelation(DependentResourceNode owner, DependentResourceNode dependsOn) {
14+
this(owner, dependsOn, null);
15+
}
16+
1317
public DependsOnRelation(DependentResourceNode owner, DependentResourceNode dependsOn,
1418
WaitCondition waitCondition) {
1519
this.owner = owner;

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,16 +32,18 @@ public Workflow(List<DependentResourceNode> dependentResourceNodes, int globalPa
3232
}
3333

3434
public void reconcile(P primary, Context<P> context) {
35-
35+
WorkflowReconcileExecutor<P> workflowReconcileExecutor =
36+
new WorkflowReconcileExecutor<>(this, primary, context);
37+
workflowReconcileExecutor.reconcile();
3638
}
3739

3840
public void cleanup(P resource, Context<P> context) {
3941

4042
}
4143

44+
// add cycle detection?
4245
private void preprocessForReconcile() {
4346
reverseDependsOn = new ConcurrentHashMap<>(dependentResourceNodes.size());
44-
4547
for (DependentResourceNode node : dependentResourceNodes) {
4648
if (node.getDependsOnRelations().isEmpty()) {
4749
topLevelResources.add(node);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ private synchronized void handleNodeExecutionFinish(DependentResourceNode depend
6969

7070
var future = nodeToFuture.remove(dependentResourceNode);
7171
actualExecutions.remove(future);
72-
72+
7373
if (exceptionsPresent()) {
7474
if (actualExecutions.isEmpty()) {
7575
notifyMainReconcile();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package io.javaoperatorsdk.operator.processing.dependent.workflow.builder;
2+
3+
import io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResource;
4+
import io.javaoperatorsdk.operator.processing.dependent.workflow.DependentResourceNode;
5+
import io.javaoperatorsdk.operator.processing.dependent.workflow.DependsOnRelation;
6+
7+
public class DependentBuilder {
8+
9+
private final WorkflowBuilder workflowBuilder;
10+
private final DependentResourceNode node;
11+
12+
public DependentBuilder(WorkflowBuilder workflowBuilder, DependentResourceNode node) {
13+
this.workflowBuilder = workflowBuilder;
14+
this.node = node;
15+
}
16+
17+
public DependentBuilder dependsOn(DependentResource<?, ?> dependentResource) {
18+
var dependsOn = workflowBuilder.getNodeByDependentResource(dependentResource);
19+
node.addDependsOnRelation(new DependsOnRelation(node, dependsOn, null));
20+
return this;
21+
}
22+
23+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package io.javaoperatorsdk.operator.processing.dependent.workflow.builder;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
import java.util.concurrent.ExecutorService;
6+
import java.util.concurrent.Executors;
7+
8+
import io.fabric8.kubernetes.api.model.HasMetadata;
9+
import io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResource;
10+
import io.javaoperatorsdk.operator.processing.dependent.workflow.DependentResourceNode;
11+
import io.javaoperatorsdk.operator.processing.dependent.workflow.Workflow;
12+
13+
public class WorkflowBuilder<P extends HasMetadata> {
14+
15+
private List<DependentResourceNode> dependentResourceNodes = new ArrayList<>();
16+
17+
public DependentBuilder addDependent(DependentResource<?, ?> dependentResource) {
18+
DependentResourceNode node = new DependentResourceNode(dependentResource);
19+
dependentResourceNodes.add(node);
20+
return new DependentBuilder(this, node);
21+
}
22+
23+
void addDependentResourceNode(DependentResourceNode node) {
24+
dependentResourceNodes.add(node);
25+
}
26+
27+
DependentResourceNode getNodeByDependentResource(DependentResource<?, ?> dependentResource) {
28+
return dependentResourceNodes.stream()
29+
.filter(dr -> dr.getDependentResource() == dependentResource)
30+
.findFirst()
31+
.orElseThrow();
32+
}
33+
34+
public Workflow<P> build() {
35+
return new Workflow<>(dependentResourceNodes, Executors.newCachedThreadPool());
36+
}
37+
38+
public Workflow<P> build(int parallelism) {
39+
return new Workflow<>(dependentResourceNodes, parallelism);
40+
}
41+
42+
public Workflow<P> build(ExecutorService executorService) {
43+
return new Workflow<>(dependentResourceNodes, executorService);
44+
}
45+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package io.javaoperatorsdk.operator.processing.dependent.workflow;
2+
3+
import org.junit.jupiter.api.Test;
4+
5+
import static org.junit.jupiter.api.Assertions.*;
6+
7+
class WorkflowTest {
8+
9+
@Test
10+
void reconcileTopLevelResources() {
11+
12+
}
13+
14+
@Test
15+
void reconciliationWithSimpleDependsOn() {
16+
17+
}
18+
19+
@Test
20+
void reconciliationWithTheDependsOns() {
21+
22+
}
23+
24+
@Test
25+
void diamondShareWorkflowReconcile() {
26+
27+
}
28+
29+
}

0 commit comments

Comments
 (0)