Skip to content

Commit 0c05521

Browse files
committed
feat: use event source in dependent resource
1 parent 9c1be9d commit 0c05521

20 files changed

+59
-97
lines changed

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/AnnotationControllerConfiguration.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ public List<DependentResourceSpec> getDependentResources() {
248248
instantiateIfNotDefault(dependent.readyPostcondition(), Condition.class, context),
249249
instantiateIfNotDefault(dependent.reconcilePrecondition(), Condition.class, context),
250250
instantiateIfNotDefault(dependent.deletePostcondition(), Condition.class, context),
251-
dependent.provideEventSource());
251+
dependent.useEventSourceWithName());
252252
specsMap.put(name, spec);
253253
}
254254

@@ -287,7 +287,6 @@ private Object createKubernetesResourceConfig(Class<? extends DependentResource>
287287
OnDeleteFilter<? extends HasMetadata> onDeleteFilter = null;
288288
GenericFilter<? extends HasMetadata> genericFilter = null;
289289
ResourceDiscriminator<?, ? extends HasMetadata> resourceDiscriminator = null;
290-
String eventSourceNameToUse = null;
291290
if (kubeDependent != null) {
292291
if (!Arrays.equals(KubernetesDependent.DEFAULT_NAMESPACES,
293292
kubeDependent.namespaces())) {
@@ -314,14 +313,12 @@ private Object createKubernetesResourceConfig(Class<? extends DependentResource>
314313
resourceDiscriminator =
315314
instantiateIfNotDefault(kubeDependent.resourceDiscriminator(),
316315
ResourceDiscriminator.class, context);
317-
eventSourceNameToUse = Constants.NO_VALUE_SET.equals(kubeDependent.eventSourceToUse()) ? null
318-
: kubeDependent.eventSourceToUse();
319316
}
320317

321318
config =
322319
new KubernetesDependentResourceConfig(namespaces, labelSelector, configuredNS,
323320
resourceDiscriminator, onAddFilter,
324-
onUpdateFilter, onDeleteFilter, genericFilter, eventSourceNameToUse);
321+
onUpdateFilter, onDeleteFilter, genericFilter);
325322

326323
return config;
327324
}

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ControllerConfigurationOverrider.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ private void replaceConfig(String name, Object newConfig, DependentResourceSpec<
174174
namedDependentResourceSpecs.put(name,
175175
new DependentResourceSpec<>(current.getDependentResourceClass(), newConfig, name,
176176
current.getDependsOn(), current.getReadyCondition(), current.getReconcileCondition(),
177-
current.getDeletePostCondition(), current.provideEventSource()));
177+
current.getDeletePostCondition(), current.getUseEventSourceWithName()));
178178
}
179179

180180
@SuppressWarnings("unchecked")
@@ -220,7 +220,8 @@ public ControllerConfiguration<R> build() {
220220
KubernetesDependentResourceConfig c) {
221221
return new DependentResourceSpec(spec.getDependentResourceClass(),
222222
c.setNamespaces(namespaces), name, spec.getDependsOn(), spec.getReadyCondition(),
223-
spec.getReconcileCondition(), spec.getDeletePostCondition(), spec.provideEventSource());
223+
spec.getReconcileCondition(), spec.getDeletePostCondition(),
224+
spec.getUseEventSourceWithName());
224225
}
225226

226227
public static <R extends HasMetadata> ControllerConfigurationOverrider<R> override(

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/dependent/DependentResourceSpec.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,20 +23,20 @@ public class DependentResourceSpec<T extends DependentResource<?, ?>, C> {
2323

2424
private final Condition<?, ?> deletePostCondition;
2525

26-
private final boolean provideEventSource;
26+
private final String useEventSourceWithName;
2727

2828
public DependentResourceSpec(Class<T> dependentResourceClass, C dependentResourceConfig,
2929
String name, Set<String> dependsOn, Condition<?, ?> readyCondition,
3030
Condition<?, ?> reconcileCondition, Condition<?, ?> deletePostCondition,
31-
boolean provideEventSource) {
31+
String useEventSourceWithName) {
3232
this.dependentResourceClass = dependentResourceClass;
3333
this.dependentResourceConfig = dependentResourceConfig;
3434
this.name = name;
3535
this.dependsOn = dependsOn;
3636
this.readyCondition = readyCondition;
3737
this.reconcileCondition = reconcileCondition;
3838
this.deletePostCondition = deletePostCondition;
39-
this.provideEventSource = provideEventSource;
39+
this.useEventSourceWithName = useEventSourceWithName;
4040
}
4141

4242
public Class<T> getDependentResourceClass() {
@@ -94,7 +94,7 @@ public Condition getDeletePostCondition() {
9494
return deletePostCondition;
9595
}
9696

97-
public boolean provideEventSource() {
98-
return provideEventSource;
97+
public String getUseEventSourceWithName() {
98+
return useEventSourceWithName;
9999
}
100100
}

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

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

3+
import io.javaoperatorsdk.operator.api.reconciler.Constants;
34
import io.javaoperatorsdk.operator.processing.dependent.workflow.Condition;
45

56
import static io.javaoperatorsdk.operator.api.reconciler.Constants.NO_VALUE_SET;
@@ -59,11 +60,11 @@
5960
String[] dependsOn() default {};
6061

6162
/**
62-
* Setting this to false means that the event source provided by the dependent resource won't be
63-
* used. This is helpful if more dependent resources created for the same type, and want to share
64-
* a common event source. In that case an event source needs to be explicitly registered.
63+
* Setting here a name of the event source means that dependent resource will use an event source
64+
* registered with that name. So won't create one. This is helpful if more dependent resources
65+
* created for the same type, and want to share a common event source.
6566
*
66-
* @return if the event source (if any) provided by the dependent resource should be used or not.
67+
* @return event source name (if any) provided by the dependent resource should be used.
6768
*/
68-
boolean provideEventSource() default true;
69+
String useEventSourceWithName() default NO_VALUE_SET;
6970
}

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

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,7 @@ default Optional<ResourceEventSource<R, P>> eventSource(
4949
return Optional.empty();
5050
}
5151

52-
/**
53-
* Calling this method, instructs the implementation to not provide an event source, even if it
54-
* normally does.
55-
*/
56-
void doNotProvideEventSource();
57-
52+
void useEventSourceWithName(String name);
5853

5954
default Optional<R> getSecondaryResource(P primary, Context<P> context) {
6055
return Optional.empty();

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

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,11 @@
99

1010
import io.fabric8.kubernetes.api.model.HasMetadata;
1111
import io.javaoperatorsdk.operator.api.reconciler.Context;
12-
import io.javaoperatorsdk.operator.api.reconciler.EventSourceContext;
1312
import io.javaoperatorsdk.operator.api.reconciler.Ignore;
1413
import io.javaoperatorsdk.operator.api.reconciler.ResourceDiscriminator;
1514
import io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResource;
1615
import io.javaoperatorsdk.operator.api.reconciler.dependent.ReconcileResult;
1716
import io.javaoperatorsdk.operator.processing.event.ResourceID;
18-
import io.javaoperatorsdk.operator.processing.event.source.ResourceEventSource;
1917

2018
@Ignore
2119
public abstract class AbstractDependentResource<R, P extends HasMetadata>
@@ -29,7 +27,6 @@ public abstract class AbstractDependentResource<R, P extends HasMetadata>
2927
protected Creator<R, P> creator;
3028
protected Updater<R, P> updater;
3129
protected BulkDependentResource<R, P> bulkDependentResource;
32-
private boolean returnEventSource = true;
3330

3431
protected List<ResourceDiscriminator<R, P>> resourceDiscriminator = new ArrayList<>(1);
3532

@@ -41,23 +38,6 @@ public AbstractDependentResource() {
4138
bulkDependentResource = bulk ? (BulkDependentResource<R, P>) this : null;
4239
}
4340

44-
@Override
45-
public void doNotProvideEventSource() {
46-
this.returnEventSource = false;
47-
}
48-
49-
@Override
50-
public Optional<ResourceEventSource<R, P>> eventSource(EventSourceContext<P> eventSourceContext) {
51-
if (!returnEventSource) {
52-
return Optional.empty();
53-
} else {
54-
return Optional.of(provideEventSource(eventSourceContext));
55-
}
56-
}
57-
58-
protected abstract ResourceEventSource<R, P> provideEventSource(
59-
EventSourceContext<P> eventSourceContext);
60-
6141
@Override
6242
public ReconcileResult<R> reconcile(P primary, Context<P> context) {
6343
if (bulk) {
@@ -239,7 +219,4 @@ protected int lastKnownBulkSize() {
239219
return resourceDiscriminator.size();
240220
}
241221

242-
protected boolean getReturnEventSource() {
243-
return returnEventSource;
244-
}
245222
}

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

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -26,37 +26,33 @@ public abstract class AbstractEventSourceHolderDependentResource<R, P extends Ha
2626
protected OnUpdateFilter<R> onUpdateFilter;
2727
protected OnDeleteFilter<R> onDeleteFilter;
2828
protected GenericFilter<R> genericFilter;
29-
protected String eventSourceToUse;
29+
protected String eventSourceNameToUse;
3030

3131
protected AbstractEventSourceHolderDependentResource(Class<R> resourceType) {
3232
this.resourceType = resourceType;
3333
}
3434

3535

36-
public ResourceEventSource<R, P> provideEventSource(EventSourceContext<P> context) {
36+
public Optional<ResourceEventSource<R, P>> eventSource(EventSourceContext<P> context) {
3737
// some sub-classes (e.g. KubernetesDependentResource) can have their event source created
3838
// before this method is called in the managed case, so only create the event source if it
3939
// hasn't already been set.
4040
// The filters are applied automatically only if event source is created automatically. So if an
4141
// event source
4242
// is shared between dependent resources this does not override the existing filters.
43-
if (eventSource == null) {
43+
if (eventSource == null && eventSourceNameToUse == null) {
4444
setEventSource(createEventSource(context));
4545
applyFilters();
4646
}
47-
return eventSource;
47+
return Optional.ofNullable(eventSource);
4848
}
4949

5050
@SuppressWarnings("unchecked")
5151
@Override
5252
public void selectEventSources(EventSourceRetriever<P> eventSourceRetriever) {
53-
if (!getReturnEventSource()) {
54-
if (eventSourceToUse != null) {
55-
setEventSource(
56-
(T) eventSourceRetriever.getResourceEventSourceFor(resourceType(), eventSourceToUse));
57-
} else {
58-
setEventSource((T) eventSourceRetriever.getResourceEventSourceFor(resourceType()));
59-
}
53+
if (eventSourceNameToUse != null) {
54+
setEventSource(
55+
(T) eventSourceRetriever.getResourceEventSourceFor(resourceType(), eventSourceNameToUse));
6056
}
6157
}
6258

@@ -65,6 +61,11 @@ public T initEventSource(EventSourceContext<P> context) {
6561
return (T) eventSource(context).orElseThrow();
6662
}
6763

64+
@Override
65+
public void useEventSourceWithName(String name) {
66+
this.eventSourceNameToUse = name;
67+
}
68+
6869
@Override
6970
public Class<R> resourceType() {
7071
return resourceType;
@@ -117,9 +118,9 @@ public void setOnDeleteFilter(OnDeleteFilter<R> onDeleteFilter) {
117118
this.onDeleteFilter = onDeleteFilter;
118119
}
119120

120-
public AbstractEventSourceHolderDependentResource<R, P, T> setEventSourceToUse(
121-
String eventSourceToUse) {
122-
this.eventSourceToUse = eventSourceToUse;
121+
public AbstractEventSourceHolderDependentResource<R, P, T> setEventSourceNameToUse(
122+
String eventSourceNameToUse) {
123+
this.eventSourceNameToUse = eventSourceNameToUse;
123124
return this;
124125
}
125126
}

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,5 +73,4 @@
7373

7474
Class<? extends ResourceDiscriminator> resourceDiscriminator() default ResourceDiscriminator.class;
7575

76-
String eventSourceToUse() default NO_VALUE_SET;
7776
}

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,6 @@ public void configureWith(KubernetesDependentResourceConfig<R> config) {
6060
if (discriminator != null) {
6161
setResourceDiscriminator(discriminator);
6262
}
63-
config.getEventSourceToUse().ifPresent(n -> {
64-
doNotProvideEventSource();
65-
setEventSourceToUse(n);
66-
});
6763
}
6864

6965
private void configureWith(String labelSelector, Set<String> namespaces,

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

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package io.javaoperatorsdk.operator.processing.dependent.kubernetes;
22

3-
import java.util.Optional;
43
import java.util.Set;
54

65
import io.javaoperatorsdk.operator.api.reconciler.Constants;
@@ -18,7 +17,6 @@ public class KubernetesDependentResourceConfig<R> {
1817
private String labelSelector = NO_VALUE_SET;
1918
private boolean namespacesWereConfigured = false;
2019
private ResourceDiscriminator<R, ?> resourceDiscriminator;
21-
private String eventSourceToUse;
2220

2321
private OnAddFilter<R> onAddFilter;
2422

@@ -34,7 +32,7 @@ public KubernetesDependentResourceConfig(Set<String> namespaces, String labelSel
3432
boolean configuredNS, ResourceDiscriminator<R, ?> resourceDiscriminator,
3533
OnAddFilter<R> onAddFilter,
3634
OnUpdateFilter<R> onUpdateFilter,
37-
OnDeleteFilter<R> onDeleteFilter, GenericFilter<R> genericFilter, String eventSourceToUse) {
35+
OnDeleteFilter<R> onDeleteFilter, GenericFilter<R> genericFilter) {
3836
this.namespaces = namespaces;
3937
this.labelSelector = labelSelector;
4038
this.namespacesWereConfigured = configuredNS;
@@ -43,12 +41,11 @@ public KubernetesDependentResourceConfig(Set<String> namespaces, String labelSel
4341
this.onDeleteFilter = onDeleteFilter;
4442
this.genericFilter = genericFilter;
4543
this.resourceDiscriminator = resourceDiscriminator;
46-
this.eventSourceToUse = eventSourceToUse;
4744
}
4845

4946
public KubernetesDependentResourceConfig(Set<String> namespaces, String labelSelector) {
5047
this(namespaces, labelSelector, true, null, null, null,
51-
null, null, null);
48+
null, null);
5249
}
5350

5451
public KubernetesDependentResourceConfig<R> setNamespaces(Set<String> namespaces) {
@@ -97,7 +94,4 @@ public ResourceDiscriminator getResourceDiscriminator() {
9794
return resourceDiscriminator;
9895
}
9996

100-
public Optional<String> getEventSourceToUse() {
101-
return Optional.ofNullable(eventSourceToUse);
102-
}
10397
}

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import io.javaoperatorsdk.operator.OperatorException;
1515
import io.javaoperatorsdk.operator.api.config.ConfigurationServiceProvider;
1616
import io.javaoperatorsdk.operator.api.config.dependent.DependentResourceSpec;
17+
import io.javaoperatorsdk.operator.api.reconciler.Constants;
1718
import io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResource;
1819
import io.javaoperatorsdk.operator.api.reconciler.dependent.managed.DependentResourceConfigurator;
1920
import io.javaoperatorsdk.operator.api.reconciler.dependent.managed.KubernetesClientAware;
@@ -81,8 +82,9 @@ public DependentResource createAndConfigureFrom(DependentResourceSpec spec,
8182
if (dependentResource instanceof KubernetesClientAware) {
8283
((KubernetesClientAware) dependentResource).setKubernetesClient(client);
8384
}
84-
if (!spec.provideEventSource()) {
85-
dependentResource.doNotProvideEventSource();
85+
if (!Constants.NO_VALUE_SET.equals(spec.getUseEventSourceWithName())
86+
&& spec.getUseEventSourceWithName() != null) {
87+
dependentResource.useEventSourceWithName(spec.getUseEventSourceWithName());
8688
}
8789
if (dependentResource instanceof DependentResourceConfigurator) {
8890
final var configurator = (DependentResourceConfigurator) dependentResource;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ public Class<Object> resourceType() {
8282
}
8383

8484
@Override
85-
public void doNotProvideEventSource() {}
85+
public void useEventSourceWithName(String name) {}
8686
}
8787
}
8888

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

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,7 @@
77
import io.fabric8.kubernetes.api.model.ConfigMap;
88
import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
99
import io.javaoperatorsdk.operator.api.reconciler.Context;
10-
import io.javaoperatorsdk.operator.api.reconciler.EventSourceContext;
1110
import io.javaoperatorsdk.operator.processing.event.ResourceID;
12-
import io.javaoperatorsdk.operator.processing.event.source.ResourceEventSource;
1311
import io.javaoperatorsdk.operator.sample.simple.TestCustomResource;
1412

1513
import static org.junit.jupiter.api.Assertions.*;
@@ -81,10 +79,7 @@ public Class<ConfigMap> resourceType() {
8179
}
8280

8381
@Override
84-
protected ResourceEventSource<ConfigMap, TestCustomResource> provideEventSource(
85-
EventSourceContext<TestCustomResource> eventSourceContext) {
86-
return null;
87-
}
82+
public void useEventSourceWithName(String name) {}
8883

8984
@Override
9085
public Optional<ConfigMap> getSecondaryResource(TestCustomResource primary,

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public Class<Deployment> resourceType() {
2121
}
2222

2323
@Override
24-
public void doNotProvideEventSource() {}
24+
public void useEventSourceWithName(String name) {}
2525

2626
}
2727

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public Class<String> resourceType() {
4949
}
5050

5151
@Override
52-
public void doNotProvideEventSource() {}
52+
public void useEventSourceWithName(String name) {}
5353

5454
@Override
5555
public String toString() {
@@ -111,7 +111,7 @@ public Class<String> resourceType() {
111111
}
112112

113113
@Override
114-
public void doNotProvideEventSource() {}
114+
public void useEventSourceWithName(String name) {}
115115

116116
@Override
117117
public String toString() {

0 commit comments

Comments
 (0)