Skip to content

Commit 8d1329d

Browse files
authored
fix: pg - spec upgrade waiting (#1194)
* fix: pg - spec upgrade waiting * fix: pg - retry waiting
1 parent 3bd9d48 commit 8d1329d

File tree

3 files changed

+79
-21
lines changed

3 files changed

+79
-21
lines changed

tencentcloud/resource_tc_postgresql_instance.go

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -581,18 +581,21 @@ func resourceTencentCloudPostgresqlInstanceCreate(d *schema.ResourceData, meta i
581581
d.SetId(instanceId)
582582

583583
// check creation done
584-
err := resource.Retry(5*readRetryTimeout, func() *resource.RetryError {
584+
err := resource.Retry(20*readRetryTimeout, func() *resource.RetryError {
585585
instance, has, err := postgresqlService.DescribePostgresqlInstanceById(ctx, instanceId)
586586
if err != nil {
587587
return retryError(err)
588-
} else if has && *instance.DBInstanceStatus == "running" {
588+
}
589+
590+
if !has {
591+
return resource.NonRetryableError(fmt.Errorf("create postgresql instance fail"))
592+
}
593+
594+
if *instance.DBInstanceStatus == POSTGRESQL_STAUTS_RUNNING {
589595
memory = int(*instance.DBInstanceMemory)
590596
return nil
591-
} else if !has {
592-
return resource.NonRetryableError(fmt.Errorf("create postgresql instance fail"))
593-
} else {
594-
return resource.RetryableError(fmt.Errorf("creating postgresql instance %s , status %s ", instanceId, *instance.DBInstanceStatus))
595597
}
598+
return resource.RetryableError(fmt.Errorf("creating postgresql instance %s , status %s ", instanceId, *instance.DBInstanceStatus))
596599
})
597600

598601
if err != nil {
@@ -757,8 +760,20 @@ func resourceTencentCloudPostgresqlInstanceUpdate(d *schema.ResourceData, meta i
757760
if outErr != nil {
758761
return outErr
759762
}
763+
// Wait for status to processing
764+
_ = resource.Retry(time.Second*10, func() *resource.RetryError {
765+
instance, _, err := postgresqlService.DescribePostgresqlInstanceById(ctx, instanceId)
766+
if err != nil {
767+
return retryError(err)
768+
}
769+
if *instance.DBInstanceStatus == POSTGRESQL_STAUTS_RUNNING {
770+
return resource.RetryableError(fmt.Errorf("waiting for upgrade status change"))
771+
}
772+
return nil
773+
})
774+
time.Sleep(time.Second * 5)
760775
// check update storage and memory done
761-
checkErr = postgresqlService.CheckDBInstanceStatus(ctx, instanceId)
776+
checkErr = postgresqlService.CheckDBInstanceStatus(ctx, instanceId, 60)
762777
if checkErr != nil {
763778
return checkErr
764779
}

tencentcloud/resource_tc_postgresql_instance_test.go

Lines changed: 42 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,19 @@ func TestAccTencentCloudPostgresqlInstanceResource(t *testing.T) {
128128
ImportStateVerify: true,
129129
ImportStateVerifyIgnore: []string{"root_password", "spec_code", "public_access_switch", "charset", "backup_plan"},
130130
},
131-
131+
{
132+
Config: testAccPostgresqlInstanceOpenPublic,
133+
Check: resource.ComposeTestCheckFunc(
134+
testAccCheckPostgresqlInstanceExists(testPostgresqlInstanceResourceKey),
135+
resource.TestCheckResourceAttrSet(testPostgresqlInstanceResourceKey, "id"),
136+
resource.TestCheckResourceAttr(testPostgresqlInstanceResourceKey, "public_access_switch", "true"),
137+
resource.TestCheckResourceAttrSet(testPostgresqlInstanceResourceKey, "private_access_ip"),
138+
resource.TestCheckResourceAttrSet(testPostgresqlInstanceResourceKey, "private_access_port"),
139+
resource.TestCheckResourceAttrSet(testPostgresqlInstanceResourceKey, "public_access_host"),
140+
resource.TestCheckResourceAttrSet(testPostgresqlInstanceResourceKey, "public_access_port"),
141+
//resource.TestCheckResourceAttr(testPostgresqlInstanceResourceKey, "tags.tf", "teest"),
142+
),
143+
},
132144
{
133145
Config: testAccPostgresqlInstanceUpdate,
134146
Check: resource.ComposeTestCheckFunc(
@@ -142,13 +154,9 @@ func TestAccTencentCloudPostgresqlInstanceResource(t *testing.T) {
142154
resource.TestCheckResourceAttr(testPostgresqlInstanceResourceKey, "storage", "250"),
143155
resource.TestCheckResourceAttrSet(testPostgresqlInstanceResourceKey, "create_time"),
144156
resource.TestCheckResourceAttr(testPostgresqlInstanceResourceKey, "project_id", "0"),
145-
resource.TestCheckResourceAttr(testPostgresqlInstanceResourceKey, "public_access_switch", "true"),
157+
resource.TestCheckResourceAttr(testPostgresqlInstanceResourceKey, "public_access_switch", "false"),
146158
resource.TestCheckResourceAttr(testPostgresqlInstanceResourceKey, "root_password", "t1qaA2k1wgvfa3?ZZZ"),
147159
resource.TestCheckResourceAttrSet(testPostgresqlInstanceResourceKey, "availability_zone"),
148-
resource.TestCheckResourceAttrSet(testPostgresqlInstanceResourceKey, "private_access_ip"),
149-
resource.TestCheckResourceAttrSet(testPostgresqlInstanceResourceKey, "private_access_port"),
150-
resource.TestCheckResourceAttrSet(testPostgresqlInstanceResourceKey, "public_access_host"),
151-
resource.TestCheckResourceAttrSet(testPostgresqlInstanceResourceKey, "public_access_port"),
152160
resource.TestCheckResourceAttr(testPostgresqlInstanceResourceKey, "backup_plan.0.min_backup_start_time", "01:10:11"),
153161
resource.TestCheckResourceAttr(testPostgresqlInstanceResourceKey, "backup_plan.0.max_backup_start_time", "02:10:11"),
154162
resource.TestCheckResourceAttr(testPostgresqlInstanceResourceKey, "backup_plan.0.backup_period.#", "3"),
@@ -280,7 +288,7 @@ resource "tencentcloud_postgresql_instance" "test" {
280288
}
281289
`
282290

283-
const testAccPostgresqlInstanceUpdate string = testAccPostgresqlInstanceBasic + defaultVpcSubnets + `
291+
const testAccPostgresqlInstanceOpenPublic string = testAccPostgresqlInstanceBasic + defaultVpcSubnets + `
284292
resource "tencentcloud_postgresql_instance" "test" {
285293
name = "tf_postsql_instance_update"
286294
availability_zone = data.tencentcloud_availability_zones_by_product.zone.zones[5].name
@@ -307,6 +315,33 @@ resource "tencentcloud_postgresql_instance" "test" {
307315
}
308316
`
309317

318+
const testAccPostgresqlInstanceUpdate string = testAccPostgresqlInstanceBasic + defaultVpcSubnets + `
319+
resource "tencentcloud_postgresql_instance" "test" {
320+
name = "tf_postsql_instance_update"
321+
availability_zone = data.tencentcloud_availability_zones_by_product.zone.zones[5].name
322+
charge_type = "POSTPAID_BY_HOUR"
323+
vpc_id = local.vpc_id
324+
subnet_id = local.subnet_id
325+
engine_version = "10.4"
326+
root_password = "t1qaA2k1wgvfa3?ZZZ"
327+
charset = "LATIN1"
328+
project_id = 0
329+
public_access_switch = false
330+
memory = 4
331+
storage = 250
332+
backup_plan {
333+
min_backup_start_time = "01:10:11"
334+
max_backup_start_time = "02:10:11"
335+
base_backup_retention_period = 5
336+
backup_period = ["monday", "thursday", "sunday"]
337+
}
338+
339+
tags = {
340+
tf = "teest"
341+
}
342+
}
343+
`
344+
310345
const testAccPostgresqlMAZInstance string = `
311346
resource "tencentcloud_vpc" "vpc" {
312347
cidr_block = "10.0.0.0/24"

tencentcloud/service_tencentcloud_postgresql.go

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"fmt"
77
"log"
88
"strconv"
9+
"time"
910

1011
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
1112
sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors"
@@ -534,19 +535,26 @@ func (me *PostgresqlService) SetPostgresqlInstanceRootPassword(ctx context.Conte
534535
return err
535536
}
536537

537-
func (me *PostgresqlService) CheckDBInstanceStatus(ctx context.Context, instanceId string) error {
538+
func (me *PostgresqlService) CheckDBInstanceStatus(ctx context.Context, instanceId string, retryMinutes ...int) error {
539+
540+
var timeout = 2 * readRetryTimeout
541+
if len(retryMinutes) > 0 && retryMinutes[0] > 0 {
542+
times := retryMinutes[0]
543+
timeout = time.Minute * time.Duration(times)
544+
}
538545
// check status
539-
err := resource.Retry(2*readRetryTimeout, func() *resource.RetryError {
546+
err := resource.Retry(timeout, func() *resource.RetryError {
540547
instance, has, err := me.DescribePostgresqlInstanceById(ctx, instanceId)
541548
if err != nil {
542549
return retryError(err)
543-
} else if has && *instance.DBInstanceStatus == POSTGRESQL_STAUTS_RUNNING {
544-
return nil
545-
} else if !has {
550+
}
551+
if !has {
546552
return resource.NonRetryableError(fmt.Errorf("check postgresql instance %s fail", instanceId))
547-
} else {
548-
return resource.RetryableError(fmt.Errorf("checking postgresql instance %s , status %s ", instanceId, *instance.DBInstanceStatus))
549553
}
554+
if *instance.DBInstanceStatus == POSTGRESQL_STAUTS_RUNNING {
555+
return nil
556+
}
557+
return resource.RetryableError(fmt.Errorf("checking postgresql instance %s , status %s ", instanceId, *instance.DBInstanceStatus))
550558
})
551559

552560
return err

0 commit comments

Comments
 (0)