Skip to content

Commit 2042fd8

Browse files
committed
todo fixes
1 parent e9c8c7e commit 2042fd8

File tree

4 files changed

+52
-22
lines changed

4 files changed

+52
-22
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: 25 additions & 8 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,10 @@ public void run() {
105107
deleteCalled.add(dependentResourceNode);
106108
}
107109
boolean deletePostConditionMet =
108-
deletePostCondition.map(c -> c.isMet(primary,
109-
// todo pass also discriminator
110-
context
111-
.getSecondaryResource(
112-
dependentResourceNode.getDependentResource().resourceType())
113-
.orElse(null),
114-
context)).orElse(true);
115-
110+
deletePostCondition
111+
.map(c -> c.isMet(primary, getSecondaryResource(dependentResourceNode),
112+
context))
113+
.orElse(true);
116114
if (deletePostConditionMet) {
117115
alreadyVisited.add(dependentResourceNode);
118116
handleDependentCleaned(dependentResourceNode);
@@ -130,6 +128,25 @@ public void run() {
130128
}
131129
}
132130

131+
@SuppressWarnings("unchecked")
132+
private <R> R getSecondaryResource(DependentResourceNode<R, P> dependentResourceNode) {
133+
if (dependentResourceNode.getDependentResource() instanceof AbstractDependentResource &&
134+
((AbstractDependentResource) dependentResourceNode.getDependentResource())
135+
.getResourceDiscriminator() != null) {
136+
ResourceDiscriminator<R, P> discriminator =
137+
((AbstractDependentResource) dependentResourceNode.getDependentResource())
138+
.getResourceDiscriminator();
139+
return context
140+
.getSecondaryResource(dependentResourceNode.getDependentResource().resourceType(),
141+
discriminator)
142+
.orElse(null);
143+
} else {
144+
return context
145+
.getSecondaryResource(dependentResourceNode.getDependentResource().resourceType())
146+
.orElse(null);
147+
}
148+
}
149+
133150
private synchronized void handleDependentCleaned(
134151
DependentResourceNode<?, P> dependentResourceNode) {
135152
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)