From 8277bd4d9e55b5401e4e1c4a768c91cb870f616f Mon Sep 17 00:00:00 2001 From: cyberHermanwang <473102868@qq.com> Date: Wed, 9 Sep 2020 15:22:11 +0800 Subject: [PATCH 1/5] modify mongodb force_delete --- tencentcloud/resource_tc_mongodb_instance.go | 20 +++++++++- .../resource_tc_mongodb_sharding_instance.go | 20 +++++++++- .../resource_tc_mongodb_standby_instance.go | 19 +++++++++ tencentcloud/service_tencentcloud_mongodb.go | 40 +++++++++++++++++++ 4 files changed, 97 insertions(+), 2 deletions(-) diff --git a/tencentcloud/resource_tc_mongodb_instance.go b/tencentcloud/resource_tc_mongodb_instance.go index 78a2c7a687..f96fd76a45 100644 --- a/tencentcloud/resource_tc_mongodb_instance.go +++ b/tencentcloud/resource_tc_mongodb_instance.go @@ -508,6 +508,24 @@ func resourceTencentCloudMongodbInstanceDelete(d *schema.ResourceData, meta inte if err != nil { return err } - + err = mongodbService.OfflineIsolatedDBInstance(ctx, instanceId) + if err != nil { + log.Printf("[CRITAL]%s mongodb %s fail, reason:%s\n", logId, "OfflineIsolatedDBInstance", err.Error()) + return err + } + //describe and check not exist + err = resource.Retry(5*readRetryTimeout, func() *resource.RetryError { + instance, _, errRet := mongodbService.DescribeInstanceById(ctx, instanceId) + if errRet != nil { + return retryError(errRet, InternalError) + } + if instance == nil { + return nil + } + return resource.NonRetryableError(fmt.Errorf("after OfflineIsolatedDBInstance mongodb Status is %d", *instance.Status)) + }) + if err != nil { + return err + } return nil } diff --git a/tencentcloud/resource_tc_mongodb_sharding_instance.go b/tencentcloud/resource_tc_mongodb_sharding_instance.go index 498c6972bc..65d74e6d86 100644 --- a/tencentcloud/resource_tc_mongodb_sharding_instance.go +++ b/tencentcloud/resource_tc_mongodb_sharding_instance.go @@ -503,6 +503,24 @@ func resourceMongodbShardingInstanceDelete(d *schema.ResourceData, meta interfac if err != nil { return err } - + err = mongodbService.OfflineIsolatedDBInstance(ctx, instanceId) + if err != nil { + log.Printf("[CRITAL]%s mongodb %s fail, reason:%s\n", logId, "OfflineIsolatedDBInstance", err.Error()) + return err + } + //describe and check not exist + err = resource.Retry(5*readRetryTimeout, func() *resource.RetryError { + instance, _, errRet := mongodbService.DescribeInstanceById(ctx, instanceId) + if errRet != nil { + return retryError(errRet, InternalError) + } + if instance == nil { + return nil + } + return resource.NonRetryableError(fmt.Errorf("after OfflineIsolatedDBInstance mongodb Status is %d", *instance.Status)) + }) + if err != nil { + return err + } return nil } diff --git a/tencentcloud/resource_tc_mongodb_standby_instance.go b/tencentcloud/resource_tc_mongodb_standby_instance.go index 1b844c88ca..9cd0236980 100644 --- a/tencentcloud/resource_tc_mongodb_standby_instance.go +++ b/tencentcloud/resource_tc_mongodb_standby_instance.go @@ -553,6 +553,25 @@ func resourceTencentCloudMongodbStandbyInstanceDelete(d *schema.ResourceData, me if err != nil { return err } + err = mongodbService.OfflineIsolatedDBInstance(ctx, instanceId) + if err != nil { + log.Printf("[CRITAL]%s mongodb %s fail, reason:%s\n", logId, "OfflineIsolatedDBInstance", err.Error()) + return err + } + //describe and check not exist + err = resource.Retry(5*readRetryTimeout, func() *resource.RetryError { + instance, _, errRet := mongodbService.DescribeInstanceById(ctx, instanceId) + if errRet != nil { + return retryError(errRet, InternalError) + } + if instance == nil { + return nil + } + return resource.NonRetryableError(fmt.Errorf("after OfflineIsolatedDBInstance mongodb Status is %d", *instance.Status)) + }) + if err != nil { + return err + } return nil } diff --git a/tencentcloud/service_tencentcloud_mongodb.go b/tencentcloud/service_tencentcloud_mongodb.go index 443476690f..e2f8e881e5 100644 --- a/tencentcloud/service_tencentcloud_mongodb.go +++ b/tencentcloud/service_tencentcloud_mongodb.go @@ -313,3 +313,43 @@ func (me *MongodbService) DescribeAsyncRequestInfo(ctx context.Context, asyncId return nil } + +func (me *MongodbService) OfflineIsolatedDBInstance(ctx context.Context, instanceId string) (errRet error) { + logId := getLogId(ctx) + request := mongodb.NewOfflineIsolatedDBInstanceRequest() + request.InstanceId = &instanceId + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + var response *mongodb.OfflineIsolatedDBInstanceResponse + err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + result, e := me.client.UseMongodbClient().OfflineIsolatedDBInstance(request) + if e != nil { + if ee, ok := e.(*sdkErrors.TencentCloudSDKError); ok { + if ee.Code == "InvalidParameterValue.LockFailed" { + return resource.RetryableError(e) + } else { + return resource.NonRetryableError(e) + } + } + log.Printf("[CRITAL]%s api[%s] fail, reason:%s", logId, request.GetAction(), e.Error()) + return resource.NonRetryableError(e) + } + response = result + return nil + }) + if err != nil { + return err + } + if response != nil && response.Response != nil { + if err = me.DescribeAsyncRequestInfo(ctx, *response.Response.AsyncRequestId); err != nil { + return err + } + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + return nil +} From 6925996fbb7014996b2bc2d5614d31fa7ed3bb7c Mon Sep 17 00:00:00 2001 From: cyberHermanwang <473102868@qq.com> Date: Wed, 9 Sep 2020 17:33:04 +0800 Subject: [PATCH 2/5] modify changelog file, add mongodb force delete --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 348c38a4f8..9c1c93531d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,11 @@ ## 1.42.1 (Unreleased) + +ENHANCEMENTS: + +* Resource: `tencentcloud_mongodb_instance` support mongodb postpaid force_delete. +* Resource: `tencentcloud_mongodb_sharding_instance` support mongodb sharding postpaid force_delete. +* Resource: `tencentcloud_mongodb_standby_instance` support mongodb standby postpaid force_delete. + ## 1.42.0 (September 8, 2020) FEATURES: From 1fb65ed38284650438ed08b549feec59d0b6740b Mon Sep 17 00:00:00 2001 From: cyberHermanwang <473102868@qq.com> Date: Wed, 9 Sep 2020 20:07:52 +0800 Subject: [PATCH 3/5] Modify the problems in mongodb force delete review --- tencentcloud/resource_tc_mongodb_instance.go | 20 +++++++----------- .../resource_tc_mongodb_sharding_instance.go | 20 +++++++----------- .../resource_tc_mongodb_standby_instance.go | 21 +++++++------------ tencentcloud/service_tencentcloud_mongodb.go | 18 ++++++++-------- 4 files changed, 30 insertions(+), 49 deletions(-) diff --git a/tencentcloud/resource_tc_mongodb_instance.go b/tencentcloud/resource_tc_mongodb_instance.go index e1326eadd4..ab2becbf40 100644 --- a/tencentcloud/resource_tc_mongodb_instance.go +++ b/tencentcloud/resource_tc_mongodb_instance.go @@ -513,22 +513,16 @@ func resourceTencentCloudMongodbInstanceDelete(d *schema.ResourceData, meta inte } err = mongodbService.OfflineIsolatedDBInstance(ctx, instanceId) if err != nil { - log.Printf("[CRITAL]%s mongodb %s fail, reason:%s\n", logId, "OfflineIsolatedDBInstance", err.Error()) + log.Printf("[CRITAL]%s mongodb %s fail, reason:%s", logId, "OfflineIsolatedDBInstance", err.Error()) return err } //describe and check not exist - err = resource.Retry(5*readRetryTimeout, func() *resource.RetryError { - instance, _, errRet := mongodbService.DescribeInstanceById(ctx, instanceId) - if errRet != nil { - return retryError(errRet, InternalError) - } - if instance == nil { - return nil - } - return resource.NonRetryableError(fmt.Errorf("after OfflineIsolatedDBInstance mongodb Status is %d", *instance.Status)) - }) - if err != nil { - return err + _, has, errRet := mongodbService.DescribeInstanceById(ctx, instanceId) + if errRet != nil { + return errRet + } + if !has { + return nil } return nil } diff --git a/tencentcloud/resource_tc_mongodb_sharding_instance.go b/tencentcloud/resource_tc_mongodb_sharding_instance.go index 92f6b63cf5..b4885dd2dd 100644 --- a/tencentcloud/resource_tc_mongodb_sharding_instance.go +++ b/tencentcloud/resource_tc_mongodb_sharding_instance.go @@ -508,22 +508,16 @@ func resourceMongodbShardingInstanceDelete(d *schema.ResourceData, meta interfac } err = mongodbService.OfflineIsolatedDBInstance(ctx, instanceId) if err != nil { - log.Printf("[CRITAL]%s mongodb %s fail, reason:%s\n", logId, "OfflineIsolatedDBInstance", err.Error()) + log.Printf("[CRITAL]%s mongodb %s fail, reason:%s", logId, "OfflineIsolatedDBInstance", err.Error()) return err } //describe and check not exist - err = resource.Retry(5*readRetryTimeout, func() *resource.RetryError { - instance, _, errRet := mongodbService.DescribeInstanceById(ctx, instanceId) - if errRet != nil { - return retryError(errRet, InternalError) - } - if instance == nil { - return nil - } - return resource.NonRetryableError(fmt.Errorf("after OfflineIsolatedDBInstance mongodb Status is %d", *instance.Status)) - }) - if err != nil { - return err + _, has, errRet := mongodbService.DescribeInstanceById(ctx, instanceId) + if errRet != nil { + return errRet + } + if !has { + return nil } return nil } diff --git a/tencentcloud/resource_tc_mongodb_standby_instance.go b/tencentcloud/resource_tc_mongodb_standby_instance.go index 07b43bf7a4..4075d5cf9b 100644 --- a/tencentcloud/resource_tc_mongodb_standby_instance.go +++ b/tencentcloud/resource_tc_mongodb_standby_instance.go @@ -558,23 +558,16 @@ func resourceTencentCloudMongodbStandbyInstanceDelete(d *schema.ResourceData, me } err = mongodbService.OfflineIsolatedDBInstance(ctx, instanceId) if err != nil { - log.Printf("[CRITAL]%s mongodb %s fail, reason:%s\n", logId, "OfflineIsolatedDBInstance", err.Error()) + log.Printf("[CRITAL]%s mongodb %s fail, reason:%s", logId, "OfflineIsolatedDBInstance", err.Error()) return err } //describe and check not exist - err = resource.Retry(5*readRetryTimeout, func() *resource.RetryError { - instance, _, errRet := mongodbService.DescribeInstanceById(ctx, instanceId) - if errRet != nil { - return retryError(errRet, InternalError) - } - if instance == nil { - return nil - } - return resource.NonRetryableError(fmt.Errorf("after OfflineIsolatedDBInstance mongodb Status is %d", *instance.Status)) - }) - if err != nil { - return err + _, has, errRet := mongodbService.DescribeInstanceById(ctx, instanceId) + if errRet != nil { + return errRet + } + if !has { + return nil } - return nil } diff --git a/tencentcloud/service_tencentcloud_mongodb.go b/tencentcloud/service_tencentcloud_mongodb.go index e2f8e881e5..ec116e0477 100644 --- a/tencentcloud/service_tencentcloud_mongodb.go +++ b/tencentcloud/service_tencentcloud_mongodb.go @@ -324,21 +324,21 @@ func (me *MongodbService) OfflineIsolatedDBInstance(ctx context.Context, instanc } }() var response *mongodb.OfflineIsolatedDBInstanceResponse - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + var err error + err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) - result, e := me.client.UseMongodbClient().OfflineIsolatedDBInstance(request) - if e != nil { - if ee, ok := e.(*sdkErrors.TencentCloudSDKError); ok { + response, err = me.client.UseMongodbClient().OfflineIsolatedDBInstance(request) + if err != nil { + if ee, ok := err.(*sdkErrors.TencentCloudSDKError); ok { if ee.Code == "InvalidParameterValue.LockFailed" { - return resource.RetryableError(e) + return resource.RetryableError(err) } else { - return resource.NonRetryableError(e) + return resource.NonRetryableError(err) } } - log.Printf("[CRITAL]%s api[%s] fail, reason:%s", logId, request.GetAction(), e.Error()) - return resource.NonRetryableError(e) + log.Printf("[CRITAL]%s api[%s] fail, reason:%s", logId, request.GetAction(), err.Error()) + return resource.NonRetryableError(err) } - response = result return nil }) if err != nil { From 7b3920e400b4fc82547d93cbcdd7b95b75c22777 Mon Sep 17 00:00:00 2001 From: cyberHermanwang <473102868@qq.com> Date: Wed, 9 Sep 2020 20:55:54 +0800 Subject: [PATCH 4/5] modify force delete retry --- tencentcloud/resource_tc_mongodb_instance.go | 2 +- tencentcloud/resource_tc_mongodb_sharding_instance.go | 2 +- tencentcloud/resource_tc_mongodb_standby_instance.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tencentcloud/resource_tc_mongodb_instance.go b/tencentcloud/resource_tc_mongodb_instance.go index ab2becbf40..b86c06c671 100644 --- a/tencentcloud/resource_tc_mongodb_instance.go +++ b/tencentcloud/resource_tc_mongodb_instance.go @@ -524,5 +524,5 @@ func resourceTencentCloudMongodbInstanceDelete(d *schema.ResourceData, meta inte if !has { return nil } - return nil + return fmt.Errorf("[CRITAL]%s mongodb %s fail", logId, "OfflineIsolatedDBInstance") } diff --git a/tencentcloud/resource_tc_mongodb_sharding_instance.go b/tencentcloud/resource_tc_mongodb_sharding_instance.go index b4885dd2dd..29938c1405 100644 --- a/tencentcloud/resource_tc_mongodb_sharding_instance.go +++ b/tencentcloud/resource_tc_mongodb_sharding_instance.go @@ -519,5 +519,5 @@ func resourceMongodbShardingInstanceDelete(d *schema.ResourceData, meta interfac if !has { return nil } - return nil + return fmt.Errorf("[CRITAL]%s mongodb %s fail", logId, "OfflineIsolatedDBInstance") } diff --git a/tencentcloud/resource_tc_mongodb_standby_instance.go b/tencentcloud/resource_tc_mongodb_standby_instance.go index 4075d5cf9b..f90889fbc7 100644 --- a/tencentcloud/resource_tc_mongodb_standby_instance.go +++ b/tencentcloud/resource_tc_mongodb_standby_instance.go @@ -569,5 +569,5 @@ func resourceTencentCloudMongodbStandbyInstanceDelete(d *schema.ResourceData, me if !has { return nil } - return nil + return fmt.Errorf("[CRITAL]%s mongodb %s fail", logId, "OfflineIsolatedDBInstance") } From 3fdf2dc4b02f7dd29ce644a7487a0f315dda158f Mon Sep 17 00:00:00 2001 From: cyberHermanwang <473102868@qq.com> Date: Wed, 9 Sep 2020 21:25:22 +0800 Subject: [PATCH 5/5] add mongodb force delete changelog --- CHANGELOG.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9c1c93531d..8cbf04804a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,9 @@ ## 1.42.1 (Unreleased) -ENHANCEMENTS: - -* Resource: `tencentcloud_mongodb_instance` support mongodb postpaid force_delete. -* Resource: `tencentcloud_mongodb_sharding_instance` support mongodb sharding postpaid force_delete. -* Resource: `tencentcloud_mongodb_standby_instance` support mongodb standby postpaid force_delete. +BUG FIXES: +* Resource: `tencentcloud_mongodb_instance` Fix the error of releasing associated resources when destroying mongodb postpaid instance. +* Resource: `tencentcloud_mongodb_sharding_instance` Fix the error of releasing associated resources when destroying mongodb postpaid sharding instance. +* Resource: `tencentcloud_mongodb_standby_instance` Fix the error of releasing associated resources when destroying mongodb postpaid standby instance. ## 1.42.0 (September 8, 2020)