Skip to content

Commit 112a826

Browse files
authored
Merge pull request #391 from java-operator-sdk/fix-389
Hide CustomResourceFacade, make EventDispatcher & ExecutionScope parameterized
2 parents 265c177 + 786886e commit 112a826

File tree

4 files changed

+38
-33
lines changed

4 files changed

+38
-33
lines changed

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -137,9 +137,7 @@ public <R extends CustomResource> void register(
137137
}
138138

139139
final var client = k8sClient.customResources(resClass);
140-
EventDispatcher dispatcher =
141-
new EventDispatcher(
142-
controller, finalizer, new EventDispatcher.CustomResourceFacade(client));
140+
EventDispatcher<R> dispatcher = new EventDispatcher<>(controller, finalizer, client);
143141

144142
CustomResourceCache customResourceCache = new CustomResourceCache(objectMapper);
145143
DefaultEventHandler defaultEventHandler =

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

Lines changed: 29 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -21,27 +21,36 @@
2121
/**
2222
* Dispatches events to the Controller and handles Finalizers for a single type of Custom Resource.
2323
*/
24-
public class EventDispatcher {
24+
public class EventDispatcher<R extends CustomResource> {
2525

2626
private static final Logger log = LoggerFactory.getLogger(EventDispatcher.class);
2727

28-
private final ResourceController controller;
28+
private final ResourceController<R> controller;
2929
private final String resourceFinalizer;
30-
private final CustomResourceFacade customResourceFacade;
30+
private final CustomResourceFacade<R> customResourceFacade;
3131
private EventSourceManager eventSourceManager;
3232

33-
public EventDispatcher(
34-
ResourceController controller, String finalizer, CustomResourceFacade customResourceFacade) {
33+
EventDispatcher(
34+
ResourceController<R> controller,
35+
String finalizer,
36+
CustomResourceFacade<R> customResourceFacade) {
3537
this.controller = controller;
3638
this.customResourceFacade = customResourceFacade;
3739
this.resourceFinalizer = finalizer;
3840
}
3941

42+
public EventDispatcher(
43+
ResourceController<R> controller,
44+
String finalizer,
45+
MixedOperation<R, KubernetesResourceList<R>, Resource<R>> client) {
46+
this(controller, finalizer, new CustomResourceFacade<>(client));
47+
}
48+
4049
public void setEventSourceManager(EventSourceManager eventSourceManager) {
4150
this.eventSourceManager = eventSourceManager;
4251
}
4352

44-
public PostExecutionControl handleExecution(ExecutionScope executionScope) {
53+
public PostExecutionControl handleExecution(ExecutionScope<R> executionScope) {
4554
try {
4655
return handleDispatch(executionScope);
4756
} catch (RuntimeException e) {
@@ -50,8 +59,8 @@ public PostExecutionControl handleExecution(ExecutionScope executionScope) {
5059
}
5160
}
5261

53-
private PostExecutionControl handleDispatch(ExecutionScope executionScope) {
54-
CustomResource resource = executionScope.getCustomResource();
62+
private PostExecutionControl handleDispatch(ExecutionScope<R> executionScope) {
63+
R resource = executionScope.getCustomResource();
5564
log.debug(
5665
"Handling events: {} for resource {}", executionScope.getEvents(), resource.getMetadata());
5766

@@ -68,8 +77,8 @@ private PostExecutionControl handleDispatch(ExecutionScope executionScope) {
6877
executionScope);
6978
return PostExecutionControl.defaultDispatch();
7079
}
71-
Context context =
72-
new DefaultContext(
80+
Context<R> context =
81+
new DefaultContext<>(
7382
eventSourceManager,
7483
new EventList(executionScope.getEvents()),
7584
executionScope.getRetryInfo());
@@ -81,7 +90,7 @@ private PostExecutionControl handleDispatch(ExecutionScope executionScope) {
8190
}
8291

8392
private PostExecutionControl handleCreateOrUpdate(
84-
ExecutionScope executionScope, CustomResource resource, Context context) {
93+
ExecutionScope<R> executionScope, R resource, Context<R> context) {
8594
if (!resource.hasFinalizer(resourceFinalizer) && !resource.isMarkedForDeletion()) {
8695
/* We always add the finalizer if missing and not marked for deletion.
8796
We execute the controller processing only for processing the event sent as a results
@@ -96,9 +105,8 @@ private PostExecutionControl handleCreateOrUpdate(
96105
getUID(resource),
97106
getVersion(resource),
98107
executionScope);
99-
UpdateControl<? extends CustomResource> updateControl =
100-
controller.createOrUpdateResource(resource, context);
101-
CustomResource updatedCustomResource = null;
108+
UpdateControl<R> updateControl = controller.createOrUpdateResource(resource, context);
109+
R updatedCustomResource = null;
102110
if (updateControl.isUpdateCustomResourceAndStatusSubResource()) {
103111
updatedCustomResource = updateCustomResource(updateControl.getCustomResource());
104112
updateControl
@@ -122,15 +130,15 @@ private PostExecutionControl handleCreateOrUpdate(
122130
}
123131
}
124132

125-
private PostExecutionControl handleDelete(CustomResource resource, Context context) {
133+
private PostExecutionControl handleDelete(R resource, Context<R> context) {
126134
log.debug(
127135
"Executing delete for resource: {} with version: {}",
128136
getUID(resource),
129137
getVersion(resource));
130138
DeleteControl deleteControl = controller.deleteResource(resource, context);
131139
boolean hasFinalizer = resource.hasFinalizer(resourceFinalizer);
132140
if (deleteControl == DeleteControl.DEFAULT_DELETE && hasFinalizer) {
133-
CustomResource customResource = removeFinalizer(resource);
141+
R customResource = removeFinalizer(resource);
134142
return PostExecutionControl.customResourceUpdated(customResource);
135143
} else {
136144
log.debug(
@@ -143,20 +151,20 @@ private PostExecutionControl handleDelete(CustomResource resource, Context conte
143151
}
144152
}
145153

146-
private void updateCustomResourceWithFinalizer(CustomResource resource) {
154+
private void updateCustomResourceWithFinalizer(R resource) {
147155
log.debug(
148156
"Adding finalizer for resource: {} version: {}", getUID(resource), getVersion(resource));
149157
resource.addFinalizer(resourceFinalizer);
150158
replace(resource);
151159
}
152160

153-
private CustomResource updateCustomResource(CustomResource resource) {
161+
private R updateCustomResource(R resource) {
154162
log.debug("Updating resource: {} with version: {}", getUID(resource), getVersion(resource));
155163
log.trace("Resource before update: {}", resource);
156164
return replace(resource);
157165
}
158166

159-
private CustomResource removeFinalizer(CustomResource resource) {
167+
private R removeFinalizer(R resource) {
160168
log.debug(
161169
"Removing finalizer on resource: {} with version: {}",
162170
getUID(resource),
@@ -165,7 +173,7 @@ private CustomResource removeFinalizer(CustomResource resource) {
165173
return customResourceFacade.replaceWithLock(resource);
166174
}
167175

168-
private CustomResource replace(CustomResource resource) {
176+
private R replace(R resource) {
169177
log.debug(
170178
"Trying to replace resource {}, version: {}",
171179
resource.getMetadata().getName(),
@@ -174,7 +182,7 @@ private CustomResource replace(CustomResource resource) {
174182
}
175183

176184
// created to support unit testing
177-
public static class CustomResourceFacade<R extends CustomResource> {
185+
static class CustomResourceFacade<R extends CustomResource> {
178186

179187
private final MixedOperation<R, KubernetesResourceList<R>, Resource<R>> resourceOperation;
180188

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@
55
import io.javaoperatorsdk.operator.processing.event.Event;
66
import java.util.List;
77

8-
public class ExecutionScope {
8+
public class ExecutionScope<R extends CustomResource> {
99

10-
private List<Event> events;
10+
private final List<Event> events;
1111
// the latest custom resource from cache
12-
private CustomResource customResource;
13-
private RetryInfo retryInfo;
12+
private final R customResource;
13+
private final RetryInfo retryInfo;
1414

15-
public ExecutionScope(List<Event> list, CustomResource customResource, RetryInfo retryInfo) {
15+
public ExecutionScope(List<Event> list, R customResource, RetryInfo retryInfo) {
1616
this.events = list;
1717
this.customResource = customResource;
1818
this.retryInfo = retryInfo;
@@ -22,7 +22,7 @@ public List<Event> getEvents() {
2222
return events;
2323
}
2424

25-
public CustomResource getCustomResource() {
25+
public R getCustomResource() {
2626
return customResource;
2727
}
2828

operator-framework-core/src/test/java/io/javaoperatorsdk/operator/EventDispatcherTest.java renamed to operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/EventDispatcherTest.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package io.javaoperatorsdk.operator;
1+
package io.javaoperatorsdk.operator.processing;
22

33
import static org.assertj.core.api.Assertions.assertThat;
44
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -13,13 +13,12 @@
1313

1414
import io.fabric8.kubernetes.client.CustomResource;
1515
import io.fabric8.kubernetes.client.Watcher;
16+
import io.javaoperatorsdk.operator.TestUtils;
1617
import io.javaoperatorsdk.operator.api.Context;
1718
import io.javaoperatorsdk.operator.api.DeleteControl;
1819
import io.javaoperatorsdk.operator.api.ResourceController;
1920
import io.javaoperatorsdk.operator.api.RetryInfo;
2021
import io.javaoperatorsdk.operator.api.UpdateControl;
21-
import io.javaoperatorsdk.operator.processing.EventDispatcher;
22-
import io.javaoperatorsdk.operator.processing.ExecutionScope;
2322
import io.javaoperatorsdk.operator.processing.event.Event;
2423
import io.javaoperatorsdk.operator.processing.event.internal.CustomResourceEvent;
2524
import java.util.ArrayList;

0 commit comments

Comments
 (0)