Skip to content

Commit 6cbc509

Browse files
committed
feat: move name is directly to dependent resource
- use this name when throwing aggregate exception Signed-off-by: Attila Mészáros <[email protected]>
1 parent e636956 commit 6cbc509

File tree

16 files changed

+105
-45
lines changed

16 files changed

+105
-45
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,4 +68,8 @@ static String defaultNameFor(Class<? extends DependentResource> dependentResourc
6868
default boolean isDeletable() {
6969
return this instanceof Deleter;
7070
}
71+
72+
String getName();
73+
74+
void setName(String name);
7175
}

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ public abstract class AbstractDependentResource<R, P extends HasMetadata>
2929
private ResourceDiscriminator<R, P> resourceDiscriminator;
3030
private final DependentResourceReconciler<R, P> dependentResourceReconciler;
3131

32+
protected String name = DependentResource.defaultNameFor(this.getClass());
33+
3234
@SuppressWarnings({"unchecked"})
3335
protected AbstractDependentResource() {
3436
creator = creatable ? (Creator<R, P>) this : null;
@@ -176,4 +178,13 @@ protected boolean isUpdatable() {
176178
public boolean isDeletable() {
177179
return deletable;
178180
}
181+
182+
@Override
183+
public String getName() {
184+
return name;
185+
}
186+
187+
public void setName(String name) {
188+
this.name = name;
189+
}
179190
}

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,11 +139,13 @@ protected <R> void registerOrDeregisterEventSourceBasedOnActivation(
139139
.eventSourceContextForDynamicRegistration());
140140
var es = eventSource.orElseThrow();
141141
context.eventSourceRetriever()
142-
.dynamicallyRegisterEventSource(dependentResourceNode.getName(), es);
142+
.dynamicallyRegisterEventSource(dependentResourceNode.getDependentResource().getName(),
143+
es);
143144

144145
} else {
145146
context.eventSourceRetriever()
146-
.dynamicallyDeRegisterEventSource(dependentResourceNode.getName());
147+
.dynamicallyDeRegisterEventSource(
148+
dependentResourceNode.getDependentResource().getName());
147149
}
148150
}
149151
}

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import io.javaoperatorsdk.operator.api.reconciler.dependent.EventSourceReferencer;
1515
import io.javaoperatorsdk.operator.api.reconciler.dependent.managed.KubernetesClientAware;
1616

17+
import static io.javaoperatorsdk.operator.api.reconciler.Constants.NO_VALUE_SET;
1718
import static io.javaoperatorsdk.operator.processing.dependent.workflow.Workflow.THROW_EXCEPTION_AUTOMATICALLY_DEFAULT;
1819

1920
@SuppressWarnings("rawtypes")
@@ -77,13 +78,13 @@ public Workflow<P> resolve(KubernetesClient client,
7778
ControllerConfiguration<P> configuration) {
7879
final var alreadyResolved = new HashMap<String, DependentResourceNode>(orderedSpecs.size());
7980
for (DependentResourceSpec spec : orderedSpecs) {
80-
final var node = new DependentResourceNode(spec.getName(),
81+
final var node = new DependentResourceNode(
8182
spec.getReconcileCondition(),
8283
spec.getDeletePostCondition(),
8384
spec.getReadyCondition(),
8485
spec.getActivationCondition(),
8586
resolve(spec, client, configuration));
86-
alreadyResolved.put(node.getName(), node);
87+
alreadyResolved.put(node.getDependentResource().getName(), node);
8788
spec.getDependsOn()
8889
.forEach(depend -> node.addDependsOnRelation(alreadyResolved.get(depend)));
8990
}
@@ -104,6 +105,10 @@ private <R> DependentResource<R, P> resolve(DependentResourceSpec<R, P> spec,
104105
configuration.getConfigurationService().dependentResourceFactory()
105106
.createFrom(spec, configuration);
106107

108+
if (spec.getName() != null && !spec.getName().equals(NO_VALUE_SET)) {
109+
dependentResource.setName(spec.getName());
110+
}
111+
107112
if (dependentResource instanceof KubernetesClientAware) {
108113
((KubernetesClientAware) dependentResource).setKubernetesClient(client);
109114
}

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
@@ -77,7 +77,7 @@ private Map<String, DependentResourceNode> toMap(Set<DependentResourceNode> node
7777
bottomLevelResource.remove(dependsOn);
7878
}
7979
}
80-
map.put(node.getName(), node);
80+
map.put(node.getDependentResource().getName(), node);
8181
}
8282
if (topLevelResources.size() == 0) {
8383
throw new IllegalStateException(

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

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,25 +12,20 @@ public class DependentResourceNode<R, P extends HasMetadata> {
1212

1313
private final List<DependentResourceNode> dependsOn = new LinkedList<>();
1414
private final List<DependentResourceNode> parents = new LinkedList<>();
15-
private final String name;
15+
1616
private Condition<R, P> reconcilePrecondition;
1717
private Condition<R, P> deletePostcondition;
1818
private Condition<R, P> readyPostcondition;
1919
private Condition<R, P> activationCondition;
2020
private final DependentResource<R, P> dependentResource;
2121

22-
DependentResourceNode(String name, DependentResource<R, P> dependentResource) {
23-
this(name, null, null, null, null, dependentResource);
24-
}
25-
2622
DependentResourceNode(DependentResource<R, P> dependentResource) {
27-
this(getNameFor(dependentResource), null, null, null, null, dependentResource);
23+
this(null, null, null, null, dependentResource);
2824
}
2925

30-
public DependentResourceNode(String name, Condition<R, P> reconcilePrecondition,
26+
public DependentResourceNode(Condition<R, P> reconcilePrecondition,
3127
Condition<R, P> deletePostcondition, Condition<R, P> readyPostcondition,
3228
Condition<R, P> activationCondition, DependentResource<R, P> dependentResource) {
33-
this.name = name;
3429
this.reconcilePrecondition = reconcilePrecondition;
3530
this.deletePostcondition = deletePostcondition;
3631
this.readyPostcondition = readyPostcondition;
@@ -55,11 +50,6 @@ public List<DependentResourceNode> getParents() {
5550
return parents;
5651
}
5752

58-
public String getName() {
59-
return name;
60-
}
61-
62-
6353
public Optional<Condition<R, P>> getReconcilePrecondition() {
6454
return Optional.ofNullable(reconcilePrecondition);
6555
}
@@ -106,12 +96,12 @@ public boolean equals(Object o) {
10696
return false;
10797
}
10898
DependentResourceNode<?, ?> that = (DependentResourceNode<?, ?>) o;
109-
return name.equals(that.name);
99+
return this.getDependentResource().getName().equals(that.getDependentResource().getName());
110100
}
111101

112102
@Override
113103
public int hashCode() {
114-
return name.hashCode();
104+
return this.getDependentResource().getName().hashCode();
115105
}
116106

117107
@SuppressWarnings("rawtypes")

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

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,9 @@ public class WorkflowBuilder<P extends HasMetadata> {
2121
private boolean isCleaner = false;
2222

2323
public WorkflowBuilder<P> addDependentResource(DependentResource dependentResource) {
24-
return addDependentResource(dependentResource, null);
25-
}
26-
27-
public WorkflowBuilder<P> addDependentResource(DependentResource dependentResource, String name) {
28-
currentNode = name == null ? new DependentResourceNode<>(dependentResource)
29-
: new DependentResourceNode<>(name, dependentResource);
24+
currentNode = new DependentResourceNode<>(dependentResource);
3025
isCleaner = isCleaner || dependentResource.isDeletable();
31-
final var actualName = currentNode.getName();
26+
final var actualName = dependentResource.getName();
3227
dependentResourceNodes.put(actualName, currentNode);
3328
return this;
3429
}
@@ -71,7 +66,7 @@ public WorkflowBuilder<P> withActivationCondition(Condition activationCondition)
7166
DependentResourceNode getNodeByDependentResource(DependentResource<?, ?> dependentResource) {
7267
// first check by name
7368
final var node =
74-
dependentResourceNodes.get(DependentResourceNode.getNameFor(dependentResource));
69+
dependentResourceNodes.get(dependentResource.getName());
7570
if (node != null) {
7671
return node;
7772
} else {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public void throwAggregateExceptionIfErrorsPresent() {
3838
if (erroredDependentsExist()) {
3939
throw new AggregatedOperatorException("Exception(s) during workflow execution.",
4040
erroredDependents.entrySet().stream()
41-
.collect(Collectors.toMap(e -> e.getKey().getClass().getName(), Entry::getValue)));
41+
.collect(Collectors.toMap(e -> e.getKey().getName(), Entry::getValue)));
4242
}
4343
}
4444
}

operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/config/ControllerConfigurationOverriderTest.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,14 @@ public Class<Object> resourceType() {
103103
return Object.class;
104104
}
105105

106+
@Override
107+
public String getName() {
108+
return null;
109+
}
110+
111+
@Override
112+
public void setName(String name) {}
113+
106114
@Override
107115
public void configureWith(String config) {
108116
this.config = config;

operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/config/dependent/DependentResourceConfigurationResolverTest.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,14 @@ public Class<ConfigMap> resourceType() {
175175
return ConfigMap.class;
176176
}
177177

178+
@Override
179+
public String getName() {
180+
return null;
181+
}
182+
183+
@Override
184+
public void setName(String name) {}
185+
178186
@Override
179187
public void configureWith(CustomConfig config) {
180188
this.config = config;

0 commit comments

Comments
 (0)