Skip to content

modify mongodb force_delete #513

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Sep 9, 2020
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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:
Expand Down
20 changes: 19 additions & 1 deletion tencentcloud/resource_tc_mongodb_instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -511,6 +511,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
}
20 changes: 19 additions & 1 deletion tencentcloud/resource_tc_mongodb_sharding_instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -506,6 +506,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
}
19 changes: 19 additions & 0 deletions tencentcloud/resource_tc_mongodb_standby_instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -556,6 +556,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
}
40 changes: 40 additions & 0 deletions tencentcloud/service_tencentcloud_mongodb.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}