Skip to content

Commit efc0f05

Browse files
csvirimetacosm
andauthored
refactor: rename internal package to source, moving LifecycleAware (#716)
Co-authored-by: Chris Laprun <[email protected]>
1 parent 2e01de0 commit efc0f05

40 files changed

+158
-181
lines changed

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/Operator.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,12 @@
1313
import io.fabric8.kubernetes.client.DefaultKubernetesClient;
1414
import io.fabric8.kubernetes.client.KubernetesClient;
1515
import io.fabric8.kubernetes.client.Version;
16-
import io.javaoperatorsdk.operator.api.LifecycleAware;
1716
import io.javaoperatorsdk.operator.api.config.ConfigurationService;
1817
import io.javaoperatorsdk.operator.api.config.ControllerConfiguration;
1918
import io.javaoperatorsdk.operator.api.config.ExecutorServiceManager;
2019
import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
2120
import io.javaoperatorsdk.operator.processing.Controller;
21+
import io.javaoperatorsdk.operator.processing.LifecycleAware;
2222

2323
@SuppressWarnings("rawtypes")
2424
public class Operator implements AutoCloseable, LifecycleAware {

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
import io.fabric8.kubernetes.api.model.HasMetadata;
88
import io.fabric8.kubernetes.client.CustomResource;
99
import io.javaoperatorsdk.operator.ControllerUtils;
10-
import io.javaoperatorsdk.operator.processing.event.internal.ResourceEventFilter;
11-
import io.javaoperatorsdk.operator.processing.event.internal.ResourceEventFilters;
10+
import io.javaoperatorsdk.operator.processing.event.source.ResourceEventFilter;
11+
import io.javaoperatorsdk.operator.processing.event.source.ResourceEventFilters;
1212

1313
public interface ControllerConfiguration<R extends HasMetadata> {
1414

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import java.util.Set;
66

77
import io.fabric8.kubernetes.api.model.HasMetadata;
8-
import io.javaoperatorsdk.operator.processing.event.internal.ResourceEventFilter;
8+
import io.javaoperatorsdk.operator.processing.event.source.ResourceEventFilter;
99

1010
public class ControllerConfigurationOverrider<R extends HasMetadata> {
1111

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

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

66
import io.fabric8.kubernetes.api.model.HasMetadata;
7-
import io.javaoperatorsdk.operator.processing.event.internal.ResourceEventFilter;
7+
import io.javaoperatorsdk.operator.processing.event.source.ResourceEventFilter;
88

99
public class DefaultControllerConfiguration<R extends HasMetadata>
1010
implements ControllerConfiguration<R> {

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import java.lang.annotation.RetentionPolicy;
66
import java.lang.annotation.Target;
77

8-
import io.javaoperatorsdk.operator.processing.event.internal.ResourceEventFilter;
8+
import io.javaoperatorsdk.operator.processing.event.source.ResourceEventFilter;
99

1010
@Retention(RetentionPolicy.RUNTIME)
1111
@Target({ElementType.TYPE})

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package io.javaoperatorsdk.operator.api.reconciler;
22

33
import io.fabric8.kubernetes.api.model.HasMetadata;
4-
import io.javaoperatorsdk.operator.processing.event.EventSourceRegistry;
4+
import io.javaoperatorsdk.operator.processing.event.source.EventSourceRegistry;
55

66
public interface EventSourceInitializer<T extends HasMetadata> {
77

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

+1-11
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import io.javaoperatorsdk.operator.CustomResourceUtils;
1212
import io.javaoperatorsdk.operator.MissingCRDException;
1313
import io.javaoperatorsdk.operator.OperatorException;
14-
import io.javaoperatorsdk.operator.api.LifecycleAware;
1514
import io.javaoperatorsdk.operator.api.config.ControllerConfiguration;
1615
import io.javaoperatorsdk.operator.api.monitoring.Metrics.ControllerExecution;
1716
import io.javaoperatorsdk.operator.api.reconciler.Context;
@@ -20,15 +19,14 @@
2019
import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
2120
import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
2221
import io.javaoperatorsdk.operator.processing.event.EventSourceManager;
23-
import io.javaoperatorsdk.operator.processing.event.EventSourceRegistry;
22+
import io.javaoperatorsdk.operator.processing.event.source.EventSourceRegistry;
2423

2524
public class Controller<R extends HasMetadata> implements Reconciler<R>,
2625
LifecycleAware, EventSourceInitializer<R> {
2726
private final Reconciler<R> reconciler;
2827
private final ControllerConfiguration<R> configuration;
2928
private final KubernetesClient kubernetesClient;
3029
private EventSourceManager<R> eventSourceManager;
31-
private EventProcessor<R> eventProcessor;
3230

3331
public Controller(Reconciler<R> reconciler,
3432
ControllerConfiguration<R> configuration,
@@ -170,10 +168,6 @@ public void start() throws OperatorException {
170168
}
171169

172170
eventSourceManager = new EventSourceManager<>(this);
173-
eventProcessor =
174-
new EventProcessor<>(this, eventSourceManager.getControllerResourceEventSource());
175-
eventProcessor.setEventSourceManager(eventSourceManager);
176-
eventSourceManager.setEventProcessor(eventProcessor);
177171
if (reconciler instanceof EventSourceInitializer) {
178172
((EventSourceInitializer<R>) reconciler).prepareEventSources(eventSourceManager);
179173
}
@@ -183,7 +177,6 @@ public void start() throws OperatorException {
183177
+ controllerName
184178
+ "' is configured to watch the current namespace but it couldn't be inferred from the current configuration.");
185179
}
186-
eventProcessor.start();
187180
eventSourceManager.start();
188181
} catch (MissingCRDException e) {
189182
throwMissingCRDException(crdName, specVersion, controllerName);
@@ -223,8 +216,5 @@ public void stop() {
223216
if (eventSourceManager != null) {
224217
eventSourceManager.stop();
225218
}
226-
if (eventProcessor != null) {
227-
eventProcessor.stop();
228-
}
229219
}
230220
}

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/LifecycleAware.java renamed to operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/LifecycleAware.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package io.javaoperatorsdk.operator.api;
1+
package io.javaoperatorsdk.operator.processing;
22

33
import io.javaoperatorsdk.operator.OperatorException;
44

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/EventMarker.java renamed to operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventMarker.java

+2-5
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
1-
package io.javaoperatorsdk.operator.processing;
1+
package io.javaoperatorsdk.operator.processing.event;
22

33
import java.util.HashMap;
44

5-
import io.javaoperatorsdk.operator.processing.event.Event;
6-
import io.javaoperatorsdk.operator.processing.event.ResourceID;
7-
85
/**
96
* Manages the state of received events. Basically there can be only three distinct states relevant
107
* for event processing. Either an event is received, so we eventually process or no event for
@@ -13,7 +10,7 @@
1310
* events are irrelevant for us from this point. Note that the dependant resources are either
1411
* cleaned up by K8S garbage collection or by the controller implementation for cleanup.
1512
*/
16-
public class EventMarker {
13+
class EventMarker {
1714

1815
public enum EventingState {
1916
/** Event but NOT Delete event present */

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/EventProcessor.java renamed to operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventProcessor.java

+35-35
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package io.javaoperatorsdk.operator.processing;
1+
package io.javaoperatorsdk.operator.processing.event;
22

33
import java.util.HashMap;
44
import java.util.HashSet;
@@ -14,17 +14,16 @@
1414

1515
import io.fabric8.kubernetes.api.model.HasMetadata;
1616
import io.javaoperatorsdk.operator.OperatorException;
17-
import io.javaoperatorsdk.operator.api.LifecycleAware;
1817
import io.javaoperatorsdk.operator.api.config.ConfigurationService;
1918
import io.javaoperatorsdk.operator.api.config.ExecutorServiceManager;
2019
import io.javaoperatorsdk.operator.api.monitoring.Metrics;
2120
import io.javaoperatorsdk.operator.api.reconciler.RetryInfo;
22-
import io.javaoperatorsdk.operator.processing.event.Event;
23-
import io.javaoperatorsdk.operator.processing.event.EventHandler;
24-
import io.javaoperatorsdk.operator.processing.event.EventSourceManager;
25-
import io.javaoperatorsdk.operator.processing.event.ResourceID;
26-
import io.javaoperatorsdk.operator.processing.event.internal.ResourceAction;
27-
import io.javaoperatorsdk.operator.processing.event.internal.ResourceEvent;
21+
import io.javaoperatorsdk.operator.processing.LifecycleAware;
22+
import io.javaoperatorsdk.operator.processing.MDCUtils;
23+
import io.javaoperatorsdk.operator.processing.ResourceCache;
24+
import io.javaoperatorsdk.operator.processing.event.source.ResourceAction;
25+
import io.javaoperatorsdk.operator.processing.event.source.ResourceEvent;
26+
import io.javaoperatorsdk.operator.processing.event.source.TimerEventSource;
2827
import io.javaoperatorsdk.operator.processing.retry.GenericRetry;
2928
import io.javaoperatorsdk.operator.processing.retry.Retry;
3029
import io.javaoperatorsdk.operator.processing.retry.RetryExecution;
@@ -36,8 +35,7 @@
3635
* Event handler that makes sure that events are processed in a "single threaded" way per resource
3736
* UID, while buffering events which are received during an execution.
3837
*/
39-
public class EventProcessor<R extends HasMetadata>
40-
implements EventHandler, LifecycleAware {
38+
class EventProcessor<R extends HasMetadata> implements EventHandler, LifecycleAware {
4139

4240
private static final Logger log = LoggerFactory.getLogger(EventProcessor.class);
4341

@@ -51,32 +49,34 @@ public class EventProcessor<R extends HasMetadata>
5149
private final Metrics metrics;
5250
private volatile boolean running;
5351
private final ResourceCache<R> resourceCache;
54-
private EventSourceManager<R> eventSourceManager;
52+
private final EventSourceManager<R> eventSourceManager;
5553
private final EventMarker eventMarker;
5654

57-
public EventProcessor(Controller<R> controller, ResourceCache<R> resourceCache) {
55+
EventProcessor(EventSourceManager<R> eventSourceManager) {
5856
this(
59-
resourceCache,
57+
eventSourceManager.getControllerResourceEventSource(),
6058
ExecutorServiceManager.instance().executorService(),
61-
controller.getConfiguration().getName(),
62-
new ReconciliationDispatcher<>(controller),
63-
GenericRetry.fromConfiguration(controller.getConfiguration().getRetryConfiguration()),
64-
controller.getConfiguration().getConfigurationService().getMetrics(),
65-
new EventMarker());
59+
eventSourceManager.getController().getConfiguration().getName(),
60+
new ReconciliationDispatcher<>(eventSourceManager.getController()),
61+
GenericRetry.fromConfiguration(
62+
eventSourceManager.getController().getConfiguration().getRetryConfiguration()),
63+
eventSourceManager.getController().getConfiguration().getConfigurationService()
64+
.getMetrics(),
65+
eventSourceManager);
6666
}
6767

6868
EventProcessor(ReconciliationDispatcher<R> reconciliationDispatcher,
69-
ResourceCache<R> resourceCache,
69+
EventSourceManager<R> eventSourceManager,
7070
String relatedControllerName,
71-
Retry retry, EventMarker eventMarker) {
72-
this(resourceCache, null, relatedControllerName, reconciliationDispatcher, retry, null,
73-
eventMarker);
71+
Retry retry) {
72+
this(eventSourceManager.getControllerResourceEventSource(), null, relatedControllerName,
73+
reconciliationDispatcher, retry, null, eventSourceManager);
7474
}
7575

7676
private EventProcessor(ResourceCache<R> resourceCache, ExecutorService executor,
7777
String relatedControllerName,
7878
ReconciliationDispatcher<R> reconciliationDispatcher, Retry retry, Metrics metrics,
79-
EventMarker eventMarker) {
79+
EventSourceManager<R> eventSourceManager) {
8080
this.running = true;
8181
this.executor =
8282
executor == null
@@ -88,11 +88,12 @@ private EventProcessor(ResourceCache<R> resourceCache, ExecutorService executor,
8888
this.retry = retry;
8989
this.resourceCache = resourceCache;
9090
this.metrics = metrics != null ? metrics : Metrics.NOOP;
91-
this.eventMarker = eventMarker;
91+
this.eventMarker = new EventMarker();
92+
this.eventSourceManager = eventSourceManager;
9293
}
9394

94-
public void setEventSourceManager(EventSourceManager<R> eventSourceManager) {
95-
this.eventSourceManager = eventSourceManager;
95+
EventMarker getEventMarker() {
96+
return eventMarker;
9697
}
9798

9899
@Override
@@ -243,9 +244,12 @@ private boolean isCacheReadyForInstantReconciliation(ExecutionScope<R> execution
243244

244245
private void reScheduleExecutionIfInstructed(PostExecutionControl<R> postExecutionControl,
245246
R customResource) {
246-
postExecutionControl.getReScheduleDelay().ifPresent(delay -> eventSourceManager
247-
.getRetryAndRescheduleTimerEventSource()
248-
.scheduleOnce(customResource, delay));
247+
postExecutionControl.getReScheduleDelay()
248+
.ifPresent(delay -> retryEventSource().scheduleOnce(customResource, delay));
249+
}
250+
251+
TimerEventSource<R> retryEventSource() {
252+
return eventSourceManager.retryEventSource();
249253
}
250254

251255
/**
@@ -275,9 +279,7 @@ private void handleRetryOnException(ExecutionScope<R> executionScope,
275279
delay,
276280
customResourceID);
277281
metrics.failedReconciliation(customResourceID, exception);
278-
eventSourceManager
279-
.getRetryAndRescheduleTimerEventSource()
280-
.scheduleOnce(executionScope.getResource(), delay);
282+
retryEventSource().scheduleOnce(executionScope.getResource(), delay);
281283
},
282284
() -> log.error("Exhausted retries for {}", executionScope));
283285
}
@@ -289,9 +291,7 @@ private void cleanupOnSuccessfulExecution(ExecutionScope<R> executionScope) {
289291
if (isRetryConfigured()) {
290292
retryState.remove(executionScope.getCustomResourceID());
291293
}
292-
eventSourceManager
293-
.getRetryAndRescheduleTimerEventSource()
294-
.cancelOnceSchedule(executionScope.getCustomResourceID());
294+
retryEventSource().cancelOnceSchedule(executionScope.getCustomResourceID());
295295
}
296296

297297
private RetryExecution getOrInitRetryExecution(ExecutionScope<R> executionScope) {

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

+25-25
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,12 @@
1212
import io.fabric8.kubernetes.api.model.HasMetadata;
1313
import io.javaoperatorsdk.operator.MissingCRDException;
1414
import io.javaoperatorsdk.operator.OperatorException;
15-
import io.javaoperatorsdk.operator.api.LifecycleAware;
1615
import io.javaoperatorsdk.operator.processing.Controller;
17-
import io.javaoperatorsdk.operator.processing.EventProcessor;
18-
import io.javaoperatorsdk.operator.processing.event.internal.ControllerResourceEventSource;
19-
import io.javaoperatorsdk.operator.processing.event.internal.TimerEventSource;
16+
import io.javaoperatorsdk.operator.processing.LifecycleAware;
17+
import io.javaoperatorsdk.operator.processing.event.source.ControllerResourceEventSource;
18+
import io.javaoperatorsdk.operator.processing.event.source.EventSource;
19+
import io.javaoperatorsdk.operator.processing.event.source.EventSourceRegistry;
20+
import io.javaoperatorsdk.operator.processing.event.source.TimerEventSource;
2021

2122
public class EventSourceManager<R extends HasMetadata>
2223
implements EventSourceRegistry<R>, LifecycleAware {
@@ -25,38 +26,33 @@ public class EventSourceManager<R extends HasMetadata>
2526

2627
private final ReentrantLock lock = new ReentrantLock();
2728
private final Set<EventSource> eventSources = Collections.synchronizedSet(new HashSet<>());
28-
private EventProcessor<R> eventProcessor;
29+
private final EventProcessor<R> eventProcessor;
2930
private TimerEventSource<R> retryAndRescheduleTimerEventSource;
3031
private ControllerResourceEventSource<R> controllerResourceEventSource;
32+
private final Controller<R> controller;
3133

32-
EventSourceManager() {
33-
init();
34+
EventSourceManager(EventProcessor<R> eventProcessor) {
35+
this.eventProcessor = eventProcessor;
36+
controller = null;
37+
initRetryEventSource();
3438
}
3539

3640
public EventSourceManager(Controller<R> controller) {
37-
init();
41+
this.controller = controller;
3842
controllerResourceEventSource = new ControllerResourceEventSource<>(controller);
43+
this.eventProcessor = new EventProcessor<>(this);
3944
registerEventSource(controllerResourceEventSource);
45+
initRetryEventSource();
4046
}
4147

42-
private void init() {
43-
this.retryAndRescheduleTimerEventSource = new TimerEventSource<>();
48+
private void initRetryEventSource() {
49+
retryAndRescheduleTimerEventSource = new TimerEventSource<>();
4450
registerEventSource(retryAndRescheduleTimerEventSource);
4551
}
4652

47-
public EventSourceManager<R> setEventProcessor(EventProcessor<R> eventProcessor) {
48-
this.eventProcessor = eventProcessor;
49-
if (controllerResourceEventSource != null) {
50-
controllerResourceEventSource.setEventHandler(eventProcessor);
51-
}
52-
if (retryAndRescheduleTimerEventSource != null) {
53-
retryAndRescheduleTimerEventSource.setEventHandler(eventProcessor);
54-
}
55-
return this;
56-
}
57-
5853
@Override
5954
public void start() throws OperatorException {
55+
eventProcessor.start();
6056
lock.lock();
6157
try {
6258
log.debug("Starting event sources.");
@@ -88,6 +84,7 @@ public void stop() {
8884
} finally {
8985
lock.unlock();
9086
}
87+
eventProcessor.stop();
9188
}
9289

9390
@Override
@@ -121,10 +118,6 @@ public void cleanupForCustomResource(ResourceID customResourceUid) {
121118
}
122119
}
123120

124-
public TimerEventSource<R> getRetryAndRescheduleTimerEventSource() {
125-
return retryAndRescheduleTimerEventSource;
126-
}
127-
128121
@Override
129122
public Set<EventSource> getRegisteredEventSources() {
130123
return Collections.unmodifiableSet(eventSources);
@@ -135,4 +128,11 @@ public ControllerResourceEventSource<R> getControllerResourceEventSource() {
135128
return controllerResourceEventSource;
136129
}
137130

131+
TimerEventSource<R> retryEventSource() {
132+
return retryAndRescheduleTimerEventSource;
133+
}
134+
135+
Controller<R> getController() {
136+
return controller;
137+
}
138138
}

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/ExecutionScope.java renamed to operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/ExecutionScope.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1-
package io.javaoperatorsdk.operator.processing;
1+
package io.javaoperatorsdk.operator.processing.event;
22

33
import io.fabric8.kubernetes.api.model.HasMetadata;
44
import io.javaoperatorsdk.operator.api.reconciler.RetryInfo;
5-
import io.javaoperatorsdk.operator.processing.event.ResourceID;
65

7-
public class ExecutionScope<R extends HasMetadata> {
6+
class ExecutionScope<R extends HasMetadata> {
87

98
// the latest custom resource from cache
109
private final R resource;

0 commit comments

Comments
 (0)