Skip to content

Commit 1edfc8c

Browse files
committed
feat: remove resource discriminator (#2299)
Signed-off-by: Attila Mészáros <[email protected]>
1 parent 67b3b31 commit 1edfc8c

File tree

38 files changed

+23
-678
lines changed

38 files changed

+23
-678
lines changed

Diff for: docs/documentation/v5-0-migration.md

+2
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,5 @@ permalink: /docs/v5-0-migration
2626
Also, the related part of a [workaround](https://github.com/operator-framework/java-operator-sdk/blob/main/operator-framework/src/test/java/io/javaoperatorsdk/operator/StatusPatchSSAMigrationIT.java#L110-L116).
2727
4. `ManagedDependentResourceContext` has been renamed to `ManagedWorkflowAndDependentResourceContext` and is accessed
2828
via the accordingly renamed `managedWorkflowAndDependentResourceContext` method.
29+
5. `ResourceDiscriminator` was removed. In most of the cases you can just delete the discriminator, everything should
30+
work without it by default. To optimize and handle special cases see the relevant section in [Dependent Resource documentation](/docs/dependent-resources#multiple-dependent-resources-of-same-type).

Diff for: operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Context.java

+1-4
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public interface Context<P extends HasMetadata> {
1717
Optional<RetryInfo> getRetryInfo();
1818

1919
default <R> Optional<R> getSecondaryResource(Class<R> expectedType) {
20-
return getSecondaryResource(expectedType, (String) null);
20+
return getSecondaryResource(expectedType, null);
2121
}
2222

2323
<R> Set<R> getSecondaryResources(Class<R> expectedType);
@@ -29,9 +29,6 @@ default <R> Stream<R> getSecondaryResourcesAsStream(Class<R> expectedType) {
2929
@Deprecated(forRemoval = true)
3030
<R> Optional<R> getSecondaryResource(Class<R> expectedType, String eventSourceName);
3131

32-
<R> Optional<R> getSecondaryResource(Class<R> expectedType,
33-
ResourceDiscriminator<R, P> discriminator);
34-
3532
ControllerConfiguration<P> getControllerConfiguration();
3633

3734
/**

Diff for: operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/DefaultContext.java

-6
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,6 @@ public <T> Optional<T> getSecondaryResource(Class<T> expectedType, String eventS
6868
.getSecondaryResource(primaryResource);
6969
}
7070

71-
@Override
72-
public <R> Optional<R> getSecondaryResource(Class<R> expectedType,
73-
ResourceDiscriminator<R, P> discriminator) {
74-
return discriminator.distinguish(expectedType, primaryResource, this);
75-
}
76-
7771
@Override
7872
public ControllerConfiguration<P> getControllerConfiguration() {
7973
return controllerConfiguration;

Diff for: operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/IndexDiscriminator.java

-50
This file was deleted.

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

-11
This file was deleted.

Diff for: operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/ResourceIDMatcherDiscriminator.java

-45
This file was deleted.

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

+6-14
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import io.fabric8.kubernetes.api.model.HasMetadata;
1010
import io.javaoperatorsdk.operator.api.reconciler.Context;
1111
import io.javaoperatorsdk.operator.api.reconciler.Ignore;
12-
import io.javaoperatorsdk.operator.api.reconciler.ResourceDiscriminator;
1312
import io.javaoperatorsdk.operator.api.reconciler.dependent.Deleter;
1413
import io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResource;
1514
import io.javaoperatorsdk.operator.api.reconciler.dependent.NameSetter;
@@ -28,7 +27,6 @@ public abstract class AbstractDependentResource<R, P extends HasMetadata>
2827

2928
protected Creator<R, P> creator;
3029
protected Updater<R, P> updater;
31-
private ResourceDiscriminator<R, P> resourceDiscriminator;
3230
private final DependentResourceReconciler<R, P> dependentResourceReconciler;
3331

3432
protected String name;
@@ -105,16 +103,14 @@ protected ReconcileResult<R> reconcile(P primary, R actualResource, Context<P> c
105103

106104
@Override
107105
public Optional<R> getSecondaryResource(P primary, Context<P> context) {
108-
if (resourceDiscriminator != null) {
109-
return resourceDiscriminator.distinguish(resourceType(), primary, context);
106+
107+
var secondaryResources = context.getSecondaryResources(resourceType());
108+
if (secondaryResources.isEmpty()) {
109+
return Optional.empty();
110110
} else {
111-
var secondaryResources = context.getSecondaryResources(resourceType());
112-
if (secondaryResources.isEmpty()) {
113-
return Optional.empty();
114-
} else {
115-
return selectManagedSecondaryResource(secondaryResources, primary, context);
116-
}
111+
return selectManagedSecondaryResource(secondaryResources, primary, context);
117112
}
113+
118114
}
119115

120116
/**
@@ -205,10 +201,6 @@ protected void handleDelete(P primary, R secondary, Context<P> context) {
205201
"handleDelete method must be implemented if Deleter trait is supported");
206202
}
207203

208-
public void setResourceDiscriminator(ResourceDiscriminator<R, P> resourceDiscriminator) {
209-
this.resourceDiscriminator = resourceDiscriminator;
210-
}
211-
212204
protected boolean isCreatable() {
213205
return creatable;
214206
}

Diff for: operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependent.java

-3
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import java.lang.annotation.Target;
77

88
import io.javaoperatorsdk.operator.api.reconciler.Constants;
9-
import io.javaoperatorsdk.operator.api.reconciler.ResourceDiscriminator;
109
import io.javaoperatorsdk.operator.processing.event.source.filter.GenericFilter;
1110
import io.javaoperatorsdk.operator.processing.event.source.filter.OnAddFilter;
1211
import io.javaoperatorsdk.operator.processing.event.source.filter.OnDeleteFilter;
@@ -70,8 +69,6 @@
7069
*/
7170
Class<? extends GenericFilter> genericFilter() default GenericFilter.class;
7271

73-
Class<? extends ResourceDiscriminator> resourceDiscriminator() default ResourceDiscriminator.class;
74-
7572
/**
7673
* Creates the resource only if did not exist before, this applies only if SSA is used.
7774
*/

Diff for: operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentConverter.java

+1-6
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import io.javaoperatorsdk.operator.api.config.Utils;
99
import io.javaoperatorsdk.operator.api.config.dependent.ConfigurationConverter;
1010
import io.javaoperatorsdk.operator.api.reconciler.Constants;
11-
import io.javaoperatorsdk.operator.api.reconciler.ResourceDiscriminator;
1211
import io.javaoperatorsdk.operator.processing.event.source.filter.GenericFilter;
1312
import io.javaoperatorsdk.operator.processing.event.source.filter.OnAddFilter;
1413
import io.javaoperatorsdk.operator.processing.event.source.filter.OnDeleteFilter;
@@ -33,7 +32,6 @@ public KubernetesDependentResourceConfig<R> configFrom(KubernetesDependent confi
3332
OnUpdateFilter<? extends HasMetadata> onUpdateFilter = null;
3433
OnDeleteFilter<? extends HasMetadata> onDeleteFilter = null;
3534
GenericFilter<? extends HasMetadata> genericFilter = null;
36-
ResourceDiscriminator<?, ?> resourceDiscriminator = null;
3735
Boolean useSSA = null;
3836
if (configAnnotation != null) {
3937
if (!Arrays.equals(KubernetesDependent.DEFAULT_NAMESPACES, configAnnotation.namespaces())) {
@@ -54,16 +52,13 @@ public KubernetesDependentResourceConfig<R> configFrom(KubernetesDependent confi
5452
genericFilter =
5553
Utils.instantiate(configAnnotation.genericFilter(), GenericFilter.class, context);
5654

57-
resourceDiscriminator =
58-
Utils.instantiate(configAnnotation.resourceDiscriminator(), ResourceDiscriminator.class,
59-
context);
6055
createResourceOnlyIfNotExistingWithSSA =
6156
configAnnotation.createResourceOnlyIfNotExistingWithSSA();
6257
useSSA = configAnnotation.useSSA().asBoolean();
6358
}
6459

6560
return new KubernetesDependentResourceConfig(namespaces, labelSelector, configuredNS,
6661
createResourceOnlyIfNotExistingWithSSA,
67-
resourceDiscriminator, useSSA, onAddFilter, onUpdateFilter, onDeleteFilter, genericFilter);
62+
useSSA, onAddFilter, onUpdateFilter, onDeleteFilter, genericFilter);
6863
}
6964
}

Diff for: operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResource.java

-8
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,6 @@ public KubernetesDependentResource(Class<R> resourceType, String name) {
6161
@Override
6262
public void configureWith(KubernetesDependentResourceConfig<R> config) {
6363
this.kubernetesDependentResourceConfig = config;
64-
var discriminator = kubernetesDependentResourceConfig.getResourceDiscriminator();
65-
if (discriminator != null) {
66-
setResourceDiscriminator(discriminator);
67-
}
6864
}
6965

7066
private void configureWith(String labelSelector, Set<String> namespaces,
@@ -259,10 +255,6 @@ protected InformerEventSource<R, P> createEventSource(EventSourceContext<P> cont
259255
onUpdateFilter = kubernetesDependentResourceConfig.onUpdateFilter();
260256
onDeleteFilter = kubernetesDependentResourceConfig.onDeleteFilter();
261257
genericFilter = kubernetesDependentResourceConfig.genericFilter();
262-
var discriminator = kubernetesDependentResourceConfig.getResourceDiscriminator();
263-
if (discriminator != null) {
264-
setResourceDiscriminator(discriminator);
265-
}
266258
configureWith(kubernetesDependentResourceConfig.labelSelector(),
267259
kubernetesDependentResourceConfig.namespaces(),
268260
!kubernetesDependentResourceConfig.wereNamespacesConfigured(), context);

Diff for: operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResourceConfig.java

+2-11
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import java.util.Set;
55

66
import io.javaoperatorsdk.operator.api.reconciler.Constants;
7-
import io.javaoperatorsdk.operator.api.reconciler.ResourceDiscriminator;
87
import io.javaoperatorsdk.operator.processing.event.source.filter.GenericFilter;
98
import io.javaoperatorsdk.operator.processing.event.source.filter.OnAddFilter;
109
import io.javaoperatorsdk.operator.processing.event.source.filter.OnDeleteFilter;
@@ -20,7 +19,6 @@ public class KubernetesDependentResourceConfig<R> {
2019
private String labelSelector;
2120
private final boolean namespacesWereConfigured;
2221
private final boolean createResourceOnlyIfNotExistingWithSSA;
23-
private final ResourceDiscriminator<R, ?> resourceDiscriminator;
2422
private final Boolean useSSA;
2523

2624
private final OnAddFilter<R> onAddFilter;
@@ -31,15 +29,14 @@ public class KubernetesDependentResourceConfig<R> {
3129
public KubernetesDependentResourceConfig() {
3230
this(Constants.SAME_AS_CONTROLLER_NAMESPACES_SET, NO_VALUE_SET, true,
3331
DEFAULT_CREATE_RESOURCE_ONLY_IF_NOT_EXISTING_WITH_SSA,
34-
null, null, null,
32+
null, null,
3533
null, null, null);
3634
}
3735

3836
public KubernetesDependentResourceConfig(Set<String> namespaces,
3937
String labelSelector,
4038
boolean configuredNS,
4139
boolean createResourceOnlyIfNotExistingWithSSA,
42-
ResourceDiscriminator<R, ?> resourceDiscriminator,
4340
Boolean useSSA,
4441
OnAddFilter<R> onAddFilter,
4542
OnUpdateFilter<R> onUpdateFilter,
@@ -52,15 +49,14 @@ public KubernetesDependentResourceConfig(Set<String> namespaces,
5249
this.onUpdateFilter = onUpdateFilter;
5350
this.onDeleteFilter = onDeleteFilter;
5451
this.genericFilter = genericFilter;
55-
this.resourceDiscriminator = resourceDiscriminator;
5652
this.useSSA = useSSA;
5753
}
5854

5955
// use builder instead
6056
@Deprecated(forRemoval = true)
6157
public KubernetesDependentResourceConfig(Set<String> namespaces, String labelSelector) {
6258
this(namespaces, labelSelector, true, DEFAULT_CREATE_RESOURCE_ONLY_IF_NOT_EXISTING_WITH_SSA,
63-
null, null, null,
59+
null, null,
6460
null, null, null);
6561
}
6662

@@ -104,11 +100,6 @@ public GenericFilter<R> genericFilter() {
104100
return genericFilter;
105101
}
106102

107-
@SuppressWarnings("rawtypes")
108-
public ResourceDiscriminator getResourceDiscriminator() {
109-
return resourceDiscriminator;
110-
}
111-
112103
@SuppressWarnings("unused")
113104
protected void setNamespaces(Set<String> namespaces) {
114105
if (!wereNamespacesConfigured() && namespaces != null && !namespaces.isEmpty()) {

Diff for: operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResourceConfigBuilder.java

+1-9
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import java.util.Set;
44

55
import io.javaoperatorsdk.operator.api.reconciler.Constants;
6-
import io.javaoperatorsdk.operator.api.reconciler.ResourceDiscriminator;
76
import io.javaoperatorsdk.operator.processing.event.source.filter.GenericFilter;
87
import io.javaoperatorsdk.operator.processing.event.source.filter.OnAddFilter;
98
import io.javaoperatorsdk.operator.processing.event.source.filter.OnDeleteFilter;
@@ -14,7 +13,6 @@ public final class KubernetesDependentResourceConfigBuilder<R> {
1413
private Set<String> namespaces = Constants.SAME_AS_CONTROLLER_NAMESPACES_SET;
1514
private String labelSelector;
1615
private boolean createResourceOnlyIfNotExistingWithSSA;
17-
private ResourceDiscriminator<R, ?> resourceDiscriminator;
1816
private Boolean useSSA;
1917
private OnAddFilter<R> onAddFilter;
2018
private OnUpdateFilter<R> onUpdateFilter;
@@ -43,12 +41,6 @@ public KubernetesDependentResourceConfigBuilder<R> withCreateResourceOnlyIfNotEx
4341
return this;
4442
}
4543

46-
public KubernetesDependentResourceConfigBuilder<R> withResourceDiscriminator(
47-
ResourceDiscriminator<R, ?> resourceDiscriminator) {
48-
this.resourceDiscriminator = resourceDiscriminator;
49-
return this;
50-
}
51-
5244
public KubernetesDependentResourceConfigBuilder<R> withUseSSA(Boolean useSSA) {
5345
this.useSSA = useSSA;
5446
return this;
@@ -80,7 +72,7 @@ public KubernetesDependentResourceConfigBuilder<R> withGenericFilter(
8072
public KubernetesDependentResourceConfig<R> build() {
8173
return new KubernetesDependentResourceConfig<>(namespaces, labelSelector,
8274
namespaces != Constants.SAME_AS_CONTROLLER_NAMESPACES_SET,
83-
createResourceOnlyIfNotExistingWithSSA, resourceDiscriminator, useSSA, onAddFilter,
75+
createResourceOnlyIfNotExistingWithSSA, useSSA, onAddFilter,
8476
onUpdateFilter, onDeleteFilter, genericFilter);
8577
}
8678
}

0 commit comments

Comments
 (0)