@@ -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