Skip to content

Commit 2e5e220

Browse files
committed
wip
Signed-off-by: Attila Mészáros <a_meszaros@apple.com>
1 parent 29bc167 commit 2e5e220

File tree

6 files changed

+156
-52
lines changed

6 files changed

+156
-52
lines changed

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

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ public synchronized void handleEvent(Event event) {
131131
}
132132

133133
private void handleMarkedEventForResource(ResourceState state) {
134-
if (state.deleteEventPresent() && !propagateAllEvent()) {
134+
if (state.deleteEventPresent() && !triggerOnAllEvent()) {
135135
cleanupForDeletedEvent(state.getId());
136136
} else if (!state.processedMarkForDeletionPresent()) {
137137
submitReconciliationExecution(state);
@@ -145,7 +145,7 @@ private void submitReconciliationExecution(ResourceState state) {
145145
Optional<P> maybeLatest = cache.get(resourceID);
146146
maybeLatest.ifPresent(MDCUtils::addResourceInfo);
147147
if (!controllerUnderExecution
148-
&& (maybeLatest.isPresent() || (propagateAllEvent() && state.deleteEventPresent()))) {
148+
&& (maybeLatest.isPresent() || (triggerOnAllEvent() && state.deleteEventPresent()))) {
149149
var rateLimit = state.getRateLimit();
150150
if (rateLimit == null) {
151151
rateLimit = rateLimiter.initState();
@@ -158,8 +158,10 @@ private void submitReconciliationExecution(ResourceState state) {
158158
}
159159
state.setUnderProcessing(true);
160160
final var latest = maybeLatest.orElseGet(() -> getResourceFromState(state));
161-
ExecutionScope<P> executionScope = new ExecutionScope<>(state.getRetry());
162-
state.unMarkEventReceived(propagateAllEvent());
161+
ExecutionScope<P> executionScope =
162+
new ExecutionScope<>(
163+
state.getRetry(), state.deleteEventPresent(), state.isDeleteFinalStateUnknown());
164+
state.unMarkEventReceived(triggerOnAllEvent());
163165
metrics.reconcileCustomResource(latest, state.getRetry(), metricsMetadata);
164166
log.debug("Executing events for custom resource. Scope: {}", executionScope);
165167
executor.execute(new ReconcilerExecutor(resourceID, executionScope));
@@ -186,7 +188,7 @@ private void submitReconciliationExecution(ResourceState state) {
186188

187189
@SuppressWarnings("unchecked")
188190
private P getResourceFromState(ResourceState state) {
189-
if (propagateAllEvent()) {
191+
if (triggerOnAllEvent()) {
190192
log.debug("Getting resource from state for {}", state.getId());
191193
return (P) state.getLastKnownResource();
192194
} else {
@@ -217,11 +219,11 @@ private void handleEventMarking(Event event, ResourceState state) {
217219
// removed, but also the informers websocket is disconnected and later reconnected. So
218220
// meanwhile the resource could be deleted and recreated. In this case we just mark a new
219221
// event as below.
220-
state.markEventReceived(propagateAllEvent());
222+
state.markEventReceived(triggerOnAllEvent());
221223
}
222224
} else if (!state.deleteEventPresent() && !state.processedMarkForDeletionPresent()) {
223-
state.markEventReceived(propagateAllEvent());
224-
} else if (propagateAllEvent() && state.deleteEventPresent()) {
225+
state.markEventReceived(triggerOnAllEvent());
226+
} else if (triggerOnAllEvent() && state.deleteEventPresent()) {
225227
state.markAdditionalEventAfterDeleteEvent();
226228
} else if (log.isDebugEnabled()) {
227229
log.debug(
@@ -264,21 +266,21 @@ synchronized void eventProcessingFinished(
264266
// Either way we don't want to retry.
265267
if (isRetryConfigured()
266268
&& postExecutionControl.exceptionDuringExecution()
267-
&& (!state.deleteEventPresent() || propagateAllEvent())) {
269+
&& (!state.deleteEventPresent() || triggerOnAllEvent())) {
268270
handleRetryOnException(
269271
executionScope, postExecutionControl.getRuntimeException().orElseThrow());
270272
return;
271273
}
272274
cleanupOnSuccessfulExecution(executionScope);
273275
metrics.finishedReconciliation(executionScope.getResource(), metricsMetadata);
274-
if ((propagateAllEvent() && executionScope.isDeleteEvent())
275-
|| (!propagateAllEvent() && state.deleteEventPresent())) {
276+
if ((triggerOnAllEvent() && executionScope.isDeleteEvent())
277+
|| (!triggerOnAllEvent() && state.deleteEventPresent())) {
276278
cleanupForDeletedEvent(executionScope.getResourceID());
277279
} else if (postExecutionControl.isFinalizerRemoved()) {
278280
state.markProcessedMarkForDeletion();
279281
metrics.cleanupDoneFor(resourceID, metricsMetadata);
280282
} else {
281-
if (state.eventPresent() || (propagateAllEvent() && state.deleteEventPresent())) {
283+
if (state.eventPresent() || (triggerOnAllEvent() && state.deleteEventPresent())) {
282284
submitReconciliationExecution(state);
283285
} else {
284286
reScheduleExecutionIfInstructed(postExecutionControl, executionScope.getResource());
@@ -343,8 +345,8 @@ private void handleRetryOnException(ExecutionScope<P> executionScope, Exception
343345
var resourceID = state.getId();
344346
boolean eventPresent =
345347
state.eventPresent()
346-
|| (propagateAllEvent() && state.isAdditionalEventPresentAfterDeleteEvent());
347-
state.markEventReceived(propagateAllEvent());
348+
|| (triggerOnAllEvent() && state.isAdditionalEventPresentAfterDeleteEvent());
349+
state.markEventReceived(triggerOnAllEvent());
348350

349351
retryAwareErrorLogging(state.getRetry(), eventPresent, exception, executionScope);
350352
if (eventPresent) {
@@ -488,7 +490,7 @@ public void run() {
488490
try {
489491
var actualResource = cache.get(resourceID);
490492
if (actualResource.isEmpty()) {
491-
if (propagateAllEvent()) {
493+
if (triggerOnAllEvent() && executionScope.isDeleteEvent()) {
492494
log.debug(
493495
"Resource not found in the cache, checking for delete event resource: {}",
494496
resourceID);
@@ -503,9 +505,6 @@ public void run() {
503505
"Skipping execution; delete event resource not found in state: {}", resourceID);
504506
return;
505507
}
506-
executionScope.setDeleteEvent(true);
507-
executionScope.setDeleteFinalStateUnknown(
508-
state.orElseThrow().isDeleteFinalStateUnknown());
509508
} else {
510509
log.debug("Skipping execution; primary resource missing from cache: {}", resourceID);
511510
return;
@@ -547,7 +546,7 @@ public synchronized boolean isRunning() {
547546
}
548547

549548
// shortening
550-
private boolean propagateAllEvent() {
549+
private boolean triggerOnAllEvent() {
551550
return controllerConfiguration.triggerReconcilerOnAllEvent();
552551
}
553552
}

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,13 @@ class ExecutionScope<R extends HasMetadata> {
88
// the latest custom resource from cache
99
private R resource;
1010
private final RetryInfo retryInfo;
11-
private boolean deleteEvent = false;
12-
private boolean isDeleteFinalStateUnknown = false;
11+
private boolean deleteEvent;
12+
private boolean isDeleteFinalStateUnknown;
1313

14-
ExecutionScope(RetryInfo retryInfo) {
14+
ExecutionScope(RetryInfo retryInfo, boolean deleteEvent, boolean isDeleteFinalStateUnknown) {
1515
this.retryInfo = retryInfo;
16+
this.deleteEvent = deleteEvent;
17+
this.isDeleteFinalStateUnknown = isDeleteFinalStateUnknown;
1618
}
1719

1820
public ExecutionScope<R> setResource(R resource) {

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ private PostExecutionControl<P> handleDispatch(ExecutionScope<P> executionScope)
8181
originalResource.getMetadata().getNamespace());
8282

8383
final var markedForDeletion = originalResource.isMarkedForDeletion();
84-
if (!propagateAllEvent()
84+
if (!triggerOnAllEvent()
8585
&& markedForDeletion
8686
&& shouldNotDispatchToCleanupWhenMarkedForDeletion(originalResource)) {
8787
log.debug(
@@ -100,7 +100,7 @@ && shouldNotDispatchToCleanupWhenMarkedForDeletion(originalResource)) {
100100
executionScope.isDeleteFinalStateUnknown());
101101

102102
// checking the cleaner for all-event-mode
103-
if (!propagateAllEvent() && markedForDeletion) {
103+
if (!triggerOnAllEvent() && markedForDeletion) {
104104
return handleCleanup(resourceForExecution, originalResource, context, executionScope);
105105
} else {
106106
return handleReconcile(executionScope, resourceForExecution, originalResource, context);
@@ -119,7 +119,7 @@ private PostExecutionControl<P> handleReconcile(
119119
P originalResource,
120120
Context<P> context)
121121
throws Exception {
122-
if (!propagateAllEvent()
122+
if (!triggerOnAllEvent()
123123
&& controller.useFinalizer()
124124
&& !originalResource.hasFinalizer(configuration().getFinalizerName())) {
125125
/*
@@ -288,7 +288,7 @@ private PostExecutionControl<P> handleCleanup(
288288
}
289289
DeleteControl deleteControl = controller.cleanup(resourceForExecution, context);
290290
final var useFinalizer = controller.useFinalizer();
291-
if (useFinalizer && !propagateAllEvent()) {
291+
if (useFinalizer && !triggerOnAllEvent()) {
292292
// note that we don't reschedule here even if instructed. Removing finalizer means that
293293
// cleanup is finished, nothing left to be done
294294
final var finalizerName = configuration().getFinalizerName();
@@ -535,7 +535,7 @@ private Resource<R> resource(R resource) {
535535
}
536536
}
537537

538-
private boolean propagateAllEvent() {
538+
private boolean triggerOnAllEvent() {
539539
return configuration().triggerReconcilerOnAllEvent();
540540
}
541541
}

operator-framework-core/src/test/java/io/javaoperatorsdk/operator/TestUtils.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ public static TestCustomResource testCustomResource1() {
3232
return testCustomResource(new ResourceID("test1", "default"));
3333
}
3434

35+
public static ResourceID testCustomResource1Id() {
36+
return new ResourceID("test1", "default");
37+
}
38+
3539
public static TestCustomResource testCustomResource(ResourceID id) {
3640
TestCustomResource resource = new TestCustomResource();
3741
resource.setMetadata(

0 commit comments

Comments
 (0)