Skip to content

Commit 06c2fbc

Browse files
committed
wip
1 parent bc3a8b7 commit 06c2fbc

File tree

11 files changed

+99
-55
lines changed

11 files changed

+99
-55
lines changed

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

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,17 @@ public interface Context<P extends HasMetadata> {
1111

1212
Optional<RetryInfo> getRetryInfo();
1313

14-
default <T> Optional<T> getSecondaryResource(Class<T> expectedType) {
15-
return getSecondaryResource(expectedType, null);
14+
default <R> Optional<R> getSecondaryResource(Class<R> expectedType) {
15+
return getSecondaryResource(expectedType, (String) null);
1616
}
1717

18-
<T> Set<T> getSecondaryResources(Class<T> expectedType);
18+
<R> Set<R> getSecondaryResources(Class<R> expectedType);
1919

2020
@Deprecated(forRemoval = true)
21-
<T> Optional<T> getSecondaryResource(Class<T> expectedType, String eventSourceName);
21+
<R> Optional<R> getSecondaryResource(Class<R> expectedType, String eventSourceName);
22+
23+
<R> Optional<R> getSecondaryResource(Class<R> expectedType,
24+
ResourceDiscriminator<R, P> discriminator);
2225

2326
ControllerConfiguration<P> getControllerConfiguration();
2427

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,13 @@ public <T> Optional<T> getSecondaryResource(Class<T> expectedType, String eventS
4747
.getSecondaryResource(primaryResource);
4848
}
4949

50+
// todo implement
51+
@Override
52+
public <R> Optional<R> getSecondaryResource(Class<R> expectedType,
53+
ResourceDiscriminator<R, P> discriminator) {
54+
return Optional.empty();
55+
}
56+
5057
@Override
5158
public ControllerConfiguration<P> getControllerConfiguration() {
5259
return controllerConfiguration;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package io.javaoperatorsdk.operator.api.reconciler;
2+
3+
import java.util.Optional;
4+
5+
import io.fabric8.kubernetes.api.model.HasMetadata;
6+
import io.javaoperatorsdk.operator.processing.event.EventSourceRetriever;
7+
8+
// todo is discriminator a good name? it not just discriminates but also reads from cache
9+
public interface ResourceDiscriminator<R, P extends HasMetadata> {
10+
11+
Optional<R> distinguish(Class<R> resource, Context<P> context,
12+
EventSourceRetriever<P> eventSourceManager);
13+
14+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package io.javaoperatorsdk.operator.api.reconciler;
2+
3+
import java.util.Optional;
4+
import java.util.Set;
5+
6+
import io.fabric8.kubernetes.api.model.HasMetadata;
7+
import io.javaoperatorsdk.operator.processing.event.EventSourceRetriever;
8+
9+
public abstract class ResourceListDiscriminator<R, P extends HasMetadata>
10+
implements ResourceDiscriminator<R, P> {
11+
@Override
12+
public Optional<R> distinguish(Class<R> resource, Context<P> context,
13+
EventSourceRetriever<P> eventSourceManager) {
14+
var resources = context.getSecondaryResources(resource);
15+
return distinguish(resources);
16+
}
17+
18+
abstract Optional<R> distinguish(Set<R> resourceList);
19+
}

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import io.fabric8.kubernetes.api.model.HasMetadata;
44
import io.javaoperatorsdk.operator.api.reconciler.Context;
5-
import io.javaoperatorsdk.operator.processing.ResourceOwner;
65

76
/**
87
* An interface to implement and provide dependent resource support.

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

Lines changed: 0 additions & 26 deletions
This file was deleted.

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

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -23,19 +23,20 @@
2323
import io.javaoperatorsdk.operator.processing.event.source.controller.ResourceAction;
2424
import io.javaoperatorsdk.operator.processing.event.source.timer.TimerEventSource;
2525

26-
public class EventSourceManager<R extends HasMetadata> implements LifecycleAware {
26+
public class EventSourceManager<P extends HasMetadata>
27+
implements LifecycleAware, EventSourceRetriever<P> {
2728

2829
private static final Logger log = LoggerFactory.getLogger(EventSourceManager.class);
2930

30-
private final EventSources<R> eventSources;
31-
private final EventProcessor<R> eventProcessor;
32-
private final Controller<R> controller;
31+
private final EventSources<P> eventSources;
32+
private final EventProcessor<P> eventProcessor;
33+
private final Controller<P> controller;
3334

34-
public EventSourceManager(Controller<R> controller) {
35+
public EventSourceManager(Controller<P> controller) {
3536
this(controller, new EventSources<>());
3637
}
3738

38-
EventSourceManager(Controller<R> controller, EventSources<R> eventSources) {
39+
EventSourceManager(Controller<P> controller, EventSources<P> eventSources) {
3940
this.eventSources = eventSources;
4041
this.controller = controller;
4142
// controller event source needs to be available before we create the event processor
@@ -132,10 +133,10 @@ public final synchronized void registerEventSource(String name, EventSource even
132133
}
133134

134135
@SuppressWarnings("unchecked")
135-
public void broadcastOnResourceEvent(ResourceAction action, R resource, R oldResource) {
136+
public void broadcastOnResourceEvent(ResourceAction action, P resource, P oldResource) {
136137
eventSources.additionalNamedEventSources().forEach(eventSource -> {
137138
if (eventSource instanceof ResourceEventAware) {
138-
var lifecycleAwareES = ((ResourceEventAware<R>) eventSource);
139+
var lifecycleAwareES = ((ResourceEventAware<P>) eventSource);
139140
switch (action) {
140141
case ADDED:
141142
lifecycleAwareES.onResourceCreated(resource);
@@ -175,30 +176,37 @@ public Set<EventSource> getRegisteredEventSources() {
175176
.collect(Collectors.toCollection(LinkedHashSet::new));
176177
}
177178

178-
public ControllerResourceEventSource<R> getControllerResourceEventSource() {
179+
public ControllerResourceEventSource<P> getControllerResourceEventSource() {
179180
return eventSources.controllerResourceEventSource();
180181
}
181182

182-
<S> ResourceEventSource<S, R> getResourceEventSourceFor(
183-
Class<S> dependentType) {
183+
@Override
184+
public <R> ResourceEventSource<R, P> getResourceEventSourceFor(
185+
Class<R> dependentType) {
184186
return getResourceEventSourceFor(dependentType, null);
185187
}
186188

187-
public <S> List<ResourceEventSource<S, R>> getEventSourcesFor(Class<S> dependentType) {
189+
public <R> List<ResourceEventSource<R, P>> getResourceEventSourcesFor(Class<R> dependentType) {
188190
return eventSources.getEventSources(dependentType);
189191
}
190192

191-
public <S> ResourceEventSource<S, R> getResourceEventSourceFor(
192-
Class<S> dependentType, String qualifier) {
193+
@Deprecated
194+
public <R> List<ResourceEventSource<R, P>> getEventSourcesFor(Class<R> dependentType) {
195+
return eventSources.getEventSources(dependentType);
196+
}
197+
198+
@Override
199+
public <R> ResourceEventSource<R, P> getResourceEventSourceFor(
200+
Class<R> dependentType, String qualifier) {
193201
Objects.requireNonNull(dependentType, "dependentType is Mandatory");
194202
return eventSources.get(dependentType, qualifier);
195203
}
196204

197-
TimerEventSource<R> retryEventSource() {
205+
TimerEventSource<P> retryEventSource() {
198206
return eventSources.retryEventSource();
199207
}
200208

201-
Controller<R> getController() {
209+
Controller<P> getController() {
202210
return controller;
203211
}
204212
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package io.javaoperatorsdk.operator.processing.event;
2+
3+
import java.util.List;
4+
5+
import io.fabric8.kubernetes.api.model.HasMetadata;
6+
import io.javaoperatorsdk.operator.processing.event.source.ResourceEventSource;
7+
8+
public interface EventSourceRetriever<P extends HasMetadata> {
9+
10+
<R> ResourceEventSource<R, P> getResourceEventSourceFor(
11+
Class<R> dependentType);
12+
13+
<R> ResourceEventSource<R, P> getResourceEventSourceFor(
14+
Class<R> dependentType, String qualifier);
15+
16+
<R> List<ResourceEventSource<R, P>> getResourceEventSourcesFor(Class<R> dependentType);
17+
18+
}

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88

99
import io.fabric8.kubernetes.api.model.HasMetadata;
1010
import io.javaoperatorsdk.operator.processing.Controller;
11-
import io.javaoperatorsdk.operator.processing.ResourceOwner;
1211
import io.javaoperatorsdk.operator.processing.event.source.EventSource;
1312
import io.javaoperatorsdk.operator.processing.event.source.ResourceEventSource;
1413
import io.javaoperatorsdk.operator.processing.event.source.controller.ControllerResourceEventSource;
@@ -86,8 +85,8 @@ public void add(String name, EventSource eventSource) {
8685

8786
@SuppressWarnings("rawtypes")
8887
private Class<?> getResourceType(EventSource source) {
89-
return source instanceof ResourceOwner
90-
? ((ResourceOwner) source).resourceType()
88+
return source instanceof ResourceEventSource
89+
? ((ResourceEventSource) source).resourceType()
9190
: source.getClass();
9291
}
9392

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

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,19 @@
44
import java.util.Set;
55

66
import io.fabric8.kubernetes.api.model.HasMetadata;
7-
import io.javaoperatorsdk.operator.processing.ResourceOwner;
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;
1110
import io.javaoperatorsdk.operator.processing.event.source.filter.OnUpdateFilter;
1211

13-
public interface ResourceEventSource<R, P extends HasMetadata> extends EventSource,
14-
ResourceOwner<R, P> {
12+
public interface ResourceEventSource<R, P extends HasMetadata> extends EventSource {
13+
14+
/**
15+
* Retrieves the resource type associated with this ResourceOwner
16+
*
17+
* @return the resource type associated with this ResourceOwner
18+
*/
19+
Class<R> resourceType();
1520

1621
default Optional<R> getSecondaryResource(P primary) {
1722
var resources = getSecondaryResources(primary);

sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageDependentsWorkflowReconciler.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,4 @@ private void initDependentResources(KubernetesClient client) {
9393
});
9494
}
9595

96-
97-
9896
}

0 commit comments

Comments
 (0)