Skip to content

Commit 3a10383

Browse files
authored
fix: EventSourceManager and ResourceController interface enhancements (#618)
1 parent 892880b commit 3a10383

File tree

7 files changed

+34
-34
lines changed

7 files changed

+34
-34
lines changed
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package io.javaoperatorsdk.operator.api;
2+
3+
import io.fabric8.kubernetes.client.CustomResource;
4+
import io.javaoperatorsdk.operator.processing.event.EventSourceManager;
5+
6+
public interface EventSourceInitializer<T extends CustomResource<?, ?>> {
7+
8+
/**
9+
* In this typically you might want to register event sources. But can access
10+
* CustomResourceEventSource, what might be handy for some edge cases.
11+
*
12+
* @param eventSourceManager the {@link EventSourceManager} where event sources can be registered.
13+
*/
14+
void prepareEventSources(EventSourceManager<T> eventSourceManager);
15+
16+
}

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

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

33
import io.fabric8.kubernetes.client.CustomResource;
4-
import io.javaoperatorsdk.operator.processing.event.EventSourceManager;
54

65
public interface ResourceController<R extends CustomResource> {
76

@@ -49,11 +48,4 @@ default DeleteControl deleteResource(R resource, Context<R> context) {
4948
*/
5049
UpdateControl<R> createOrUpdateResource(R resource, Context<R> context);
5150

52-
/**
53-
* In init typically you might want to register event sources.
54-
*
55-
* @param eventSourceManager the {@link EventSourceManager} which handles this controller and with
56-
* which event sources can be registered
57-
*/
58-
default void init(EventSourceManager eventSourceManager) {}
5951
}

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

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,20 +14,17 @@
1414
import io.javaoperatorsdk.operator.Metrics.ControllerExecution;
1515
import io.javaoperatorsdk.operator.MissingCRDException;
1616
import io.javaoperatorsdk.operator.OperatorException;
17-
import io.javaoperatorsdk.operator.api.Context;
18-
import io.javaoperatorsdk.operator.api.DeleteControl;
19-
import io.javaoperatorsdk.operator.api.ResourceController;
20-
import io.javaoperatorsdk.operator.api.UpdateControl;
17+
import io.javaoperatorsdk.operator.api.*;
2118
import io.javaoperatorsdk.operator.api.config.ControllerConfiguration;
2219
import io.javaoperatorsdk.operator.processing.event.DefaultEventSourceManager;
2320
import io.javaoperatorsdk.operator.processing.event.EventSourceManager;
2421

2522
public class ConfiguredController<R extends CustomResource<?, ?>> implements ResourceController<R>,
26-
Closeable {
23+
Closeable, EventSourceInitializer {
2724
private final ResourceController<R> controller;
2825
private final ControllerConfiguration<R> configuration;
2926
private final KubernetesClient kubernetesClient;
30-
private EventSourceManager eventSourceManager;
27+
private DefaultEventSourceManager eventSourceManager;
3128

3229
public ConfiguredController(ResourceController<R> controller,
3330
ControllerConfiguration<R> configuration,
@@ -97,7 +94,7 @@ public UpdateControl<R> execute() {
9794
}
9895

9996
@Override
100-
public void init(EventSourceManager eventSourceManager) {
97+
public void prepareEventSources(EventSourceManager eventSourceManager) {
10198
throw new UnsupportedOperationException("This method should never be called directly");
10299
}
103100

@@ -169,7 +166,9 @@ public void start() throws OperatorException {
169166

170167
try {
171168
eventSourceManager = new DefaultEventSourceManager<>(this);
172-
controller.init(eventSourceManager);
169+
if (controller instanceof EventSourceInitializer) {
170+
((EventSourceInitializer) controller).prepareEventSources(eventSourceManager);
171+
}
173172
} catch (MissingCRDException e) {
174173
throwMissingCRDException(crdName, specVersion, controllerName);
175174
}

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

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

3+
import java.io.Closeable;
34
import java.util.*;
45
import java.util.concurrent.locks.ReentrantLock;
56

@@ -15,7 +16,7 @@
1516
import io.javaoperatorsdk.operator.processing.event.internal.TimerEventSource;
1617

1718
public class DefaultEventSourceManager<R extends CustomResource<?, ?>>
18-
implements EventSourceManager {
19+
implements EventSourceManager<R>, Closeable {
1920

2021
private static final Logger log = LoggerFactory.getLogger(DefaultEventSourceManager.class);
2122

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

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
package io.javaoperatorsdk.operator.processing.event;
22

3-
import java.io.Closeable;
4-
import java.io.IOException;
53
import java.util.Set;
64

75
import io.fabric8.kubernetes.client.CustomResource;
86
import io.javaoperatorsdk.operator.OperatorException;
97
import io.javaoperatorsdk.operator.processing.event.internal.CustomResourceEventSource;
108

11-
public interface EventSourceManager<T extends CustomResource<?, ?>> extends Closeable {
9+
public interface EventSourceManager<T extends CustomResource<?, ?>> {
1210

1311
/**
1412
* Add the {@link EventSource} identified by the given <code>name</code> to the event manager.
@@ -25,6 +23,4 @@ void registerEventSource(EventSource eventSource)
2523

2624
CustomResourceEventSource<T> getCustomResourceEventSource();
2725

28-
@Override
29-
default void close() throws IOException {}
3026
}

operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/event/EventSourceTestCustomResourceController.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,15 @@
77

88
import io.fabric8.kubernetes.client.CustomResource;
99
import io.javaoperatorsdk.operator.ControllerUtils;
10-
import io.javaoperatorsdk.operator.api.Context;
11-
import io.javaoperatorsdk.operator.api.Controller;
12-
import io.javaoperatorsdk.operator.api.ResourceController;
13-
import io.javaoperatorsdk.operator.api.UpdateControl;
10+
import io.javaoperatorsdk.operator.api.*;
1411
import io.javaoperatorsdk.operator.processing.event.EventSourceManager;
1512
import io.javaoperatorsdk.operator.processing.event.internal.TimerEventSource;
1613
import io.javaoperatorsdk.operator.support.TestExecutionInfoProvider;
1714

1815
@Controller
1916
public class EventSourceTestCustomResourceController
20-
implements ResourceController<EventSourceTestCustomResource>, TestExecutionInfoProvider {
17+
implements ResourceController<EventSourceTestCustomResource>, EventSourceInitializer,
18+
TestExecutionInfoProvider {
2119

2220
public static final String FINALIZER_NAME =
2321
ControllerUtils.getDefaultFinalizerName(
@@ -31,7 +29,7 @@ public class EventSourceTestCustomResourceController
3129
new TimerEventSource<>();
3230

3331
@Override
34-
public void init(EventSourceManager eventSourceManager) {
32+
public void prepareEventSources(EventSourceManager eventSourceManager) {
3533
eventSourceManager.registerEventSource(timerEventSource);
3634
}
3735

operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/informereventsource/InformerEventSourceTestCustomResourceController.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,7 @@
55

66
import io.fabric8.kubernetes.api.model.ConfigMap;
77
import io.fabric8.kubernetes.client.KubernetesClient;
8-
import io.javaoperatorsdk.operator.api.Context;
9-
import io.javaoperatorsdk.operator.api.Controller;
10-
import io.javaoperatorsdk.operator.api.ResourceController;
11-
import io.javaoperatorsdk.operator.api.UpdateControl;
8+
import io.javaoperatorsdk.operator.api.*;
129
import io.javaoperatorsdk.operator.junit.KubernetesClientAware;
1310
import io.javaoperatorsdk.operator.processing.event.EventSourceManager;
1411
import io.javaoperatorsdk.operator.processing.event.internal.InformerEventSource;
@@ -22,7 +19,8 @@
2219
*/
2320
@Controller(finalizerName = NO_FINALIZER)
2421
public class InformerEventSourceTestCustomResourceController implements
25-
ResourceController<InformerEventSourceTestCustomResource>, KubernetesClientAware {
22+
ResourceController<InformerEventSourceTestCustomResource>, KubernetesClientAware,
23+
EventSourceInitializer {
2624

2725
private static final Logger LOGGER =
2826
LoggerFactory.getLogger(InformerEventSourceTestCustomResourceController.class);
@@ -34,7 +32,7 @@ public class InformerEventSourceTestCustomResourceController implements
3432
private InformerEventSource<ConfigMap> eventSource;
3533

3634
@Override
37-
public void init(EventSourceManager eventSourceManager) {
35+
public void prepareEventSources(EventSourceManager eventSourceManager) {
3836
eventSource = new InformerEventSource<>(kubernetesClient, ConfigMap.class,
3937
Mappers.fromAnnotation(RELATED_RESOURCE_UID));
4038
eventSourceManager.registerEventSource(eventSource);

0 commit comments

Comments
 (0)