Skip to content

Commit 8277bd4

Browse files
modify mongodb force_delete
1 parent b2376d0 commit 8277bd4

File tree

4 files changed

+97
-2
lines changed

4 files changed

+97
-2
lines changed

tencentcloud/resource_tc_mongodb_instance.go

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -508,6 +508,24 @@ func resourceTencentCloudMongodbInstanceDelete(d *schema.ResourceData, meta inte
508508
if err != nil {
509509
return err
510510
}
511-
511+
err = mongodbService.OfflineIsolatedDBInstance(ctx, instanceId)
512+
if err != nil {
513+
log.Printf("[CRITAL]%s mongodb %s fail, reason:%s\n", logId, "OfflineIsolatedDBInstance", err.Error())
514+
return err
515+
}
516+
//describe and check not exist
517+
err = resource.Retry(5*readRetryTimeout, func() *resource.RetryError {
518+
instance, _, errRet := mongodbService.DescribeInstanceById(ctx, instanceId)
519+
if errRet != nil {
520+
return retryError(errRet, InternalError)
521+
}
522+
if instance == nil {
523+
return nil
524+
}
525+
return resource.NonRetryableError(fmt.Errorf("after OfflineIsolatedDBInstance mongodb Status is %d", *instance.Status))
526+
})
527+
if err != nil {
528+
return err
529+
}
512530
return nil
513531
}

tencentcloud/resource_tc_mongodb_sharding_instance.go

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -503,6 +503,24 @@ func resourceMongodbShardingInstanceDelete(d *schema.ResourceData, meta interfac
503503
if err != nil {
504504
return err
505505
}
506-
506+
err = mongodbService.OfflineIsolatedDBInstance(ctx, instanceId)
507+
if err != nil {
508+
log.Printf("[CRITAL]%s mongodb %s fail, reason:%s\n", logId, "OfflineIsolatedDBInstance", err.Error())
509+
return err
510+
}
511+
//describe and check not exist
512+
err = resource.Retry(5*readRetryTimeout, func() *resource.RetryError {
513+
instance, _, errRet := mongodbService.DescribeInstanceById(ctx, instanceId)
514+
if errRet != nil {
515+
return retryError(errRet, InternalError)
516+
}
517+
if instance == nil {
518+
return nil
519+
}
520+
return resource.NonRetryableError(fmt.Errorf("after OfflineIsolatedDBInstance mongodb Status is %d", *instance.Status))
521+
})
522+
if err != nil {
523+
return err
524+
}
507525
return nil
508526
}

tencentcloud/resource_tc_mongodb_standby_instance.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -553,6 +553,25 @@ func resourceTencentCloudMongodbStandbyInstanceDelete(d *schema.ResourceData, me
553553
if err != nil {
554554
return err
555555
}
556+
err = mongodbService.OfflineIsolatedDBInstance(ctx, instanceId)
557+
if err != nil {
558+
log.Printf("[CRITAL]%s mongodb %s fail, reason:%s\n", logId, "OfflineIsolatedDBInstance", err.Error())
559+
return err
560+
}
561+
//describe and check not exist
562+
err = resource.Retry(5*readRetryTimeout, func() *resource.RetryError {
563+
instance, _, errRet := mongodbService.DescribeInstanceById(ctx, instanceId)
564+
if errRet != nil {
565+
return retryError(errRet, InternalError)
566+
}
567+
if instance == nil {
568+
return nil
569+
}
570+
return resource.NonRetryableError(fmt.Errorf("after OfflineIsolatedDBInstance mongodb Status is %d", *instance.Status))
571+
})
572+
if err != nil {
573+
return err
574+
}
556575

557576
return nil
558577
}

tencentcloud/service_tencentcloud_mongodb.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,3 +313,43 @@ func (me *MongodbService) DescribeAsyncRequestInfo(ctx context.Context, asyncId
313313

314314
return nil
315315
}
316+
317+
func (me *MongodbService) OfflineIsolatedDBInstance(ctx context.Context, instanceId string) (errRet error) {
318+
logId := getLogId(ctx)
319+
request := mongodb.NewOfflineIsolatedDBInstanceRequest()
320+
request.InstanceId = &instanceId
321+
defer func() {
322+
if errRet != nil {
323+
log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error())
324+
}
325+
}()
326+
var response *mongodb.OfflineIsolatedDBInstanceResponse
327+
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
328+
ratelimit.Check(request.GetAction())
329+
result, e := me.client.UseMongodbClient().OfflineIsolatedDBInstance(request)
330+
if e != nil {
331+
if ee, ok := e.(*sdkErrors.TencentCloudSDKError); ok {
332+
if ee.Code == "InvalidParameterValue.LockFailed" {
333+
return resource.RetryableError(e)
334+
} else {
335+
return resource.NonRetryableError(e)
336+
}
337+
}
338+
log.Printf("[CRITAL]%s api[%s] fail, reason:%s", logId, request.GetAction(), e.Error())
339+
return resource.NonRetryableError(e)
340+
}
341+
response = result
342+
return nil
343+
})
344+
if err != nil {
345+
return err
346+
}
347+
if response != nil && response.Response != nil {
348+
if err = me.DescribeAsyncRequestInfo(ctx, *response.Response.AsyncRequestId); err != nil {
349+
return err
350+
}
351+
}
352+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]",
353+
logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
354+
return nil
355+
}

0 commit comments

Comments
 (0)