Skip to content

Commit 8731191

Browse files
committed
Working integration test
Signed-off-by: Attila Mészáros <[email protected]>
1 parent 24f83d5 commit 8731191

File tree

15 files changed

+206
-15
lines changed

15 files changed

+206
-15
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,7 @@ private <P extends HasMetadata> ResolvedControllerConfiguration<P> controllerCon
304304
final var dependentFieldManager =
305305
fieldManager.equals(CONTROLLER_NAME_AS_FIELD_MANAGER) ? name : fieldManager;
306306

307-
var controllerMode = annotation == null ? ControllerMode.DEFAULT : annotation.controllerMode();
307+
var controllerMode = annotation == null ? ControllerMode.DEFAULT : annotation.mode();
308308

309309
InformerConfiguration<P> informerConfig =
310310
InformerConfiguration.builder(resourceClass)

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,11 +93,11 @@ default String fieldManager() {
9393

9494
<C> C getConfigurationFor(DependentResourceSpec<?, P, C> spec);
9595

96-
default ControllerMode getControllerMode() {
96+
default ControllerMode mode() {
9797
return ControllerMode.DEFAULT;
9898
}
9999

100100
default boolean isAllEventReconcileMode() {
101-
return getControllerMode() == ControllerMode.ALL_EVENT_RECONCILE;
101+
return mode() == ControllerMode.RECONCILE_ALL_EVENT;
102102
}
103103
}

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public class ControllerConfigurationOverrider<R extends HasMetadata> {
3030
private Duration reconciliationMaxInterval;
3131
private Map<DependentResourceSpec, Object> configurations;
3232
private final InformerConfiguration<R>.Builder config;
33-
private ControllerMode controllerMode;
33+
private ControllerMode mode;
3434

3535
private ControllerConfigurationOverrider(ControllerConfiguration<R> original) {
3636
this.finalizer = original.getFinalizerName();
@@ -43,7 +43,7 @@ private ControllerConfigurationOverrider(ControllerConfiguration<R> original) {
4343
this.rateLimiter = original.getRateLimiter();
4444
this.name = original.getName();
4545
this.fieldManager = original.fieldManager();
46-
this.controllerMode = original.getControllerMode();
46+
this.mode = original.mode();
4747
}
4848

4949
public ControllerConfigurationOverrider<R> withFinalizer(String finalizer) {
@@ -156,8 +156,8 @@ public ControllerConfigurationOverrider<R> withFieldManager(String dependentFiel
156156
return this;
157157
}
158158

159-
public ControllerConfigurationOverrider<R> withControllerMode(ControllerMode controllerMode) {
160-
this.controllerMode = controllerMode;
159+
public ControllerConfigurationOverrider<R> withMode(ControllerMode controllerMode) {
160+
this.mode = controllerMode;
161161
return this;
162162
}
163163

@@ -205,7 +205,7 @@ public ControllerConfiguration<R> build() {
205205
fieldManager,
206206
original.getConfigurationService(),
207207
config.buildForController(),
208-
controllerMode,
208+
mode,
209209
original.getWorkflowSpec().orElse(null));
210210
}
211211

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22

33
public enum ControllerMode {
44
DEFAULT,
5-
ALL_EVENT_RECONCILE
5+
RECONCILE_ALL_EVENT
66
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public ResolvedControllerConfiguration(ControllerConfiguration<P> other) {
4545
other.fieldManager(),
4646
other.getConfigurationService(),
4747
other.getInformerConfig(),
48-
other.getControllerMode(),
48+
other.mode(),
4949
other.getWorkflowSpec().orElse(null));
5050
}
5151

@@ -216,7 +216,7 @@ public String fieldManager() {
216216
}
217217

218218
@Override
219-
public ControllerMode getControllerMode() {
219+
public ControllerMode mode() {
220220
return controllerMode;
221221
}
222222
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,5 +79,5 @@ MaxReconciliationInterval maxReconciliationInterval() default
7979
*/
8080
String fieldManager() default CONTROLLER_NAME_AS_FIELD_MANAGER;
8181

82-
ControllerMode controllerMode() default ControllerMode.DEFAULT;
82+
ControllerMode mode() default ControllerMode.DEFAULT;
8383
}

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

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,8 @@ private void submitReconciliationExecution(ResourceState state) {
136136
final var resourceID = state.getId();
137137
Optional<P> maybeLatest = cache.get(resourceID);
138138
maybeLatest.ifPresent(MDCUtils::addResourceInfo);
139-
if (!controllerUnderExecution && maybeLatest.isPresent()) {
139+
if (!controllerUnderExecution
140+
&& (maybeLatest.isPresent() || (isAllEventMode() && state.deleteEventPresent()))) {
140141
var rateLimit = state.getRateLimit();
141142
if (rateLimit == null) {
142143
rateLimit = rateLimiter.initState();
@@ -148,7 +149,7 @@ private void submitReconciliationExecution(ResourceState state) {
148149
return;
149150
}
150151
state.setUnderProcessing(true);
151-
final var latest = maybeLatest.get();
152+
final var latest = maybeLatest.orElseGet(() -> getResourceFromState(state));
152153
ExecutionScope<P> executionScope = new ExecutionScope<>(state.getRetry());
153154
state.unMarkEventReceived(isAllEventMode());
154155
metrics.reconcileCustomResource(latest, state.getRetry(), metricsMetadata);
@@ -175,6 +176,17 @@ private void submitReconciliationExecution(ResourceState state) {
175176
}
176177
}
177178

179+
@SuppressWarnings("unchecked")
180+
private P getResourceFromState(ResourceState state) {
181+
if (isAllEventMode()) {
182+
log.debug("Getting resource from state for {}", state.getId());
183+
return (P) state.getLastKnownResource();
184+
} else {
185+
throw new IllegalStateException(
186+
"No resource found, this indicates issue with implementation.");
187+
}
188+
}
189+
178190
private void handleEventMarking(Event event, ResourceState state) {
179191
final var relatedCustomResourceID = event.getRelatedCustomResourceID();
180192
if (event instanceof ResourceEvent resourceEvent) {
@@ -258,7 +270,7 @@ synchronized void eventProcessingFinished(
258270
state.markProcessedMarkForDeletion();
259271
metrics.cleanupDoneFor(resourceID, metricsMetadata);
260272
} else {
261-
if (state.eventPresent()) {
273+
if (state.eventPresent() || (isAllEventMode() && state.deleteEventPresent())) {
262274
submitReconciliationExecution(state);
263275
} else {
264276
reScheduleExecutionIfInstructed(postExecutionControl, executionScope.getResource());
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package io.javaoperatorsdk.operator.baseapi.alleventmode;
2+
3+
import java.util.concurrent.atomic.AtomicInteger;
4+
5+
public class AbstractAllEventReconciler {
6+
7+
public static final String FINALIZER = "all.event.mode/finalizer";
8+
9+
private boolean resourceEvent = false;
10+
private boolean deleteEvent = false;
11+
private boolean eventOnMarkedForDeletion = false;
12+
private AtomicInteger eventCounter = new AtomicInteger(0);
13+
14+
public boolean isResourceEvent() {
15+
return resourceEvent;
16+
}
17+
18+
public void setResourceEvent(boolean resourceEvent) {
19+
this.resourceEvent = resourceEvent;
20+
}
21+
22+
public boolean isDeleteEvent() {
23+
return deleteEvent;
24+
}
25+
26+
public void setDeleteEvent(boolean deleteEvent) {
27+
this.deleteEvent = deleteEvent;
28+
}
29+
30+
public boolean isEventOnMarkedForDeletion() {
31+
return eventOnMarkedForDeletion;
32+
}
33+
34+
public void setEventOnMarkedForDeletion(boolean eventOnMarkedForDeletion) {
35+
this.eventOnMarkedForDeletion = eventOnMarkedForDeletion;
36+
}
37+
38+
public int getEventCounter() {
39+
return eventCounter.get();
40+
}
41+
42+
public void increaseEventCount() {
43+
eventCounter.incrementAndGet();
44+
}
45+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package io.javaoperatorsdk.operator.baseapi.alleventmode.cleaner;
2+
3+
public class AllEventCleanerIT {}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package io.javaoperatorsdk.operator.baseapi.alleventmode.cleanerfinalizer;
2+
3+
public class AllEventCleanerFinalizerIT {}

0 commit comments

Comments
 (0)