Skip to content
This repository was archived by the owner on Dec 6, 2024. It is now read-only.

Commit c8d8efb

Browse files
committed
Fix handle deletion from Update method
Signed-off-by: Andrei Kvapil <[email protected]>
1 parent 1829a9e commit c8d8efb

File tree

2 files changed

+64
-43
lines changed

2 files changed

+64
-43
lines changed

Diff for: pkg/imported-sidecar/pkg/bucket/bucket_controller.go

+57-43
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,12 @@ func (b *BucketListener) Add(ctx context.Context, inputBucket *v1alpha1.Bucket)
6969

7070
var err error
7171

72+
if !bucket.GetDeletionTimestamp().IsZero() {
73+
if err = b.handleDeletion(ctx, bucket); err != nil {
74+
return err
75+
}
76+
}
77+
7278
klog.V(3).InfoS("Add Bucket",
7379
"name", bucket.ObjectMeta.Name)
7480

@@ -213,48 +219,7 @@ func (b *BucketListener) Update(ctx context.Context, old, new *v1alpha1.Bucket)
213219
var err error
214220

215221
if !bucket.GetDeletionTimestamp().IsZero() {
216-
if controllerutil.ContainsFinalizer(bucket, consts.BABucketFinalizer) {
217-
bucketClaimNs := bucket.Spec.BucketClaim.Namespace
218-
bucketClaimName := bucket.Spec.BucketClaim.Name
219-
bucketAccessList, err := b.bucketAccesses(bucketClaimNs).List(ctx, metav1.ListOptions{})
220-
if err != nil {
221-
klog.V(3).ErrorS(err, "Error fetching BucketAccessList",
222-
"bucket", bucket.ObjectMeta.Name)
223-
return err
224-
}
225-
226-
for _, bucketAccess := range bucketAccessList.Items {
227-
if strings.EqualFold(bucketAccess.Spec.BucketClaimName, bucketClaimName) {
228-
err = b.bucketAccesses(bucketClaimNs).Delete(ctx, bucketAccess.Name, metav1.DeleteOptions{})
229-
if err != nil {
230-
klog.V(3).ErrorS(err, "Error deleting BucketAccess",
231-
"name", bucketAccess.Name,
232-
"bucket", bucket.ObjectMeta.Name)
233-
return err
234-
}
235-
}
236-
}
237-
238-
klog.V(5).Infof("Successfully deleted dependent bucketAccess of bucket:%s", bucket.ObjectMeta.Name)
239-
240-
controllerutil.RemoveFinalizer(bucket, consts.BABucketFinalizer)
241-
klog.V(5).Infof("Successfully removed finalizer: %s of bucket: %s", consts.BABucketFinalizer, bucket.ObjectMeta.Name)
242-
}
243-
244-
if controllerutil.ContainsFinalizer(bucket, consts.BucketFinalizer) {
245-
err = b.deleteBucketOp(ctx, bucket)
246-
if err != nil {
247-
return b.recordError(bucket, v1.EventTypeWarning, events.FailedDeleteBucket, err)
248-
}
249-
250-
controllerutil.RemoveFinalizer(bucket, consts.BucketFinalizer)
251-
klog.V(5).Infof("Successfully removed finalizer: %s of bucket: %s", consts.BucketFinalizer, bucket.ObjectMeta.Name)
252-
}
253-
254-
_, err = b.buckets().Update(ctx, bucket, metav1.UpdateOptions{})
255-
if err != nil {
256-
klog.V(3).ErrorS(err, "Error updating bucket after removing finalizers",
257-
"bucket", bucket.ObjectMeta.Name)
222+
if err = b.handleDeletion(ctx, bucket); err != nil {
258223
return err
259224
}
260225
}
@@ -265,7 +230,7 @@ func (b *BucketListener) Update(ctx context.Context, old, new *v1alpha1.Bucket)
265230
return nil
266231
}
267232

268-
// Delete attemps to delete a bucket. This function must be idempotent
233+
// Delete attempts to delete a bucket. This function must be idempotent
269234
// Delete function is called when the bucket was not able to add finalizers while creation.
270235
// Hence we will take care of removing the BucketClaim finalizer before deleting the Bucket object.
271236
// Return values
@@ -374,6 +339,55 @@ func (b *BucketListener) deleteBucketOp(ctx context.Context, bucket *v1alpha1.Bu
374339
return nil
375340
}
376341

342+
func (b *BucketListener) handleDeletion(ctx context.Context, bucket *v1alpha1.Bucket) error {
343+
var err error
344+
345+
// Remove BABucketFinalizer and delete associated BucketAccess resources
346+
if controllerutil.ContainsFinalizer(bucket, consts.BABucketFinalizer) {
347+
bucketClaimNs := bucket.Spec.BucketClaim.Namespace
348+
bucketClaimName := bucket.Spec.BucketClaim.Name
349+
bucketAccessList, err := b.bucketAccesses(bucketClaimNs).List(ctx, metav1.ListOptions{})
350+
if err != nil {
351+
klog.V(3).ErrorS(err, "Error fetching BucketAccessList", "bucket", bucket.ObjectMeta.Name)
352+
return err
353+
}
354+
355+
for _, bucketAccess := range bucketAccessList.Items {
356+
if strings.EqualFold(bucketAccess.Spec.BucketClaimName, bucketClaimName) {
357+
err = b.bucketAccesses(bucketClaimNs).Delete(ctx, bucketAccess.Name, metav1.DeleteOptions{})
358+
if err != nil {
359+
klog.V(3).ErrorS(err, "Error deleting BucketAccess", "name", bucketAccess.Name, "bucket", bucket.ObjectMeta.Name)
360+
return err
361+
}
362+
}
363+
}
364+
365+
klog.V(5).Infof("Successfully deleted dependent bucketAccess of bucket:%s", bucket.ObjectMeta.Name)
366+
367+
controllerutil.RemoveFinalizer(bucket, consts.BABucketFinalizer)
368+
klog.V(5).Infof("Successfully removed finalizer: %s of bucket: %s", consts.BABucketFinalizer, bucket.ObjectMeta.Name)
369+
}
370+
371+
// Remove BucketFinalizer and delete the bucket
372+
if controllerutil.ContainsFinalizer(bucket, consts.BucketFinalizer) {
373+
err = b.deleteBucketOp(ctx, bucket)
374+
if err != nil {
375+
return b.recordError(bucket, v1.EventTypeWarning, events.FailedDeleteBucket, err)
376+
}
377+
378+
controllerutil.RemoveFinalizer(bucket, consts.BucketFinalizer)
379+
klog.V(5).Infof("Successfully removed finalizer: %s of bucket: %s", consts.BucketFinalizer, bucket.ObjectMeta.Name)
380+
381+
_, err = b.buckets().Update(ctx, bucket, metav1.UpdateOptions{})
382+
if err != nil {
383+
klog.V(3).ErrorS(err, "Error updating bucket after removing finalizers", "bucket", bucket.ObjectMeta.Name)
384+
return err
385+
}
386+
}
387+
388+
return nil
389+
}
390+
377391
func (b *BucketListener) buckets() bucketapi.BucketInterface {
378392
if b.bucketClient != nil {
379393
return b.bucketClient.ObjectstorageV1alpha1().Buckets()

Diff for: pkg/imported-sidecar/pkg/bucketaccess/bucketaccess_controller.go

+7
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,13 @@ func NewBucketAccessListener(driverName string, client cosi.ProvisionerClient) *
6969
func (bal *BucketAccessListener) Add(ctx context.Context, inputBucketAccess *v1alpha1.BucketAccess) error {
7070
bucketAccess := inputBucketAccess.DeepCopy()
7171

72+
if !bucketAccess.GetDeletionTimestamp().IsZero() {
73+
// If the bucketAccess has a deletion timestamp, handle it as a deletion
74+
klog.V(3).InfoS("BucketAccess has deletion timestamp, handling deletion",
75+
"name", bucketAccess.ObjectMeta.Name)
76+
return bal.deleteBucketAccessOp(ctx, bucketAccess)
77+
}
78+
7279
if bucketAccess.Status.AccessGranted && bucketAccess.Status.AccountID != "" {
7380
klog.V(3).InfoS("BucketAccess already exists", bucketAccess.ObjectMeta.Name)
7481
return nil

0 commit comments

Comments
 (0)