@@ -195,7 +195,6 @@ func TencentMsyqlBasicInfo() map[string]*schema.Schema {
195195 Optional : true ,
196196 Description : "Instance tags." ,
197197 },
198-
199198 "force_delete" : {
200199 Type : schema .TypeBool ,
201200 Optional : true ,
@@ -557,6 +556,8 @@ func mysqlCreateInstancePayByMonth(ctx context.Context, d *schema.ResourceData,
557556 logId := getLogId (ctx )
558557
559558 request := cdb .NewCreateDBInstanceRequest ()
559+ clientToken := helper .BuildToken ()
560+ request .ClientToken = & clientToken
560561
561562 payType , oldOk := d .GetOkExists ("pay_type" )
562563 var period int
@@ -578,15 +579,30 @@ func mysqlCreateInstancePayByMonth(ctx context.Context, d *schema.ResourceData,
578579 return err
579580 }
580581
581- response , err := meta .(* TencentCloudClient ).apiV3Conn .UseMysqlClient ().CreateDBInstance (request )
582+ var response * cdb.CreateDBInstanceResponse
583+ err := resource .Retry (writeRetryTimeout , func () * resource.RetryError {
584+ // shadowed response will not pass to outside
585+ r , inErr := meta .(* TencentCloudClient ).apiV3Conn .UseMysqlClient ().CreateDBInstance (request )
586+ if inErr != nil {
587+ log .Printf ("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n " ,
588+ logId , request .GetAction (), request .ToJsonString (), inErr .Error ())
589+ return retryError (inErr )
590+ }
591+
592+ if response .Response .InstanceIds == nil && clientToken != "" {
593+ return resource .RetryableError (fmt .Errorf ("%s returns nil instanceIds but client token provided, retrying" , request .GetAction ()))
594+ }
595+
596+ response = r
597+
598+ return nil
599+ })
600+
582601 if err != nil {
583- log .Printf ("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n " ,
584- logId , request .GetAction (), request .ToJsonString (), err .Error ())
585602 return err
586- } else {
587- log .Printf ("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n " ,
588- logId , request .GetAction (), request .ToJsonString (), response .ToJsonString ())
589603 }
604+ log .Printf ("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n " ,
605+ logId , request .GetAction (), request .ToJsonString (), response .ToJsonString ())
590606 if len (response .Response .InstanceIds ) != 1 {
591607 return fmt .Errorf ("mysql CreateDBInstance return len(InstanceIds) is not 1,but %d" , len (response .Response .InstanceIds ))
592608 }
@@ -598,6 +614,8 @@ func mysqlCreateInstancePayByUse(ctx context.Context, d *schema.ResourceData, me
598614
599615 logId := getLogId (ctx )
600616 request := cdb .NewCreateDBInstanceHourRequest ()
617+ clientToken := helper .BuildToken ()
618+ request .ClientToken = & clientToken
601619
602620 if err := mysqlAllInstanceRoleSet (ctx , request , d , meta ); err != nil {
603621 return err
@@ -607,15 +625,28 @@ func mysqlCreateInstancePayByUse(ctx context.Context, d *schema.ResourceData, me
607625 return err
608626 }
609627
610- response , err := meta .(* TencentCloudClient ).apiV3Conn .UseMysqlClient ().CreateDBInstanceHour (request )
628+ var response * cdb.CreateDBInstanceHourResponse
629+ err := resource .Retry (writeRetryTimeout , func () * resource.RetryError {
630+ // shadowed response will not pass to outside
631+ r , inErr := meta .(* TencentCloudClient ).apiV3Conn .UseMysqlClient ().CreateDBInstanceHour (request )
632+ if inErr != nil {
633+ return retryError (inErr )
634+ }
635+ if r .Response .InstanceIds == nil && clientToken != "" {
636+ return resource .RetryableError (fmt .Errorf ("%s returns nil instanceIds but client token provided, retrying" , request .GetAction ()))
637+ }
638+ response = r
639+ return nil
640+ })
611641 if err != nil {
612642 log .Printf ("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n " ,
613643 logId , request .GetAction (), request .ToJsonString (), err .Error ())
614644 return err
615- } else {
616- log .Printf ("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n " ,
617- logId , request .GetAction (), request .ToJsonString (), response .ToJsonString ())
618645 }
646+
647+ log .Printf ("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n " ,
648+ logId , request .GetAction (), request .ToJsonString (), response .ToJsonString ())
649+
619650 if len (response .Response .InstanceIds ) != 1 {
620651 return fmt .Errorf ("mysql CreateDBInstanceHour return len(InstanceIds) is not 1,but %d" , len (response .Response .InstanceIds ))
621652 }
0 commit comments