From e34540aa0b5dd518e3d97b83194158a8a35faba9 Mon Sep 17 00:00:00 2001 From: Mark Boyd Date: Thu, 27 Jun 2024 11:54:03 -0400 Subject: [PATCH] improve error handling for batch delete errors --- awss3/s3_bucket.go | 11 ++++++----- awss3/s3_bucket_test.go | 22 +++++++++++++++++++++- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/awss3/s3_bucket.go b/awss3/s3_bucket.go index 8ef61af..9fc1437 100644 --- a/awss3/s3_bucket.go +++ b/awss3/s3_bucket.go @@ -227,7 +227,6 @@ func (s *S3Bucket) Modify(bucketName string, bucketDetails BucketDetails) error } func (s *S3Bucket) Delete(bucketName string, deleteObjects bool) error { - deleteBucketInput := &s3.DeleteBucketInput{ Bucket: aws.String(bucketName), } @@ -340,10 +339,12 @@ func handleDeleteError(err error) error { func isBatchDeleteNoBucketError(batchErr awserr.Error) bool { origErr := batchErr.OrigErr() if origBatchErrs, origAwsOk := origErr.(s3manager.Errors); origAwsOk { - for _, origBatchErr := range origBatchErrs { - if origBatchErr.OrigErr != nil { - return isNoSuchBucketError(origBatchErr.OrigErr) - } + if len(origBatchErrs) > 1 { + return false + } + origBatchErr := origBatchErrs[0] + if origBatchErr.OrigErr != nil { + return isNoSuchBucketError(origBatchErr.OrigErr) } } return false diff --git a/awss3/s3_bucket_test.go b/awss3/s3_bucket_test.go index 05d78a8..14f2446 100644 --- a/awss3/s3_bucket_test.go +++ b/awss3/s3_bucket_test.go @@ -261,6 +261,22 @@ func TestIsBatchDeleteNoBucketError(t *testing.T) { }, }, ) + batchDeleteNoSuchBucketErr2 := s3manager.NewBatchError( + "BatchedDeleteIncomplete", + "some objects have failed to be deleted.", + []s3manager.Error{ + { + OrigErr: awserr.NewRequestFailure(awserr.New("OtherError", "this is a random error", nil), 500, "req-1"), + Bucket: aws.String("bucket"), + Key: aws.String("key"), + }, + { + OrigErr: awserr.NewRequestFailure(awserr.New("NoSuchBucket", "specified bucket does not exist", nil), 404, "req-1"), + Bucket: aws.String("bucket"), + Key: aws.String("key"), + }, + }, + ) batchDeleteOtherErr := s3manager.NewBatchError( "BatchedDeleteIncomplete", "some objects have failed to be deleted.", @@ -277,10 +293,14 @@ func TestIsBatchDeleteNoBucketError(t *testing.T) { inputErr awserr.Error expectIsNoSuchBucketErr bool }{ - "batch delete NoSuchBucket error, expect true": { + "batch delete NoSuchBucket first error, expect true": { inputErr: batchDeleteNoSuchBucketErr, expectIsNoSuchBucketErr: true, }, + "batch delete NoSuchBucket second error, expect false": { + inputErr: batchDeleteNoSuchBucketErr2, + expectIsNoSuchBucketErr: false, + }, "batch delete other error, expect error": { inputErr: batchDeleteOtherErr, expectIsNoSuchBucketErr: false,