@@ -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
294306func (r * xSetCommonReconciler ) updateStatus (ctx context.Context , instance api.XSetObject , status * api.XSetStatus ) error {
0 commit comments