diff --git a/CHANGELOG.md b/CHANGELOG.md index 348c38a4f8..8cbf04804a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,10 @@ ## 1.42.1 (Unreleased) + +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) FEATURES: diff --git a/tencentcloud/resource_tc_mongodb_instance.go b/tencentcloud/resource_tc_mongodb_instance.go index c985232cb6..b86c06c671 100644 --- a/tencentcloud/resource_tc_mongodb_instance.go +++ b/tencentcloud/resource_tc_mongodb_instance.go @@ -511,6 +511,18 @@ func resourceTencentCloudMongodbInstanceDelete(d *schema.ResourceData, meta inte if err != nil { return err } - - return nil + err = mongodbService.OfflineIsolatedDBInstance(ctx, instanceId) + if err != nil { + log.Printf("[CRITAL]%s mongodb %s fail, reason:%s", logId, "OfflineIsolatedDBInstance", err.Error()) + return err + } + //describe and check not exist + _, has, errRet := mongodbService.DescribeInstanceById(ctx, instanceId) + if errRet != nil { + return errRet + } + if !has { + 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 c0b6a17427..29938c1405 100644 --- a/tencentcloud/resource_tc_mongodb_sharding_instance.go +++ b/tencentcloud/resource_tc_mongodb_sharding_instance.go @@ -506,6 +506,18 @@ func resourceMongodbShardingInstanceDelete(d *schema.ResourceData, meta interfac if err != nil { return err } - - return nil + err = mongodbService.OfflineIsolatedDBInstance(ctx, instanceId) + if err != nil { + log.Printf("[CRITAL]%s mongodb %s fail, reason:%s", logId, "OfflineIsolatedDBInstance", err.Error()) + return err + } + //describe and check not exist + _, has, errRet := mongodbService.DescribeInstanceById(ctx, instanceId) + if errRet != nil { + return errRet + } + if !has { + 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 cc44171ccf..f90889fbc7 100644 --- a/tencentcloud/resource_tc_mongodb_standby_instance.go +++ b/tencentcloud/resource_tc_mongodb_standby_instance.go @@ -556,6 +556,18 @@ func resourceTencentCloudMongodbStandbyInstanceDelete(d *schema.ResourceData, me if err != nil { return err } - - return nil + err = mongodbService.OfflineIsolatedDBInstance(ctx, instanceId) + if err != nil { + log.Printf("[CRITAL]%s mongodb %s fail, reason:%s", logId, "OfflineIsolatedDBInstance", err.Error()) + return err + } + //describe and check not exist + _, has, errRet := mongodbService.DescribeInstanceById(ctx, instanceId) + if errRet != nil { + return errRet + } + if !has { + return nil + } + return fmt.Errorf("[CRITAL]%s mongodb %s fail", logId, "OfflineIsolatedDBInstance") } diff --git a/tencentcloud/service_tencentcloud_mongodb.go b/tencentcloud/service_tencentcloud_mongodb.go index 443476690f..ec116e0477 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 + var err error + err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + 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(err) + } else { + return resource.NonRetryableError(err) + } + } + log.Printf("[CRITAL]%s api[%s] fail, reason:%s", logId, request.GetAction(), err.Error()) + return resource.NonRetryableError(err) + } + 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 +}