@@ -35,7 +35,8 @@ public class WorkflowReconcileExecutor<P extends HasMetadata> {
35
35
new ConcurrentHashMap <>();
36
36
37
37
private final Set <DependentResourceNode > markedForDelete = ConcurrentHashMap .newKeySet ();
38
- private final Set <DependentResourceNode > deleteConditionNotMet = ConcurrentHashMap .newKeySet ();
38
+ private final Set <DependentResourceNode > deletePostConditionNotMet =
39
+ ConcurrentHashMap .newKeySet ();
39
40
// used to remember reconciled (not deleted or errored) dependents
40
41
private final Set <DependentResourceNode > reconciled = ConcurrentHashMap .newKeySet ();
41
42
private final Map <DependentResource , ReconcileResult > reconcileResults =
@@ -99,7 +100,7 @@ private synchronized <R> void handleReconcile(DependentResourceNode<R, P> depend
99
100
}
100
101
}
101
102
102
- private void handleDelete (DependentResourceNode dependentResourceNode ) {
103
+ private synchronized void handleDelete (DependentResourceNode dependentResourceNode ) {
103
104
log .debug ("Submitting for delete: {}" , dependentResourceNode );
104
105
105
106
if (alreadyVisited (dependentResourceNode )
@@ -119,7 +120,7 @@ private void handleDelete(DependentResourceNode dependentResourceNode) {
119
120
private boolean allDependentsDeletedAlready (DependentResourceNode <?, P > dependentResourceNode ) {
120
121
var dependents = dependentResourceNode .getParents ();
121
122
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 ));
123
124
}
124
125
125
126
@@ -207,16 +208,17 @@ public void run() {
207
208
&& !(dependentResource instanceof GarbageCollected )) {
208
209
((Deleter <P >) dependentResourceNode .getDependentResource ()).delete (primary , context );
209
210
}
210
- alreadyVisited .add (dependentResourceNode );
211
211
boolean deletePostConditionMet =
212
212
deletePostCondition .map (c -> c .isMet (primary ,
213
213
dependentResourceNode .getDependentResource ().getSecondaryResource (primary )
214
214
.orElse (null ),
215
215
context )).orElse (true );
216
216
if (deletePostConditionMet ) {
217
+ alreadyVisited .add (dependentResourceNode );
217
218
handleDependentDeleted (dependentResourceNode );
218
219
} else {
219
- deleteConditionNotMet .add (dependentResourceNode );
220
+ deletePostConditionNotMet .add (dependentResourceNode );
221
+ alreadyVisited .add (dependentResourceNode );
220
222
}
221
223
} catch (RuntimeException e ) {
222
224
handleExceptionInExecutor (dependentResourceNode , e );
0 commit comments