Skip to content

Commit 7382aeb

Browse files
committed
feat: re-introduce getSecondaryResource and simplify
1 parent a79d4f3 commit 7382aeb

File tree

7 files changed

+21
-57
lines changed

7 files changed

+21
-57
lines changed

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package io.javaoperatorsdk.operator.api.reconciler.dependent;
22

3+
import java.util.Optional;
4+
35
import io.fabric8.kubernetes.api.model.HasMetadata;
46
import io.javaoperatorsdk.operator.api.reconciler.Context;
57

@@ -27,6 +29,10 @@ public interface DependentResource<R, P extends HasMetadata> {
2729
*/
2830
Class<R> resourceType();
2931

32+
default Optional<R> getSecondaryResource(P primary, Context<P> context) {
33+
return Optional.empty();
34+
}
35+
3036
/**
3137
* Computes a default name for the specified DependentResource class
3238
*

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

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ public AbstractDependentResource() {
3232
updater = updatable ? (Updater<R, P>) this : null;
3333
}
3434

35-
@SuppressWarnings("unchecked")
3635
@Override
3736
public ReconcileResult<R> reconcile(P primary, Context<P> context) {
3837
Optional<R> maybeActual = getSecondaryResource(primary, context);
@@ -68,12 +67,9 @@ public ReconcileResult<R> reconcile(P primary, Context<P> context) {
6867
return ReconcileResult.noOperation(maybeActual.orElse(null));
6968
}
7069

71-
protected Optional<R> getSecondaryResource(P primary, Context<P> context) {
72-
if (resourceDiscriminator == null) {
73-
return context.getSecondaryResource(resourceType());
74-
} else {
75-
return context.getSecondaryResource(resourceType(), resourceDiscriminator);
76-
}
70+
public Optional<R> getSecondaryResource(P primary, Context<P> context) {
71+
return resourceDiscriminator == null ? context.getSecondaryResource(resourceType())
72+
: resourceDiscriminator.distinguish(resourceType(), primary, context);
7773
}
7874

7975
private void throwIfNull(R desired, P primary, String descriptor) {

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import java.util.Optional;
66

77
import io.fabric8.kubernetes.api.model.HasMetadata;
8+
import io.javaoperatorsdk.operator.api.reconciler.Context;
89
import io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResource;
910

1011
@SuppressWarnings("rawtypes")
@@ -85,4 +86,8 @@ public DependentResourceNode<R, P> setReadyPostcondition(Condition<R, P> readyPo
8586
public List<DependentResourceNode> getParents() {
8687
return parents;
8788
}
89+
90+
protected R getSecondaryResource(P primary, Context<P> context) {
91+
return getDependentResource().getSecondaryResource(primary, context).orElse(null);
92+
}
8893
}

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

Lines changed: 4 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,8 @@
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;
1716
import io.javaoperatorsdk.operator.api.reconciler.dependent.Deleter;
1817
import io.javaoperatorsdk.operator.api.reconciler.dependent.GarbageCollected;
19-
import io.javaoperatorsdk.operator.processing.dependent.AbstractDependentResource;
2018

2119
@SuppressWarnings("rawtypes")
2220
public class WorkflowCleanupExecutor<P extends HasMetadata> {
@@ -106,11 +104,10 @@ public void run() {
106104
((Deleter<P>) dependentResourceNode.getDependentResource()).delete(primary, context);
107105
deleteCalled.add(dependentResourceNode);
108106
}
109-
boolean deletePostConditionMet =
110-
deletePostCondition
111-
.map(c -> c.isMet(primary, getSecondaryResource(dependentResourceNode),
112-
context))
113-
.orElse(true);
107+
boolean deletePostConditionMet = deletePostCondition
108+
.map(c -> c.isMet(primary, dependentResourceNode.getSecondaryResource(primary, context),
109+
context))
110+
.orElse(true);
114111
if (deletePostConditionMet) {
115112
alreadyVisited.add(dependentResourceNode);
116113
handleDependentCleaned(dependentResourceNode);
@@ -128,24 +125,6 @@ public void run() {
128125
}
129126
}
130127

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-
}
149128

150129
private synchronized void handleDependentCleaned(
151130
DependentResourceNode<?, P> dependentResourceNode) {

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

Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +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;
1716
import io.javaoperatorsdk.operator.api.reconciler.dependent.Deleter;
1817
import io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResource;
1918
import io.javaoperatorsdk.operator.api.reconciler.dependent.GarbageCollected;
2019
import io.javaoperatorsdk.operator.api.reconciler.dependent.ReconcileResult;
21-
import io.javaoperatorsdk.operator.processing.dependent.AbstractDependentResource;
2220
import io.javaoperatorsdk.operator.processing.event.ResourceID;
2321

2422
@SuppressWarnings({"rawtypes", "unchecked"})
@@ -87,7 +85,7 @@ private synchronized <R> void handleReconcile(DependentResourceNode<R, P> depend
8785
}
8886

8987
boolean reconcileConditionMet = dependentResourceNode.getReconcilePrecondition()
90-
.map(rc -> rc.isMet(primary, getSecondaryResource(dependentResourceNode),
88+
.map(rc -> rc.isMet(primary, dependentResourceNode.getSecondaryResource(primary, context),
9189
context))
9290
.orElse(true);
9391

@@ -101,25 +99,6 @@ private synchronized <R> void handleReconcile(DependentResourceNode<R, P> depend
10199
}
102100
}
103101

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-
123102
private synchronized void handleDelete(DependentResourceNode dependentResourceNode) {
124103
log.debug("Submitting for delete: {}", dependentResourceNode);
125104

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventSourceManager.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -173,8 +173,7 @@ public ControllerResourceEventSource<P> getControllerResourceEventSource() {
173173
}
174174

175175
@Override
176-
public <R> ResourceEventSource<R, P> getResourceEventSourceFor(
177-
Class<R> dependentType) {
176+
public <R> ResourceEventSource<R, P> getResourceEventSourceFor(Class<R> dependentType) {
178177
return getResourceEventSourceFor(dependentType, null);
179178
}
180179

operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/AbstractDependentResourceTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public Class<ConfigMap> resourceType() {
7979
}
8080

8181
@Override
82-
protected Optional<ConfigMap> getSecondaryResource(TestCustomResource primary,
82+
public Optional<ConfigMap> getSecondaryResource(TestCustomResource primary,
8383
Context<TestCustomResource> context) {
8484
return Optional.ofNullable(secondary);
8585
}

0 commit comments

Comments
 (0)