Skip to content

Commit 49f201a

Browse files
committed
refactor ensureReclaimTargetsDeletion
1 parent 7b14262 commit 49f201a

1 file changed

Lines changed: 16 additions & 4 deletions

File tree

xset/xset_controller.go

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ func (r *xSetCommonReconciler) Reconcile(ctx context.Context, req reconcile.Requ
178178
if err := r.resourceContextControl.UpdateToTargetContext(ctx, instance, nil); err != nil {
179179
return ctrl.Result{}, err
180180
}
181-
if err := r.ensureReclaimTargetsDeletion(ctx, instance); err != nil {
181+
if cleaned, err := r.ensureReclaimTargetsDeletion(ctx, instance); !cleaned || err != nil {
182182
// reclaim targets deletion before remove finalizers
183183
return ctrl.Result{}, err
184184
}
@@ -282,13 +282,25 @@ func (r *xSetCommonReconciler) ensureReclaimPvcs(ctx context.Context, xset api.X
282282
return nil
283283
}
284284

285-
func (r *xSetCommonReconciler) ensureReclaimTargetsDeletion(ctx context.Context, instance api.XSetObject) error {
285+
func (r *xSetCommonReconciler) ensureReclaimTargetsDeletion(ctx context.Context, instance api.XSetObject) (bool, error) {
286286
xSetSpec := r.XSetController.GetXSetSpec(instance)
287287
targets, err := r.targetControl.GetFilteredTargets(ctx, xSetSpec.Selector, instance)
288288
if err != nil {
289-
return fmt.Errorf("fail to get filtered Targets: %s", err.Error())
289+
return false, fmt.Errorf("fail to get filtered Targets: %s", err.Error())
290290
}
291-
return r.syncControl.BatchDeleteTargetsByLabel(ctx, r.targetControl, targets)
291+
// if targets are deleted, return true
292+
if len(targets) == 0 {
293+
return true, nil
294+
}
295+
// wait for all targets are terminating
296+
for i := range targets {
297+
target := targets[i]
298+
if target.GetDeletionTimestamp() == nil {
299+
r.Recorder.Eventf(instance, corev1.EventTypeNormal, "TargetsDeleted", "waiting for models to be deleted gracefully before xset deleted %s/%s", instance.GetNamespace(), instance.GetName())
300+
return false, r.syncControl.BatchDeleteTargetsByLabel(ctx, r.targetControl, targets)
301+
}
302+
}
303+
return true, nil
292304
}
293305

294306
func (r *xSetCommonReconciler) updateStatus(ctx context.Context, instance api.XSetObject, status *api.XSetStatus) error {

0 commit comments

Comments
 (0)