From 89e085f4861e4fe1fd4f2a33604baf386427bb7b Mon Sep 17 00:00:00 2001 From: Kevin Klues Date: Tue, 28 Jan 2025 12:44:23 +0000 Subject: [PATCH] Pull RemoveFinalizer() out of Delete() and call it conditionally For now we are conditioning it on the hardcoded value of 'true', but in the future we want to condition it on the absenece of workloads running in the compute domain neing deleted. Signed-off-by: Kevin Klues --- .../computedomain.go | 30 +++++++++++++++---- cmd/nvidia-dra-imex-controller/deployment.go | 18 ++++++++--- cmd/nvidia-dra-imex-controller/deviceclass.go | 8 ++--- .../resourceclaim.go | 8 ++--- .../resourceclaimtemplate.go | 8 ++--- 5 files changed, 50 insertions(+), 22 deletions(-) diff --git a/cmd/nvidia-dra-imex-controller/computedomain.go b/cmd/nvidia-dra-imex-controller/computedomain.go index bd2acebe..ca02f55c 100644 --- a/cmd/nvidia-dra-imex-controller/computedomain.go +++ b/cmd/nvidia-dra-imex-controller/computedomain.go @@ -167,6 +167,10 @@ func (m *ComputeDomainManager) RemoveFinalizer(ctx context.Context, uid string) return fmt.Errorf("error retrieving ComputeDomain: %w", err) } + if cd.GetDeletionTimestamp() == nil { + return fmt.Errorf("attempting to remove finalizer before ComputeDomain marked for deletion") + } + newCD := cd.DeepCopy() newCD.Finalizers = []string{} for _, f := range cd.Finalizers { @@ -210,20 +214,34 @@ func (m *ComputeDomainManager) onAddOrUpdate(ctx context.Context, obj any) error klog.Infof("Processing added or updated ComputeDomain: %s/%s", cd.Namespace, cd.Name) if cd.GetDeletionTimestamp() != nil { - if err := m.deploymentManager.Delete(ctx, string(cd.UID)); err != nil { - return fmt.Errorf("error deleting Deployment: %w", err) + if err := m.resourceClaimManager.Delete(ctx, string(cd.UID)); err != nil { + return fmt.Errorf("error deleting ResourceClaim: %w", err) } if err := m.deviceClassManager.Delete(ctx, string(cd.UID)); err != nil { return fmt.Errorf("error deleting DeviceClass: %w", err) } - if err := m.resourceClaimManager.Delete(ctx, string(cd.UID)); err != nil { - return fmt.Errorf("error deleting ResourceClaim: %w", err) + if err := m.deploymentManager.Delete(ctx, string(cd.UID)); err != nil { + return fmt.Errorf("error deleting Deployment: %w", err) } - if err := m.RemoveFinalizer(ctx, string(cd.UID)); err != nil { - return fmt.Errorf("error removing finalizer: %w", err) + if true { + if err := m.resourceClaimManager.RemoveFinalizer(ctx, string(cd.UID)); err != nil { + return fmt.Errorf("error deleting ResourceClaim: %w", err) + } + + if err := m.deviceClassManager.RemoveFinalizer(ctx, string(cd.UID)); err != nil { + return fmt.Errorf("error deleting DeviceClass: %w", err) + } + + if err := m.deploymentManager.RemoveFinalizer(ctx, string(cd.UID)); err != nil { + return fmt.Errorf("error deleting Deployment: %w", err) + } + + if err := m.RemoveFinalizer(ctx, string(cd.UID)); err != nil { + return fmt.Errorf("error removing finalizer: %w", err) + } } return nil diff --git a/cmd/nvidia-dra-imex-controller/deployment.go b/cmd/nvidia-dra-imex-controller/deployment.go index 4e2dbac9..1595ee76 100644 --- a/cmd/nvidia-dra-imex-controller/deployment.go +++ b/cmd/nvidia-dra-imex-controller/deployment.go @@ -249,10 +249,6 @@ func (m *DeploymentManager) Delete(ctx context.Context, cdUID string) error { return fmt.Errorf("error deleting IMEX channel pool: %w", err) } - if err := m.RemoveFinalizer(ctx, cdUID); err != nil { - return fmt.Errorf("error removing finalizer on Deployment: %w", err) - } - if d.GetDeletionTimestamp() != nil { return nil } @@ -266,6 +262,16 @@ func (m *DeploymentManager) Delete(ctx context.Context, cdUID string) error { } func (m *DeploymentManager) RemoveFinalizer(ctx context.Context, cdUID string) error { + if err := m.resourceClaimTemplateManager.RemoveFinalizer(ctx, cdUID); err != nil { + return fmt.Errorf("error removing finalizer on ResourceClaimTemplate: %w", err) + } + if err := m.removeFinalizer(ctx, cdUID); err != nil { + return fmt.Errorf("error removing finalizer on Deployment: %w", err) + } + return nil +} + +func (m *DeploymentManager) removeFinalizer(ctx context.Context, cdUID string) error { ds, err := getByComputeDomainUID[*appsv1.Deployment](ctx, m.informer, cdUID) if err != nil { return fmt.Errorf("error retrieving Deployment: %w", err) @@ -279,6 +285,10 @@ func (m *DeploymentManager) RemoveFinalizer(ctx context.Context, cdUID string) e d := ds[0] + if d.GetDeletionTimestamp() == nil { + return fmt.Errorf("attempting to remove finalizer before Deployment marked for deletion") + } + newD := d.DeepCopy() newD.Finalizers = []string{} for _, f := range d.Finalizers { diff --git a/cmd/nvidia-dra-imex-controller/deviceclass.go b/cmd/nvidia-dra-imex-controller/deviceclass.go index 4069d634..8b8bedbb 100644 --- a/cmd/nvidia-dra-imex-controller/deviceclass.go +++ b/cmd/nvidia-dra-imex-controller/deviceclass.go @@ -172,10 +172,6 @@ func (m *DeviceClassManager) Delete(ctx context.Context, cdUID string) error { dc := dcs[0] - if err := m.RemoveFinalizer(ctx, cdUID); err != nil { - return fmt.Errorf("error removing finalizer on DeviceClass '%s': %w", dc.Name, err) - } - if dc.GetDeletionTimestamp() != nil { return nil } @@ -202,6 +198,10 @@ func (m *DeviceClassManager) RemoveFinalizer(ctx context.Context, cdUID string) dc := dcs[0] + if dc.GetDeletionTimestamp() == nil { + return fmt.Errorf("attempting to remove finalizer before DeviceClass marked for deletion") + } + newDC := dc.DeepCopy() newDC.Finalizers = []string{} for _, f := range dc.Finalizers { diff --git a/cmd/nvidia-dra-imex-controller/resourceclaim.go b/cmd/nvidia-dra-imex-controller/resourceclaim.go index 4b7f338e..d8bfecc1 100644 --- a/cmd/nvidia-dra-imex-controller/resourceclaim.go +++ b/cmd/nvidia-dra-imex-controller/resourceclaim.go @@ -151,10 +151,6 @@ func (m *ResourceClaimManager) Delete(ctx context.Context, cdUID string) error { return nil } - if err := m.RemoveFinalizer(ctx, cdUID); err != nil { - return fmt.Errorf("error removing finalizer on ResourceClaims': %w", err) - } - for _, rc := range rcs { if rc.GetDeletionTimestamp() != nil { continue @@ -179,6 +175,10 @@ func (m *ResourceClaimManager) RemoveFinalizer(ctx context.Context, cdUID string } for _, rc := range rcs { + if rc.GetDeletionTimestamp() == nil { + return fmt.Errorf("attempting to remove finalizer before ResoureClaim marked for deletion") + } + newRC := rc.DeepCopy() newRC.Finalizers = []string{} for _, f := range rc.Finalizers { diff --git a/cmd/nvidia-dra-imex-controller/resourceclaimtemplate.go b/cmd/nvidia-dra-imex-controller/resourceclaimtemplate.go index d7a9db7f..0ff77560 100644 --- a/cmd/nvidia-dra-imex-controller/resourceclaimtemplate.go +++ b/cmd/nvidia-dra-imex-controller/resourceclaimtemplate.go @@ -197,10 +197,6 @@ func (m *ResourceClaimTemplateManager) Delete(ctx context.Context, cdUID string) rct := rcts[0] - if err := m.RemoveFinalizer(ctx, cdUID); err != nil { - return fmt.Errorf("error removing finalizer on ResourceClaimTemplate '%s/%s': %w", rct.Namespace, rct.Name, err) - } - if rct.GetDeletionTimestamp() != nil { return nil } @@ -227,6 +223,10 @@ func (m *ResourceClaimTemplateManager) RemoveFinalizer(ctx context.Context, cdUI rct := rcts[0] + if rct.GetDeletionTimestamp() == nil { + return fmt.Errorf("attempting to remove finalizer before ResourceClaimTemplate marked for deletion") + } + newRCT := rct.DeepCopy() newRCT.Finalizers = []string{} for _, f := range rct.Finalizers {