Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .changelog/2303.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
```release-note:bug
tencentcloud_mysql_readonly_instance: Fix the problem of error reporting when modifying configuration
```
145 changes: 98 additions & 47 deletions tencentcloud/resource_tc_mysql_instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -1051,7 +1051,7 @@ func resourceTencentCloudMysqlInstanceRead(d *schema.ResourceData, meta interfac
/*
[master] and [dr] and [ro] all need update
*/
func mysqlAllInstanceRoleUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) error {
func mysqlAllInstanceRoleUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}, isReadonly bool) error {

logId := getLogId(ctx)

Expand Down Expand Up @@ -1088,64 +1088,115 @@ func mysqlAllInstanceRoleUpdate(ctx context.Context, d *schema.ResourceData, met
}
}

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") {
if isReadonly {
if d.HasChange("mem_size") || d.HasChange("cpu") || d.HasChange("volume_size") || d.HasChange("device_type") {

memSize := int64(d.Get("mem_size").(int))
cpu := int64(d.Get("cpu").(int))
volumeSize := int64(d.Get("volume_size").(int))
slaveDeployMode := int64(d.Get("slave_deploy_mode").(int))
slaveSyncMode := int64(d.Get("slave_sync_mode").(int))
deviceType := ""
firstSlaveZone := ""
secondSlaveZone := ""
memSize := int64(d.Get("mem_size").(int))
cpu := int64(d.Get("cpu").(int))
volumeSize := int64(d.Get("volume_size").(int))
deviceType := ""

fastUpgrade := int64(0)
if v, ok := d.GetOk("fast_upgrade"); ok {
fastUpgrade = int64(v.(int))
}
if v, ok := d.GetOk("device_type"); ok {
deviceType = v.(string)
}
fastUpgrade := int64(0)
if v, ok := d.GetOk("fast_upgrade"); ok {
fastUpgrade = int64(v.(int))
}
if v, ok := d.GetOk("device_type"); ok {
deviceType = v.(string)
}

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

if v, ok := d.GetOk("second_slave_zone"); ok {
secondSlaveZone = v.(string)
}
if err != nil {
return err
}

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

if err != nil {
return err
}
if err != nil {
if _, ok := err.(*errors.TencentCloudSDKError); !ok {
return resource.RetryableError(err)
} else {
return resource.NonRetryableError(err)
}
}

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

if err != nil {
if _, ok := err.(*errors.TencentCloudSDKError); !ok {
return resource.RetryableError(err)
} else {
return resource.NonRetryableError(err)
}
log.Printf("[CRITAL]%s update mysql mem_size/volume_size fail, reason:%s\n ", logId, err.Error())
return err
}
}
} else {
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") {

memSize := int64(d.Get("mem_size").(int))
cpu := int64(d.Get("cpu").(int))
volumeSize := int64(d.Get("volume_size").(int))
slaveDeployMode := int64(d.Get("slave_deploy_mode").(int))
slaveSyncMode := int64(d.Get("slave_sync_mode").(int))
deviceType := ""
firstSlaveZone := ""
secondSlaveZone := ""

fastUpgrade := int64(0)
if v, ok := d.GetOk("fast_upgrade"); ok {
fastUpgrade = int64(v.(int))
}
if v, ok := d.GetOk("device_type"); ok {
deviceType = v.(string)
}

if taskStatus == MYSQL_TASK_STATUS_SUCCESS {
return nil
if v, ok := d.GetOk("first_slave_zone"); ok {
firstSlaveZone = v.(string)
}
if taskStatus == MYSQL_TASK_STATUS_INITIAL || taskStatus == MYSQL_TASK_STATUS_RUNNING {
return resource.RetryableError(fmt.Errorf("update mysql mem_size/volume_size status is %s", taskStatus))

if v, ok := d.GetOk("second_slave_zone"); ok {
secondSlaveZone = v.(string)
}
err = fmt.Errorf("update mysql mem_size/volume_size task status is %s,we won't wait for it finish ,it show message:%s",
",", message)
return resource.NonRetryableError(err)
})

if err != nil {
log.Printf("[CRITAL]%s update mysql mem_size/volume_size fail, reason:%s\n ", logId, err.Error())
return err
asyncRequestId, err := mysqlService.UpgradeDBInstance(ctx, d.Id(), memSize, cpu, volumeSize, fastUpgrade, deviceType, slaveDeployMode, slaveSyncMode, firstSlaveZone, secondSlaveZone)

if err != nil {
return err
}

err = resource.Retry(6*time.Hour, func() *resource.RetryError {
taskStatus, message, err := mysqlService.DescribeAsyncRequestInfo(ctx, asyncRequestId)

if err != nil {
if _, ok := err.(*errors.TencentCloudSDKError); !ok {
return resource.RetryableError(err)
} else {
return resource.NonRetryableError(err)
}
}

if taskStatus == MYSQL_TASK_STATUS_SUCCESS {
return nil
}
if taskStatus == MYSQL_TASK_STATUS_INITIAL || taskStatus == MYSQL_TASK_STATUS_RUNNING {
return resource.RetryableError(fmt.Errorf("update mysql mem_size/volume_size status is %s", taskStatus))
}
err = fmt.Errorf("update mysql mem_size/volume_size task status is %s,we won't wait for it finish ,it show message:%s",
",", message)
return resource.NonRetryableError(err)
})

if err != nil {
log.Printf("[CRITAL]%s update mysql mem_size/volume_size fail, reason:%s\n ", logId, err.Error())
return err
}
}
}

Expand Down Expand Up @@ -1437,7 +1488,7 @@ func mysqlMasterInstanceRoleUpdate(ctx context.Context, d *schema.ResourceData,
}

func mysqlUpdateInstancePayByMonth(ctx context.Context, d *schema.ResourceData, meta interface{}) error {
if err := mysqlAllInstanceRoleUpdate(ctx, d, meta); err != nil {
if err := mysqlAllInstanceRoleUpdate(ctx, d, meta, false); err != nil {
return err
}
if err := mysqlMasterInstanceRoleUpdate(ctx, d, meta); err != nil {
Expand All @@ -1460,7 +1511,7 @@ func mysqlUpdateInstancePayByMonth(ctx context.Context, d *schema.ResourceData,
}

func mysqlUpdateInstancePayByUse(ctx context.Context, d *schema.ResourceData, meta interface{}) error {
if err := mysqlAllInstanceRoleUpdate(ctx, d, meta); err != nil {
if err := mysqlAllInstanceRoleUpdate(ctx, d, meta, false); err != nil {
return err
}
if err := mysqlMasterInstanceRoleUpdate(ctx, d, meta); err != nil {
Expand Down
2 changes: 1 addition & 1 deletion tencentcloud/resource_tc_mysql_readonly_instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -467,7 +467,7 @@ func resourceTencentCloudMysqlReadonlyInstanceUpdate(d *schema.ResourceData, met

}
}
err := mysqlAllInstanceRoleUpdate(ctx, d, meta)
err := mysqlAllInstanceRoleUpdate(ctx, d, meta, true)
if err != nil {
return err
}
Expand Down
27 changes: 27 additions & 0 deletions tencentcloud/resource_tc_mysql_readonly_instance_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,14 @@ func TestAccTencentCloudMysqlReadonlyInstanceResource_basic(t *testing.T) {
resource.TestCheckResourceAttr("tencentcloud_mysql_readonly_instance.mysql_readonly", "instance_name", "mysql-readonly-update"),
),
},
// update mem_size
{
Config: testAccMysqlReadonlyInstance_memSize(CommonPresetMysql),
Check: resource.ComposeAggregateTestCheckFunc(
testAccCheckMysqlInstanceExists("tencentcloud_mysql_readonly_instance.mysql_readonly"),
resource.TestCheckResourceAttr("tencentcloud_mysql_readonly_instance.mysql_readonly", "mem_size", "1000"),
),
},
// // update intranet_port
// {
// Config: testAccMysqlReadonlyInstance_update(CommonPresetMysql, "mysql-readonly-update", "3361"),
Expand Down Expand Up @@ -186,3 +194,22 @@ resource "tencentcloud_mysql_readonly_instance" "mysql_readonly" {
}
`, mysqlTestCase, instance_name, instranet_port)
}

func testAccMysqlReadonlyInstance_memSize(mysqlTestCase string) string {
return fmt.Sprintf(`
%s
resource "tencentcloud_mysql_readonly_instance" "mysql_readonly" {
master_instance_id = local.mysql_id
mem_size = 1000
cpu = 1
volume_size = 200
instance_name = "mysql-readonly-test"
intranet_port = 3360
master_region = var.region
zone = var.availability_zone
tags = {
test = "test-tf"
}
}
`, mysqlTestCase)
}
Original file line number Diff line number Diff line change
Expand Up @@ -60,14 +60,6 @@ resource "tencentcloud_mysql_switch_master_slave_operation" "example" {
wait_switch = true
}
```

Import

mysql switch_master_slave_operation can be imported using the id, e.g.

```
terraform import tencentcloud_mysql_switch_master_slave_operation.switch_master_slave_operation switch_master_slave_operation_id
```
*/
package tencentcloud

Expand Down
16 changes: 12 additions & 4 deletions tencentcloud/service_tencentcloud_mysql.go
Original file line number Diff line number Diff line change
Expand Up @@ -1224,10 +1224,18 @@ func (me *MysqlService) UpgradeDBInstance(ctx context.Context, mysqlId string,
request.Volume = &volumeSize
request.WaitSwitch = &waitSwitch
request.FastUpgrade = &fastUpgrade
request.DeployMode = &slaveDeployMode
request.SlaveZone = &firstSlaveZone
request.BackupZone = &secondSlaveZone
request.ProtectMode = &slaveSyncMode
if slaveDeployMode != -1 {
request.DeployMode = &slaveDeployMode
}
if firstSlaveZone != "" {
request.SlaveZone = &firstSlaveZone
}
if secondSlaveZone != "" {
request.BackupZone = &secondSlaveZone
}
if slaveSyncMode != -1 {
request.ProtectMode = &slaveSyncMode
}
if deviceType != "" {
request.DeviceType = &deviceType
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,11 +88,3 @@ In addition to all arguments above, the following attributes are exported:



## Import

mysql switch_master_slave_operation can be imported using the id, e.g.

```
terraform import tencentcloud_mysql_switch_master_slave_operation.switch_master_slave_operation switch_master_slave_operation_id
```