Skip to content

Commit 461e78e

Browse files
committed
Avoiding condition double checking
Signed-off-by: Attila Mészáros <a_meszaros@apple.com>
1 parent ea84665 commit 461e78e

File tree

3 files changed

+18
-3
lines changed

3 files changed

+18
-3
lines changed

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/AbstractWorkflowExecutor.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,13 @@ protected <R> boolean isConditionMet(
157157
return condition
158158
.map(
159159
c -> {
160+
synchronized (this) {
161+
Optional<DetailedCondition.Result> existingResult =
162+
createOrGetResultFor(dependentResource).getConditionResult(c.type());
163+
if (existingResult.isPresent()) {
164+
return existingResult.get();
165+
}
166+
}
160167
final DetailedCondition.Result<?> r = c.detailedIsMet(dr, primary, context);
161168
synchronized (this) {
162169
results

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/BaseWorkflowResult.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,15 @@ public boolean hasPostDeleteConditionNotMet() {
172172
return deletePostconditionResult != null && !deletePostconditionResult.isSuccess();
173173
}
174174

175+
public Optional<DetailedCondition.Result> getConditionResult(Condition.Type conditionType) {
176+
return switch (conditionType) {
177+
case ACTIVATION -> Optional.ofNullable(activationConditionResult);
178+
case DELETE -> Optional.ofNullable(deletePostconditionResult);
179+
case READY -> Optional.ofNullable(readyPostconditionResult);
180+
case RECONCILE -> Optional.ofNullable(reconcilePostconditionResult);
181+
};
182+
}
183+
175184
public boolean isReady() {
176185
return readyPostconditionResult == null || readyPostconditionResult.isSuccess();
177186
}

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowReconcileExecutor.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,6 @@ private void markDependentsForDelete(
255255
if (activationConditionMet) {
256256
// make sure we register the dependent's event source if it hasn't been added already
257257
// this might be needed in corner cases such as
258-
// https://github.com/operator-framework/java-operator-sdk/issues/3249
259258
registerOrDeregisterEventSourceBasedOnActivation(true, dependentResourceNode);
260259
createOrGetResultFor(dependentResourceNode).markForDelete();
261260
if (dependents.isEmpty()) {
@@ -264,11 +263,11 @@ private void markDependentsForDelete(
264263
dependents.forEach(d -> markDependentsForDelete(d, bottomNodes));
265264
}
266265
} else {
267-
// this is for an edge case when there is only one resource but that is not active
268-
createOrGetResultFor(dependentResourceNode).markAsVisited();
269266
if (dependents.isEmpty()) {
267+
createOrGetResultFor(dependentResourceNode).markAsVisited();
270268
handleNodeExecutionFinish(dependentResourceNode);
271269
} else {
270+
createOrGetResultFor(dependentResourceNode).markForDelete();
272271
dependents.forEach(d -> markDependentsForDelete(d, bottomNodes));
273272
}
274273
}

0 commit comments

Comments
 (0)