Skip to content

Commit f8c881a

Browse files
csvirimetacosm
authored andcommitted
fix: issue with post condition in workflow execution delete (#1449)
1 parent 21bd266 commit f8c881a

File tree

1 file changed

+7
-5
lines changed

1 file changed

+7
-5
lines changed

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

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ public class WorkflowReconcileExecutor<P extends HasMetadata> {
3535
new ConcurrentHashMap<>();
3636

3737
private final Set<DependentResourceNode> markedForDelete = ConcurrentHashMap.newKeySet();
38-
private final Set<DependentResourceNode> deleteConditionNotMet = ConcurrentHashMap.newKeySet();
38+
private final Set<DependentResourceNode> deletePostConditionNotMet =
39+
ConcurrentHashMap.newKeySet();
3940
// used to remember reconciled (not deleted or errored) dependents
4041
private final Set<DependentResourceNode> reconciled = ConcurrentHashMap.newKeySet();
4142
private final Map<DependentResource, ReconcileResult> reconcileResults =
@@ -99,7 +100,7 @@ private synchronized <R> void handleReconcile(DependentResourceNode<R, P> depend
99100
}
100101
}
101102

102-
private void handleDelete(DependentResourceNode dependentResourceNode) {
103+
private synchronized void handleDelete(DependentResourceNode dependentResourceNode) {
103104
log.debug("Submitting for delete: {}", dependentResourceNode);
104105

105106
if (alreadyVisited(dependentResourceNode)
@@ -119,7 +120,7 @@ private void handleDelete(DependentResourceNode dependentResourceNode) {
119120
private boolean allDependentsDeletedAlready(DependentResourceNode<?, P> dependentResourceNode) {
120121
var dependents = dependentResourceNode.getParents();
121122
return dependents.stream().allMatch(d -> alreadyVisited.contains(d) && !notReady.contains(d)
122-
&& !exceptionsDuringExecution.containsKey(d) && !deleteConditionNotMet.contains(d));
123+
&& !exceptionsDuringExecution.containsKey(d) && !deletePostConditionNotMet.contains(d));
123124
}
124125

125126

@@ -207,16 +208,17 @@ public void run() {
207208
&& !(dependentResource instanceof GarbageCollected)) {
208209
((Deleter<P>) dependentResourceNode.getDependentResource()).delete(primary, context);
209210
}
210-
alreadyVisited.add(dependentResourceNode);
211211
boolean deletePostConditionMet =
212212
deletePostCondition.map(c -> c.isMet(primary,
213213
dependentResourceNode.getDependentResource().getSecondaryResource(primary)
214214
.orElse(null),
215215
context)).orElse(true);
216216
if (deletePostConditionMet) {
217+
alreadyVisited.add(dependentResourceNode);
217218
handleDependentDeleted(dependentResourceNode);
218219
} else {
219-
deleteConditionNotMet.add(dependentResourceNode);
220+
deletePostConditionNotMet.add(dependentResourceNode);
221+
alreadyVisited.add(dependentResourceNode);
220222
}
221223
} catch (RuntimeException e) {
222224
handleExceptionInExecutor(dependentResourceNode, e);

0 commit comments

Comments
 (0)