@@ -69,6 +69,12 @@ func (b *BucketListener) Add(ctx context.Context, inputBucket *v1alpha1.Bucket)
69
69
70
70
var err error
71
71
72
+ if ! bucket .GetDeletionTimestamp ().IsZero () {
73
+ if err = b .handleDeletion (ctx , bucket ); err != nil {
74
+ return err
75
+ }
76
+ }
77
+
72
78
klog .V (3 ).InfoS ("Add Bucket" ,
73
79
"name" , bucket .ObjectMeta .Name )
74
80
@@ -213,48 +219,7 @@ func (b *BucketListener) Update(ctx context.Context, old, new *v1alpha1.Bucket)
213
219
var err error
214
220
215
221
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 {
258
223
return err
259
224
}
260
225
}
@@ -265,7 +230,7 @@ func (b *BucketListener) Update(ctx context.Context, old, new *v1alpha1.Bucket)
265
230
return nil
266
231
}
267
232
268
- // Delete attemps to delete a bucket. This function must be idempotent
233
+ // Delete attempts to delete a bucket. This function must be idempotent
269
234
// Delete function is called when the bucket was not able to add finalizers while creation.
270
235
// Hence we will take care of removing the BucketClaim finalizer before deleting the Bucket object.
271
236
// Return values
@@ -374,6 +339,55 @@ func (b *BucketListener) deleteBucketOp(ctx context.Context, bucket *v1alpha1.Bu
374
339
return nil
375
340
}
376
341
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
+
377
391
func (b * BucketListener ) buckets () bucketapi.BucketInterface {
378
392
if b .bucketClient != nil {
379
393
return b .bucketClient .ObjectstorageV1alpha1 ().Buckets ()
0 commit comments