Skip to content

Commit 48d768c

Browse files
committed
feat: all-event mode
Signed-off-by: Attila Mészáros <[email protected]>
1 parent 03a0949 commit 48d768c

File tree

6 files changed

+29
-3
lines changed

6 files changed

+29
-3
lines changed

notes.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
- check that Cleaner interface is not present

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,4 +92,8 @@ default String fieldManager() {
9292
}
9393

9494
<C> C getConfigurationFor(DependentResourceSpec<?, P, C> spec);
95+
96+
default ControllerMode getMode() {
97+
return ControllerMode.DEFAULT;
98+
}
9599
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package io.javaoperatorsdk.operator.api.config;
2+
3+
public enum ControllerMode {
4+
DEFAULT,
5+
ALL_EVENT_MODE
6+
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import java.lang.annotation.RetentionPolicy;
77
import java.lang.annotation.Target;
88

9+
import io.javaoperatorsdk.operator.api.config.ControllerMode;
910
import io.javaoperatorsdk.operator.api.config.informer.Informer;
1011
import io.javaoperatorsdk.operator.processing.event.rate.LinearRateLimiter;
1112
import io.javaoperatorsdk.operator.processing.event.rate.RateLimiter;
@@ -77,4 +78,6 @@ MaxReconciliationInterval maxReconciliationInterval() default
7778
* @return the name used as field manager for SSA operations
7879
*/
7980
String fieldManager() default CONTROLLER_NAME_AS_FIELD_MANAGER;
81+
82+
ControllerMode allEventMode() default ControllerMode.DEFAULT;
8083
}

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import io.javaoperatorsdk.operator.OperatorException;
1616
import io.javaoperatorsdk.operator.api.config.ConfigurationService;
1717
import io.javaoperatorsdk.operator.api.config.ControllerConfiguration;
18+
import io.javaoperatorsdk.operator.api.config.ControllerMode;
1819
import io.javaoperatorsdk.operator.api.monitoring.Metrics;
1920
import io.javaoperatorsdk.operator.api.reconciler.Constants;
2021
import io.javaoperatorsdk.operator.processing.LifecycleAware;
@@ -122,7 +123,7 @@ public synchronized void handleEvent(Event event) {
122123
}
123124

124125
private void handleMarkedEventForResource(ResourceState state) {
125-
if (state.deleteEventPresent()) {
126+
if (state.deleteEventPresent() && !isAllEventMode()) {
126127
cleanupForDeletedEvent(state.getId());
127128
} else if (!state.processedMarkForDeletionPresent()) {
128129
submitReconciliationExecution(state);
@@ -179,7 +180,7 @@ private void handleEventMarking(Event event, ResourceState state) {
179180
if (event instanceof ResourceEvent resourceEvent) {
180181
if (resourceEvent.getAction() == ResourceAction.DELETED) {
181182
log.debug("Marking delete event received for: {}", relatedCustomResourceID);
182-
state.markDeleteEventReceived();
183+
state.markDeleteEventReceived(resourceEvent.getResource().orElseThrow());
183184
} else {
184185
if (state.processedMarkForDeletionPresent() && isResourceMarkedForDeletion(resourceEvent)) {
185186
log.debug(
@@ -501,4 +502,8 @@ public synchronized boolean isUnderProcessing(ResourceID resourceID) {
501502
public synchronized boolean isRunning() {
502503
return running;
503504
}
505+
506+
private boolean isAllEventMode() {
507+
return controllerConfiguration.getMode() == ControllerMode.ALL_EVENT_MODE;
508+
}
504509
}

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

Lines changed: 8 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 io.fabric8.kubernetes.api.model.HasMetadata;
34
import io.javaoperatorsdk.operator.processing.event.rate.RateLimiter.RateLimitState;
45
import io.javaoperatorsdk.operator.processing.retry.RetryExecution;
56

@@ -29,6 +30,7 @@ private enum EventingState {
2930
private RetryExecution retry;
3031
private EventingState eventing;
3132
private RateLimitState rateLimit;
33+
private HasMetadata lastKnownResource;
3234

3335
public ResourceState(ResourceID id) {
3436
this.id = id;
@@ -63,8 +65,9 @@ public void setUnderProcessing(boolean underProcessing) {
6365
this.underProcessing = underProcessing;
6466
}
6567

66-
public void markDeleteEventReceived() {
68+
public void markDeleteEventReceived(HasMetadata lastKnownResource) {
6769
eventing = EventingState.DELETE_EVENT_PRESENT;
70+
this.lastKnownResource = lastKnownResource;
6871
}
6972

7073
public boolean deleteEventPresent() {
@@ -94,6 +97,10 @@ public boolean noEventPresent() {
9497
return eventing == EventingState.NO_EVENT_PRESENT;
9598
}
9699

100+
public HasMetadata getLastKnownResource() {
101+
return lastKnownResource;
102+
}
103+
97104
public void unMarkEventReceived() {
98105
switch (eventing) {
99106
case EVENT_PRESENT:

0 commit comments

Comments
 (0)