44 "context"
55 "fmt"
66 "log"
7+ "strings"
78
89 "github.com/hashicorp/terraform-plugin-sdk/helper/resource"
910 sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors"
@@ -293,7 +294,7 @@ func (me *MongodbService) DescribeAsyncRequestInfo(ctx context.Context, asyncId
293294 logId := getLogId (ctx )
294295 request := mongodb .NewDescribeAsyncRequestInfoRequest ()
295296 request .AsyncRequestId = & asyncId
296- err := resource .Retry (readRetryTimeout , func () * resource.RetryError {
297+ err := resource .Retry (readRetryTimeout * 3 , func () * resource.RetryError {
297298 ratelimit .Check (request .GetAction ())
298299 result , e := me .client .UseMongodbClient ().DescribeAsyncRequestInfo (request )
299300 if e != nil {
@@ -315,7 +316,7 @@ func (me *MongodbService) DescribeAsyncRequestInfo(ctx context.Context, asyncId
315316 return nil
316317}
317318
318- func (me * MongodbService ) OfflineIsolatedDBInstance (ctx context.Context , instanceId string ) (errRet error ) {
319+ func (me * MongodbService ) OfflineIsolatedDBInstance (ctx context.Context , instanceId string , timeOutTolerant bool ) (errRet error ) {
319320 logId := getLogId (ctx )
320321 request := mongodb .NewOfflineIsolatedDBInstanceRequest ()
321322 request .InstanceId = & instanceId
@@ -330,27 +331,26 @@ func (me *MongodbService) OfflineIsolatedDBInstance(ctx context.Context, instanc
330331 ratelimit .Check (request .GetAction ())
331332 response , err = me .client .UseMongodbClient ().OfflineIsolatedDBInstance (request )
332333 if err != nil {
333- if ee , ok := err .(* sdkErrors.TencentCloudSDKError ); ok {
334- if ee .Code == "InvalidParameterValue.LockFailed" {
335- return resource .RetryableError (err )
336- } else {
337- return resource .NonRetryableError (err )
338- }
339- }
340- log .Printf ("[CRITAL]%s api[%s] fail, reason:%s" , logId , request .GetAction (), err .Error ())
341- return resource .NonRetryableError (err )
334+ return retryError (err , mongodb .INVALIDPARAMETERVALUE_LOCKFAILED )
342335 }
343336 return nil
344337 })
345338 if err != nil {
346339 return err
347340 }
348- if response != nil && response .Response != nil {
349- if err = me .DescribeAsyncRequestInfo (ctx , * response .Response .AsyncRequestId ); err != nil {
350- return err
351- }
352- }
353341 log .Printf ("[DEBUG]%s api[%s] success, request body [%s], response body [%s]" ,
354342 logId , request .GetAction (), request .ToJsonString (), response .ToJsonString ())
355- return nil
343+ if response == nil || response .Response == nil {
344+ return nil
345+ }
346+ err = me .DescribeAsyncRequestInfo (ctx , * response .Response .AsyncRequestId )
347+ if err == nil {
348+ return nil
349+ }
350+ isTimeout := strings .Contains (err .Error (), "retrying" )
351+ if err != nil && isTimeout && timeOutTolerant {
352+ log .Printf ("[WARN] Offline Task Timeout but tolerant, process continue." )
353+ return nil
354+ }
355+ return err
356356}
0 commit comments