From ac1c8a7389025b23bcba52b7579c6623b00dee37 Mon Sep 17 00:00:00 2001 From: SevenEarth <391613297@qq.com> Date: Tue, 15 Apr 2025 10:58:39 +0800 Subject: [PATCH 1/3] add --- .../services/cos/service_tencentcloud_cos.go | 32 ++++++++++++++++--- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/tencentcloud/services/cos/service_tencentcloud_cos.go b/tencentcloud/services/cos/service_tencentcloud_cos.go index 5e05f7e737..0ff43ca931 100644 --- a/tencentcloud/services/cos/service_tencentcloud_cos.go +++ b/tencentcloud/services/cos/service_tencentcloud_cos.go @@ -10,6 +10,7 @@ import ( "net/http" "regexp" "strings" + "time" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" @@ -363,6 +364,9 @@ func (me *CosService) DeleteBucket(ctx context.Context, bucket string, forced bo if err != nil { return err } + + // wait cos backend sync + time.Sleep(30 * time.Second) } request := s3.DeleteBucketInput{ @@ -397,17 +401,26 @@ func (me *CosService) ForceCleanObject(ctx context.Context, bucket string, versi return fmt.Errorf("cos force clean object error: the list of objects is truncated and the bucket[%s] needs to be deleted manually!!!", bucket) } + // Get all object list + listObjects, err := me.ListObjects(ctx, bucket) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, resp body [%s], reason[%s]\n", + logId, "ListObjects", resp.Body, err.Error()) + return fmt.Errorf("cos force clean object error: %s, bucket: %s", err.Error(), bucket) + } + verCnt := len(objList.Version) markerCnt := len(objList.DeleteMarker) - log.Printf("[DEBUG][ForceCleanObject]%s api[%s] success, get [%v] versions of object, get [%v] deleteMarker, versioned[%v].\n", logId, "GetObjectVersions", verCnt, markerCnt, versioned) + listObjCnt := len(listObjects) + log.Printf("[DEBUG][ForceCleanObject]%s api[%s] success, get [%v] versions of object, get [%v] deleteMarker, get [%v] listObjects. versioned[%v], multiAzed[%v].\n", logId, "GetObjectVersions", verCnt, markerCnt, listObjCnt, versioned, multiAz) - delCnt := verCnt + markerCnt + delCnt := verCnt + markerCnt + listObjCnt if delCnt == 0 { return nil } delObjs := make([]cos.Object, 0, delCnt) - if versioned || multiAz { + if versioned { //add the versions for _, v := range objList.Version { delObjs = append(delObjs, cos.Object{ @@ -430,8 +443,19 @@ func (me *CosService) ForceCleanObject(ctx context.Context, bucket string, versi } } + if multiAz { + // add obj list + for _, v := range listObjects { + if v.Key != nil { + delObjs = append(delObjs, cos.Object{ + Key: *v.Key, + }) + } + } + } + opt := cos.ObjectDeleteMultiOptions{ - Quiet: true, + Quiet: false, Objects: delObjs, } From e08860f1f22649a7a4edb9e945b95b4f5dc77b20 Mon Sep 17 00:00:00 2001 From: SevenEarth <391613297@qq.com> Date: Wed, 16 Apr 2025 14:40:20 +0800 Subject: [PATCH 2/3] add --- .changelog/3311.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .changelog/3311.txt diff --git a/.changelog/3311.txt b/.changelog/3311.txt new file mode 100644 index 0000000000..8cc2c558e6 --- /dev/null +++ b/.changelog/3311.txt @@ -0,0 +1,3 @@ +```release-note:enhancement +resource/tencentcloud_cos_bucket: Optimize multi zone deletion +``` \ No newline at end of file From 3b1f41ab777f81d7e88f39e0b8f90bcf563bf290 Mon Sep 17 00:00:00 2001 From: SevenEarth <391613297@qq.com> Date: Mon, 26 May 2025 16:29:23 +0800 Subject: [PATCH 3/3] add --- .../services/cos/service_tencentcloud_cos.go | 32 ++++++++++++++++--- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/tencentcloud/services/cos/service_tencentcloud_cos.go b/tencentcloud/services/cos/service_tencentcloud_cos.go index 0ff43ca931..0827151e78 100644 --- a/tencentcloud/services/cos/service_tencentcloud_cos.go +++ b/tencentcloud/services/cos/service_tencentcloud_cos.go @@ -10,7 +10,6 @@ import ( "net/http" "regexp" "strings" - "time" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" @@ -364,9 +363,6 @@ func (me *CosService) DeleteBucket(ctx context.Context, bucket string, forced bo if err != nil { return err } - - // wait cos backend sync - time.Sleep(30 * time.Second) } request := s3.DeleteBucketInput{ @@ -506,6 +502,34 @@ func (me *CosService) ForceCleanObject(ctx context.Context, bucket string, versi log.Printf("[DEBUG][ForceCleanObject]%s api[%s] success, [%v] objects have been cleaned.\n", logId, "ForceCleanObject", len(result.DeletedObjects)) + + // wait + fmt.Println(11111111111) + fmt.Println(11111111111) + fmt.Println(11111111111) + fmt.Println(11111111111) + fmt.Println(11111111111) + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + listObjects, e := me.ListObjects(ctx, bucket) + if e != nil { + log.Printf("[CRITAL]%s api[%s] fail, resp body [%s], reason[%s]\n", + logId, "ListObjects", resp.Body, e.Error()) + return tccommon.RetryError(e) + } + + listObjCount := len(listObjects) + if listObjCount == 0 { + return nil + } + + return resource.RetryableError(fmt.Errorf("waiting objects deleting. still has %d item. retry...", listObjCount)) + }) + + if err != nil { + log.Printf("[CRITAL]%s get COS objects failed, reason:%+v", logId, err) + return err + } + return nil } pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy