From b4fc8854ddfb6aeea91ca19b6e915773c4fe2c75 Mon Sep 17 00:00:00 2001 From: LiZhenCheng9527 Date: Tue, 20 Feb 2024 20:31:56 +0800 Subject: [PATCH 1/3] Adding Checks for Fleet Existence During Application Deletion Signed-off-by: LiZhenCheng9527 --- pkg/fleet-manager/application/controller.go | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/pkg/fleet-manager/application/controller.go b/pkg/fleet-manager/application/controller.go index ecb37e7ad..f61504cb3 100644 --- a/pkg/fleet-manager/application/controller.go +++ b/pkg/fleet-manager/application/controller.go @@ -316,8 +316,20 @@ func (a *ApplicationManager) reconcileSyncStatus(ctx context.Context, app *appli } func (a *ApplicationManager) reconcileDelete(ctx context.Context, app *applicationapi.Application, fleet *fleetapi.Fleet) (ctrl.Result, error) { - if err := a.deleteResourcesInMemberClusters(ctx, app, fleet); err != nil { - return ctrl.Result{}, errors.Wrapf(err, "failed to delete rollout resource in cluster") + log := ctrl.LoggerFrom(ctx) + + fleetKey := generateFleetKey(app) + if err := a.Client.Get(ctx, fleetKey, fleet); err != nil { + if apierrors.IsNotFound(err) { + log.Info("delete failed, fleet does not exist", "fleet", fleetKey) + return ctrl.Result{RequeueAfter: fleetmanager.RequeueAfter}, nil + } + log.Error(err, "delete failed, fleet does not found", "fleet", fleetKey) + return ctrl.Result{}, err + } + + if deleteErr := a.deleteResourcesInMemberClusters(ctx, app, fleet); deleteErr != nil { + return ctrl.Result{}, errors.Wrapf(deleteErr, "failed to delete rollout resource in cluster") } controllerutil.RemoveFinalizer(app, ApplicationFinalizer) From f7650013e2430717a01c9275f95aea3366f7636f Mon Sep 17 00:00:00 2001 From: LiZhenCheng9527 Date: Wed, 21 Feb 2024 11:07:29 +0800 Subject: [PATCH 2/3] Performs application delete, regardless of whether the fleet exists Signed-off-by: LiZhenCheng9527 --- pkg/fleet-manager/application/controller.go | 27 ++++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/pkg/fleet-manager/application/controller.go b/pkg/fleet-manager/application/controller.go index f61504cb3..185509a45 100644 --- a/pkg/fleet-manager/application/controller.go +++ b/pkg/fleet-manager/application/controller.go @@ -150,7 +150,7 @@ func (a *ApplicationManager) Reconcile(ctx context.Context, req ctrl.Request) (_ // Handle deletion reconciliation loop. if app.DeletionTimestamp != nil { - return a.reconcileDelete(ctx, app, fleet) + return a.reconcileDelete(ctx, app) } // Handle normal loop. @@ -315,21 +315,24 @@ func (a *ApplicationManager) reconcileSyncStatus(ctx context.Context, app *appli return nil } -func (a *ApplicationManager) reconcileDelete(ctx context.Context, app *applicationapi.Application, fleet *fleetapi.Fleet) (ctrl.Result, error) { +// Handling Application Deletion Based on Fleet Availability. +// When deleting an application, the approach taken depends on whether the managing fleet can be retrieved +// If the fleet is available: +// Application will be removed +// Resources related to the application will then be deleted from fleet clusters +// If the fleet cannot be retrieved: +// Only the application object itself will be removed +// Related resources in any cluster will be left intact +func (a *ApplicationManager) reconcileDelete(ctx context.Context, app *applicationapi.Application) (ctrl.Result, error) { log := ctrl.LoggerFrom(ctx) - fleetKey := generateFleetKey(app) + fleet := &fleetapi.Fleet{} if err := a.Client.Get(ctx, fleetKey, fleet); err != nil { - if apierrors.IsNotFound(err) { - log.Info("delete failed, fleet does not exist", "fleet", fleetKey) - return ctrl.Result{RequeueAfter: fleetmanager.RequeueAfter}, nil + log.Error(err, "failed to find fleet", "fleet", fleetKey) + } else { + if deleteErr := a.deleteResourcesInMemberClusters(ctx, app, fleet); deleteErr != nil { + return ctrl.Result{}, errors.Wrapf(deleteErr, "failed to delete rollout resource in member clusters") } - log.Error(err, "delete failed, fleet does not found", "fleet", fleetKey) - return ctrl.Result{}, err - } - - if deleteErr := a.deleteResourcesInMemberClusters(ctx, app, fleet); deleteErr != nil { - return ctrl.Result{}, errors.Wrapf(deleteErr, "failed to delete rollout resource in cluster") } controllerutil.RemoveFinalizer(app, ApplicationFinalizer) From 4b3cbd72a249d65460fb25a8a44358bc4806a669 Mon Sep 17 00:00:00 2001 From: LiZhenCheng9527 Date: Tue, 5 Mar 2024 10:13:48 +0800 Subject: [PATCH 3/3] check for errors when deleting fleet and provides logs Signed-off-by: LiZhenCheng9527 --- pkg/fleet-manager/application/controller.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pkg/fleet-manager/application/controller.go b/pkg/fleet-manager/application/controller.go index 185509a45..76211428e 100644 --- a/pkg/fleet-manager/application/controller.go +++ b/pkg/fleet-manager/application/controller.go @@ -328,7 +328,10 @@ func (a *ApplicationManager) reconcileDelete(ctx context.Context, app *applicati fleetKey := generateFleetKey(app) fleet := &fleetapi.Fleet{} if err := a.Client.Get(ctx, fleetKey, fleet); err != nil { - log.Error(err, "failed to find fleet", "fleet", fleetKey) + if apierrors.IsNotFound(err) { + log.Info("fleet does not exist", "fleet", fleetKey) + } + log.Info("failed to get fleet", "fleet", fleetKey, "error", err) } else { if deleteErr := a.deleteResourcesInMemberClusters(ctx, app, fleet); deleteErr != nil { return ctrl.Result{}, errors.Wrapf(deleteErr, "failed to delete rollout resource in member clusters")