Skip to content

Commit 890892c

Browse files
authored
fix: Fix the bug of readonly update (#2303)
* fix: Fix the bug of readonly update * fix: add 2303 changelog * fix: modify doc
1 parent a3de149 commit 890892c

7 files changed

+141
-68
lines changed

.changelog/2303.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:bug
2+
tencentcloud_mysql_readonly_instance: Fix the problem of error reporting when modifying configuration
3+
```

tencentcloud/resource_tc_mysql_instance.go

Lines changed: 98 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1051,7 +1051,7 @@ func resourceTencentCloudMysqlInstanceRead(d *schema.ResourceData, meta interfac
10511051
/*
10521052
[master] and [dr] and [ro] all need update
10531053
*/
1054-
func mysqlAllInstanceRoleUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) error {
1054+
func mysqlAllInstanceRoleUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}, isReadonly bool) error {
10551055

10561056
logId := getLogId(ctx)
10571057

@@ -1088,64 +1088,115 @@ func mysqlAllInstanceRoleUpdate(ctx context.Context, d *schema.ResourceData, met
10881088
}
10891089
}
10901090

1091-
if d.HasChange("mem_size") || d.HasChange("cpu") || d.HasChange("volume_size") || d.HasChange("device_type") || d.HasChange("slave_deploy_mode") || d.HasChange("first_slave_zone") || d.HasChange("second_slave_zone") || d.HasChange("slave_sync_mode") {
1091+
if isReadonly {
1092+
if d.HasChange("mem_size") || d.HasChange("cpu") || d.HasChange("volume_size") || d.HasChange("device_type") {
10921093

1093-
memSize := int64(d.Get("mem_size").(int))
1094-
cpu := int64(d.Get("cpu").(int))
1095-
volumeSize := int64(d.Get("volume_size").(int))
1096-
slaveDeployMode := int64(d.Get("slave_deploy_mode").(int))
1097-
slaveSyncMode := int64(d.Get("slave_sync_mode").(int))
1098-
deviceType := ""
1099-
firstSlaveZone := ""
1100-
secondSlaveZone := ""
1094+
memSize := int64(d.Get("mem_size").(int))
1095+
cpu := int64(d.Get("cpu").(int))
1096+
volumeSize := int64(d.Get("volume_size").(int))
1097+
deviceType := ""
11011098

1102-
fastUpgrade := int64(0)
1103-
if v, ok := d.GetOk("fast_upgrade"); ok {
1104-
fastUpgrade = int64(v.(int))
1105-
}
1106-
if v, ok := d.GetOk("device_type"); ok {
1107-
deviceType = v.(string)
1108-
}
1099+
fastUpgrade := int64(0)
1100+
if v, ok := d.GetOk("fast_upgrade"); ok {
1101+
fastUpgrade = int64(v.(int))
1102+
}
1103+
if v, ok := d.GetOk("device_type"); ok {
1104+
deviceType = v.(string)
1105+
}
11091106

1110-
if v, ok := d.GetOk("first_slave_zone"); ok {
1111-
firstSlaveZone = v.(string)
1112-
}
1107+
asyncRequestId, err := mysqlService.UpgradeDBInstance(ctx, d.Id(), memSize, cpu, volumeSize, fastUpgrade, deviceType, -1, -1, "", "")
11131108

1114-
if v, ok := d.GetOk("second_slave_zone"); ok {
1115-
secondSlaveZone = v.(string)
1116-
}
1109+
if err != nil {
1110+
return err
1111+
}
11171112

1118-
asyncRequestId, err := mysqlService.UpgradeDBInstance(ctx, d.Id(), memSize, cpu, volumeSize, fastUpgrade, deviceType, slaveDeployMode, slaveSyncMode, firstSlaveZone, secondSlaveZone)
1113+
err = resource.Retry(6*time.Hour, func() *resource.RetryError {
1114+
taskStatus, message, err := mysqlService.DescribeAsyncRequestInfo(ctx, asyncRequestId)
11191115

1120-
if err != nil {
1121-
return err
1122-
}
1116+
if err != nil {
1117+
if _, ok := err.(*errors.TencentCloudSDKError); !ok {
1118+
return resource.RetryableError(err)
1119+
} else {
1120+
return resource.NonRetryableError(err)
1121+
}
1122+
}
11231123

1124-
err = resource.Retry(6*time.Hour, func() *resource.RetryError {
1125-
taskStatus, message, err := mysqlService.DescribeAsyncRequestInfo(ctx, asyncRequestId)
1124+
if taskStatus == MYSQL_TASK_STATUS_SUCCESS {
1125+
return nil
1126+
}
1127+
if taskStatus == MYSQL_TASK_STATUS_INITIAL || taskStatus == MYSQL_TASK_STATUS_RUNNING {
1128+
return resource.RetryableError(fmt.Errorf("update mysql mem_size/volume_size status is %s", taskStatus))
1129+
}
1130+
err = fmt.Errorf("update mysql mem_size/volume_size task status is %s,we won't wait for it finish ,it show message:%s",
1131+
",", message)
1132+
return resource.NonRetryableError(err)
1133+
})
11261134

11271135
if err != nil {
1128-
if _, ok := err.(*errors.TencentCloudSDKError); !ok {
1129-
return resource.RetryableError(err)
1130-
} else {
1131-
return resource.NonRetryableError(err)
1132-
}
1136+
log.Printf("[CRITAL]%s update mysql mem_size/volume_size fail, reason:%s\n ", logId, err.Error())
1137+
return err
1138+
}
1139+
}
1140+
} else {
1141+
if d.HasChange("mem_size") || d.HasChange("cpu") || d.HasChange("volume_size") || d.HasChange("device_type") || d.HasChange("slave_deploy_mode") || d.HasChange("first_slave_zone") || d.HasChange("second_slave_zone") || d.HasChange("slave_sync_mode") {
1142+
1143+
memSize := int64(d.Get("mem_size").(int))
1144+
cpu := int64(d.Get("cpu").(int))
1145+
volumeSize := int64(d.Get("volume_size").(int))
1146+
slaveDeployMode := int64(d.Get("slave_deploy_mode").(int))
1147+
slaveSyncMode := int64(d.Get("slave_sync_mode").(int))
1148+
deviceType := ""
1149+
firstSlaveZone := ""
1150+
secondSlaveZone := ""
1151+
1152+
fastUpgrade := int64(0)
1153+
if v, ok := d.GetOk("fast_upgrade"); ok {
1154+
fastUpgrade = int64(v.(int))
1155+
}
1156+
if v, ok := d.GetOk("device_type"); ok {
1157+
deviceType = v.(string)
11331158
}
11341159

1135-
if taskStatus == MYSQL_TASK_STATUS_SUCCESS {
1136-
return nil
1160+
if v, ok := d.GetOk("first_slave_zone"); ok {
1161+
firstSlaveZone = v.(string)
11371162
}
1138-
if taskStatus == MYSQL_TASK_STATUS_INITIAL || taskStatus == MYSQL_TASK_STATUS_RUNNING {
1139-
return resource.RetryableError(fmt.Errorf("update mysql mem_size/volume_size status is %s", taskStatus))
1163+
1164+
if v, ok := d.GetOk("second_slave_zone"); ok {
1165+
secondSlaveZone = v.(string)
11401166
}
1141-
err = fmt.Errorf("update mysql mem_size/volume_size task status is %s,we won't wait for it finish ,it show message:%s",
1142-
",", message)
1143-
return resource.NonRetryableError(err)
1144-
})
11451167

1146-
if err != nil {
1147-
log.Printf("[CRITAL]%s update mysql mem_size/volume_size fail, reason:%s\n ", logId, err.Error())
1148-
return err
1168+
asyncRequestId, err := mysqlService.UpgradeDBInstance(ctx, d.Id(), memSize, cpu, volumeSize, fastUpgrade, deviceType, slaveDeployMode, slaveSyncMode, firstSlaveZone, secondSlaveZone)
1169+
1170+
if err != nil {
1171+
return err
1172+
}
1173+
1174+
err = resource.Retry(6*time.Hour, func() *resource.RetryError {
1175+
taskStatus, message, err := mysqlService.DescribeAsyncRequestInfo(ctx, asyncRequestId)
1176+
1177+
if err != nil {
1178+
if _, ok := err.(*errors.TencentCloudSDKError); !ok {
1179+
return resource.RetryableError(err)
1180+
} else {
1181+
return resource.NonRetryableError(err)
1182+
}
1183+
}
1184+
1185+
if taskStatus == MYSQL_TASK_STATUS_SUCCESS {
1186+
return nil
1187+
}
1188+
if taskStatus == MYSQL_TASK_STATUS_INITIAL || taskStatus == MYSQL_TASK_STATUS_RUNNING {
1189+
return resource.RetryableError(fmt.Errorf("update mysql mem_size/volume_size status is %s", taskStatus))
1190+
}
1191+
err = fmt.Errorf("update mysql mem_size/volume_size task status is %s,we won't wait for it finish ,it show message:%s",
1192+
",", message)
1193+
return resource.NonRetryableError(err)
1194+
})
1195+
1196+
if err != nil {
1197+
log.Printf("[CRITAL]%s update mysql mem_size/volume_size fail, reason:%s\n ", logId, err.Error())
1198+
return err
1199+
}
11491200
}
11501201
}
11511202

@@ -1437,7 +1488,7 @@ func mysqlMasterInstanceRoleUpdate(ctx context.Context, d *schema.ResourceData,
14371488
}
14381489

14391490
func mysqlUpdateInstancePayByMonth(ctx context.Context, d *schema.ResourceData, meta interface{}) error {
1440-
if err := mysqlAllInstanceRoleUpdate(ctx, d, meta); err != nil {
1491+
if err := mysqlAllInstanceRoleUpdate(ctx, d, meta, false); err != nil {
14411492
return err
14421493
}
14431494
if err := mysqlMasterInstanceRoleUpdate(ctx, d, meta); err != nil {
@@ -1460,7 +1511,7 @@ func mysqlUpdateInstancePayByMonth(ctx context.Context, d *schema.ResourceData,
14601511
}
14611512

14621513
func mysqlUpdateInstancePayByUse(ctx context.Context, d *schema.ResourceData, meta interface{}) error {
1463-
if err := mysqlAllInstanceRoleUpdate(ctx, d, meta); err != nil {
1514+
if err := mysqlAllInstanceRoleUpdate(ctx, d, meta, false); err != nil {
14641515
return err
14651516
}
14661517
if err := mysqlMasterInstanceRoleUpdate(ctx, d, meta); err != nil {

tencentcloud/resource_tc_mysql_readonly_instance.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,7 @@ func resourceTencentCloudMysqlReadonlyInstanceUpdate(d *schema.ResourceData, met
467467

468468
}
469469
}
470-
err := mysqlAllInstanceRoleUpdate(ctx, d, meta)
470+
err := mysqlAllInstanceRoleUpdate(ctx, d, meta, true)
471471
if err != nil {
472472
return err
473473
}

tencentcloud/resource_tc_mysql_readonly_instance_test.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,14 @@ func TestAccTencentCloudMysqlReadonlyInstanceResource_basic(t *testing.T) {
6969
resource.TestCheckResourceAttr("tencentcloud_mysql_readonly_instance.mysql_readonly", "instance_name", "mysql-readonly-update"),
7070
),
7171
},
72+
// update mem_size
73+
{
74+
Config: testAccMysqlReadonlyInstance_memSize(CommonPresetMysql),
75+
Check: resource.ComposeAggregateTestCheckFunc(
76+
testAccCheckMysqlInstanceExists("tencentcloud_mysql_readonly_instance.mysql_readonly"),
77+
resource.TestCheckResourceAttr("tencentcloud_mysql_readonly_instance.mysql_readonly", "mem_size", "1000"),
78+
),
79+
},
7280
// // update intranet_port
7381
// {
7482
// Config: testAccMysqlReadonlyInstance_update(CommonPresetMysql, "mysql-readonly-update", "3361"),
@@ -186,3 +194,22 @@ resource "tencentcloud_mysql_readonly_instance" "mysql_readonly" {
186194
}
187195
`, mysqlTestCase, instance_name, instranet_port)
188196
}
197+
198+
func testAccMysqlReadonlyInstance_memSize(mysqlTestCase string) string {
199+
return fmt.Sprintf(`
200+
%s
201+
resource "tencentcloud_mysql_readonly_instance" "mysql_readonly" {
202+
master_instance_id = local.mysql_id
203+
mem_size = 1000
204+
cpu = 1
205+
volume_size = 200
206+
instance_name = "mysql-readonly-test"
207+
intranet_port = 3360
208+
master_region = var.region
209+
zone = var.availability_zone
210+
tags = {
211+
test = "test-tf"
212+
}
213+
}
214+
`, mysqlTestCase)
215+
}

tencentcloud/resource_tc_mysql_switch_master_slave_operation.go

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -60,14 +60,6 @@ resource "tencentcloud_mysql_switch_master_slave_operation" "example" {
6060
wait_switch = true
6161
}
6262
```
63-
64-
Import
65-
66-
mysql switch_master_slave_operation can be imported using the id, e.g.
67-
68-
```
69-
terraform import tencentcloud_mysql_switch_master_slave_operation.switch_master_slave_operation switch_master_slave_operation_id
70-
```
7163
*/
7264
package tencentcloud
7365

tencentcloud/service_tencentcloud_mysql.go

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1224,10 +1224,18 @@ func (me *MysqlService) UpgradeDBInstance(ctx context.Context, mysqlId string,
12241224
request.Volume = &volumeSize
12251225
request.WaitSwitch = &waitSwitch
12261226
request.FastUpgrade = &fastUpgrade
1227-
request.DeployMode = &slaveDeployMode
1228-
request.SlaveZone = &firstSlaveZone
1229-
request.BackupZone = &secondSlaveZone
1230-
request.ProtectMode = &slaveSyncMode
1227+
if slaveDeployMode != -1 {
1228+
request.DeployMode = &slaveDeployMode
1229+
}
1230+
if firstSlaveZone != "" {
1231+
request.SlaveZone = &firstSlaveZone
1232+
}
1233+
if secondSlaveZone != "" {
1234+
request.BackupZone = &secondSlaveZone
1235+
}
1236+
if slaveSyncMode != -1 {
1237+
request.ProtectMode = &slaveSyncMode
1238+
}
12311239
if deviceType != "" {
12321240
request.DeviceType = &deviceType
12331241
}

website/docs/r/mysql_switch_master_slave_operation.html.markdown

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -88,11 +88,3 @@ In addition to all arguments above, the following attributes are exported:
8888

8989

9090

91-
## Import
92-
93-
mysql switch_master_slave_operation can be imported using the id, e.g.
94-
95-
```
96-
terraform import tencentcloud_mysql_switch_master_slave_operation.switch_master_slave_operation switch_master_slave_operation_id
97-
```
98-

0 commit comments

Comments
 (0)