Skip to content

Commit 76e37bb

Browse files
authored
fix: [128286548] tag support retry (#3587)
* fix: tag support retry * fix: add changelog
1 parent b7e58d4 commit 76e37bb

File tree

3 files changed

+34
-2
lines changed

3 files changed

+34
-2
lines changed

.changelog/3587.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
resource/tencentcloud_mysql_readonly_instance: tag support retry.
3+
```

tencentcloud/services/cdb/resource_tc_mysql_instance.go

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"fmt"
66
"log"
7+
"strings"
78
"time"
89

910
tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
@@ -13,6 +14,7 @@ import (
1314
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1415
cdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320"
1516
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors"
17+
sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors"
1618

1719
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
1820
)
@@ -1659,8 +1661,20 @@ func mysqlAllInstanceRoleUpdate(ctx context.Context, d *schema.ResourceData, met
16591661
tagService := svctag.NewTagService(tcClient)
16601662
region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region
16611663
resourceName := tccommon.BuildTagResourceName("cdb", "instanceId", region, d.Id())
1662-
err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags)
1664+
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
1665+
if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil {
1666+
if sdkErr, ok := err.(*sdkErrors.TencentCloudSDKError); ok {
1667+
if sdkErr.Code == "FailedOperation" && strings.Contains(sdkErr.Message, "repeat commit: lock:resourceTag") {
1668+
return resource.RetryableError(err)
1669+
}
1670+
return resource.NonRetryableError(err)
1671+
}
1672+
return resource.NonRetryableError(err)
1673+
}
1674+
return nil
1675+
})
16631676
if err != nil {
1677+
log.Printf("[CRITAL]%s create mysql tag fail, reason:%s\n ", logId, err.Error())
16641678
return err
16651679
}
16661680
//internal version: replace waitTag begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation.

tencentcloud/services/cdb/resource_tc_mysql_readonly_instance.go

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"fmt"
66
"log"
7+
"strings"
78

89
tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
910
svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag"
@@ -12,6 +13,7 @@ import (
1213
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1314
cdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320"
1415
sdkError "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors"
16+
sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors"
1517

1618
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
1719
)
@@ -288,7 +290,20 @@ func resourceTencentCloudMysqlReadonlyInstanceCreate(d *schema.ResourceData, met
288290
tagService := svctag.NewTagService(tcClient)
289291
resourceName := tccommon.BuildTagResourceName("cdb", "instanceId", tcClient.Region, d.Id())
290292
log.Printf("[DEBUG]Mysql instance create, resourceName:%s\n", resourceName)
291-
if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil {
293+
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
294+
if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil {
295+
if sdkErr, ok := err.(*sdkErrors.TencentCloudSDKError); ok {
296+
if sdkErr.Code == "FailedOperation" && strings.Contains(sdkErr.Message, "repeat commit: lock:resourceTag") {
297+
return resource.RetryableError(err)
298+
}
299+
return resource.NonRetryableError(err)
300+
}
301+
return resource.NonRetryableError(err)
302+
}
303+
return nil
304+
})
305+
if err != nil {
306+
log.Printf("[CRITAL]%s create mysql tag fail, reason:%s\n ", logId, err.Error())
292307
return err
293308
}
294309
}

0 commit comments

Comments
 (0)