Skip to content

Commit e27eb9a

Browse files
committed
todo fixes
1 parent 9c72e93 commit e27eb9a

File tree

4 files changed

+53
-21
lines changed

4 files changed

+53
-21
lines changed

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/ResourceDiscriminator.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44

55
import io.fabric8.kubernetes.api.model.HasMetadata;
66

7-
// todo is discriminator a good name? it not just discriminates but also reads from cache
8-
// todo discuss a List version of this (for reconciler but also for batch processing?)
97
public interface ResourceDiscriminator<R, P extends HasMetadata> {
108

119
Optional<R> distinguish(Class<R> resource, P primary, Context<P> context);

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

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ public abstract class AbstractDependentResource<R, P extends HasMetadata>
2424
protected Creator<R, P> creator;
2525
protected Updater<R, P> updater;
2626

27-
// todo discuss, rather implement this as interface?
2827
private ResourceDiscriminator<R, P> resourceDiscriminator;
2928

3029
@SuppressWarnings("unchecked")
@@ -134,14 +133,12 @@ protected R desired(P primary, Context<P> context) {
134133
"desired method must be implemented if this DependentResource can be created and/or updated");
135134
}
136135

137-
// todo review & refactor configuration to cover all cases
138-
public ResourceDiscriminator<R, P> getResourceDiscriminator() {
139-
return resourceDiscriminator;
140-
}
141-
142-
public AbstractDependentResource<R, P> setResourceDiscriminator(
136+
public void setResourceDiscriminator(
143137
ResourceDiscriminator<R, P> resourceDiscriminator) {
144138
this.resourceDiscriminator = resourceDiscriminator;
145-
return this;
139+
}
140+
141+
public ResourceDiscriminator<R, P> getResourceDiscriminator() {
142+
return resourceDiscriminator;
146143
}
147144
}

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

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,10 @@
1313

1414
import io.fabric8.kubernetes.api.model.HasMetadata;
1515
import io.javaoperatorsdk.operator.api.reconciler.Context;
16+
import io.javaoperatorsdk.operator.api.reconciler.ResourceDiscriminator;
1617
import io.javaoperatorsdk.operator.api.reconciler.dependent.Deleter;
1718
import io.javaoperatorsdk.operator.api.reconciler.dependent.GarbageCollected;
19+
import io.javaoperatorsdk.operator.processing.dependent.AbstractDependentResource;
1820

1921
@SuppressWarnings("rawtypes")
2022
public class WorkflowCleanupExecutor<P extends HasMetadata> {
@@ -105,14 +107,12 @@ public void run() {
105107
deleteCalled.add(dependentResourceNode);
106108
}
107109
alreadyVisited.add(dependentResourceNode);
110+
108111
boolean deletePostConditionMet =
109-
deletePostCondition.map(c -> c.isMet(primary,
110-
// todo pass also discriminator
111-
context
112-
.getSecondaryResource(
113-
dependentResourceNode.getDependentResource().resourceType())
114-
.orElse(null),
115-
context)).orElse(true);
112+
deletePostCondition
113+
.map(c -> c.isMet(primary, getSecondaryResource(dependentResourceNode),
114+
context))
115+
.orElse(true);
116116
if (deletePostConditionMet) {
117117
handleDependentCleaned(dependentResourceNode);
118118
} else {
@@ -126,6 +126,25 @@ public void run() {
126126
}
127127
}
128128

129+
@SuppressWarnings("unchecked")
130+
private <R> R getSecondaryResource(DependentResourceNode<R, P> dependentResourceNode) {
131+
if (dependentResourceNode.getDependentResource() instanceof AbstractDependentResource &&
132+
((AbstractDependentResource) dependentResourceNode.getDependentResource())
133+
.getResourceDiscriminator() != null) {
134+
ResourceDiscriminator<R, P> discriminator =
135+
((AbstractDependentResource) dependentResourceNode.getDependentResource())
136+
.getResourceDiscriminator();
137+
return context
138+
.getSecondaryResource(dependentResourceNode.getDependentResource().resourceType(),
139+
discriminator)
140+
.orElse(null);
141+
} else {
142+
return context
143+
.getSecondaryResource(dependentResourceNode.getDependentResource().resourceType())
144+
.orElse(null);
145+
}
146+
}
147+
129148
private synchronized void handleDependentCleaned(
130149
DependentResourceNode<?, P> dependentResourceNode) {
131150
var dependOns = dependentResourceNode.getDependsOn();

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

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,12 @@
1313

1414
import io.fabric8.kubernetes.api.model.HasMetadata;
1515
import io.javaoperatorsdk.operator.api.reconciler.Context;
16+
import io.javaoperatorsdk.operator.api.reconciler.ResourceDiscriminator;
1617
import io.javaoperatorsdk.operator.api.reconciler.dependent.Deleter;
1718
import io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResource;
1819
import io.javaoperatorsdk.operator.api.reconciler.dependent.GarbageCollected;
1920
import io.javaoperatorsdk.operator.api.reconciler.dependent.ReconcileResult;
21+
import io.javaoperatorsdk.operator.processing.dependent.AbstractDependentResource;
2022
import io.javaoperatorsdk.operator.processing.event.ResourceID;
2123

2224
@SuppressWarnings({"rawtypes", "unchecked"})
@@ -85,10 +87,7 @@ private synchronized <R> void handleReconcile(DependentResourceNode<R, P> depend
8587
}
8688

8789
boolean reconcileConditionMet = dependentResourceNode.getReconcilePrecondition()
88-
.map(rc -> rc.isMet(primary,
89-
context
90-
.getSecondaryResource(dependentResourceNode.getDependentResource().resourceType())
91-
.orElse(null),
90+
.map(rc -> rc.isMet(primary, getSecondaryResource(dependentResourceNode),
9291
context))
9392
.orElse(true);
9493

@@ -102,6 +101,25 @@ private synchronized <R> void handleReconcile(DependentResourceNode<R, P> depend
102101
}
103102
}
104103

104+
@SuppressWarnings("unchecked")
105+
private <R> R getSecondaryResource(DependentResourceNode<R, P> dependentResourceNode) {
106+
if (dependentResourceNode.getDependentResource() instanceof AbstractDependentResource &&
107+
((AbstractDependentResource) dependentResourceNode.getDependentResource())
108+
.getResourceDiscriminator() != null) {
109+
ResourceDiscriminator<R, P> discriminator =
110+
((AbstractDependentResource) dependentResourceNode.getDependentResource())
111+
.getResourceDiscriminator();
112+
return context
113+
.getSecondaryResource(dependentResourceNode.getDependentResource().resourceType(),
114+
discriminator)
115+
.orElse(null);
116+
} else {
117+
return context
118+
.getSecondaryResource(dependentResourceNode.getDependentResource().resourceType())
119+
.orElse(null);
120+
}
121+
}
122+
105123
private synchronized void handleDelete(DependentResourceNode dependentResourceNode) {
106124
log.debug("Submitting for delete: {}", dependentResourceNode);
107125

0 commit comments

Comments
 (0)