Skip to content

Commit

Permalink
Merge pull request #9477 from terraform-providers/rfd-retry-db
Browse files Browse the repository at this point in the history
Final retries for various DB timeouts
  • Loading branch information
ryndaniels committed Jul 24, 2019
2 parents 529498e + 9474fca commit 5537b0f
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 25 deletions.
7 changes: 6 additions & 1 deletion aws/resource_aws_db_instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -809,6 +809,9 @@ func resourceAwsDbInstanceCreate(d *schema.ResourceData, meta interface{}) error
}
return nil
})
if isResourceTimeoutError(err) {
_, err = conn.RestoreDBInstanceFromS3(&opts)
}
if err != nil {
return fmt.Errorf("Error creating DB Instance: %s", err)
}
Expand Down Expand Up @@ -1183,13 +1186,15 @@ func resourceAwsDbInstanceCreate(d *schema.ResourceData, meta interface{}) error
}
return nil
})
if isResourceTimeoutError(err) {
_, err = conn.CreateDBInstance(&opts)
}
if err != nil {
if isAWSErr(err, "InvalidParameterValue", "") {
opts.MasterUserPassword = aws.String("********")
return fmt.Errorf("Error creating DB Instance: %s, %+v", err, opts)
}
return fmt.Errorf("Error creating DB Instance: %s", err)

}
}

Expand Down
13 changes: 9 additions & 4 deletions aws/resource_aws_db_option_group.go
Original file line number Diff line number Diff line change
Expand Up @@ -281,7 +281,9 @@ func resourceAwsDbOptionGroupUpdate(d *schema.ResourceData, meta interface{}) er
}
return nil
})

if isResourceTimeoutError(err) {
_, err = rdsconn.ModifyOptionGroup(modifyOpts)
}
if err != nil {
return fmt.Errorf("Error modifying DB Option Group: %s", err)
}
Expand All @@ -306,7 +308,7 @@ func resourceAwsDbOptionGroupDelete(d *schema.ResourceData, meta interface{}) er
}

log.Printf("[DEBUG] Delete DB Option Group: %#v", deleteOpts)
ret := resource.Retry(d.Timeout(schema.TimeoutDelete), func() *resource.RetryError {
err := resource.Retry(d.Timeout(schema.TimeoutDelete), func() *resource.RetryError {
_, err := rdsconn.DeleteOptionGroup(deleteOpts)
if err != nil {
if isAWSErr(err, rds.ErrCodeInvalidOptionGroupStateFault, "") {
Expand All @@ -317,8 +319,11 @@ func resourceAwsDbOptionGroupDelete(d *schema.ResourceData, meta interface{}) er
}
return nil
})
if ret != nil {
return fmt.Errorf("Error Deleting DB Option Group: %s", ret)
if isResourceTimeoutError(err) {
_, err = rdsconn.DeleteOptionGroup(deleteOpts)
}
if err != nil {
return fmt.Errorf("Error Deleting DB Option Group: %s", err)
}
return nil
}
Expand Down
26 changes: 14 additions & 12 deletions aws/resource_aws_db_parameter_group.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import (
"github.com/hashicorp/terraform/helper/schema"

"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/awserr"
"github.com/aws/aws-sdk-go/service/rds"
)

Expand Down Expand Up @@ -310,23 +309,26 @@ func resourceAwsDbParameterGroupUpdate(d *schema.ResourceData, meta interface{})

func resourceAwsDbParameterGroupDelete(d *schema.ResourceData, meta interface{}) error {
conn := meta.(*AWSClient).rdsconn
return resource.Retry(3*time.Minute, func() *resource.RetryError {
deleteOpts := rds.DeleteDBParameterGroupInput{
DBParameterGroupName: aws.String(d.Id()),
}

deleteOpts := rds.DeleteDBParameterGroupInput{
DBParameterGroupName: aws.String(d.Id()),
}
err := resource.Retry(3*time.Minute, func() *resource.RetryError {
_, err := conn.DeleteDBParameterGroup(&deleteOpts)
if err != nil {
awsErr, ok := err.(awserr.Error)
if ok && awsErr.Code() == "DBParameterGroupNotFoundFault" {
return resource.RetryableError(err)
}
if ok && awsErr.Code() == "InvalidDBParameterGroupState" {
if isAWSErr(err, "DBParameterGroupNotFoundFault", "") || isAWSErr(err, "InvalidDBParameterGroupState", "") {
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return resource.NonRetryableError(err)
return nil
})
if isResourceTimeoutError(err) {
_, err = conn.DeleteDBParameterGroup(&deleteOpts)
}
if err != nil {
return fmt.Errorf("Error deleting DB parameter group: %s", err)
}
return nil
}

func resourceAwsDbParameterHash(v interface{}) int {
Expand Down
16 changes: 8 additions & 8 deletions aws/resource_aws_db_parameter_group_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -167,11 +167,11 @@ func TestAccAWSDBParameterGroup_limit(t *testing.T) {
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1708034931.name", "character_set_results"),
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1708034931.value", "utf8"),
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1937131004.name", "event_scheduler"),
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1937131004.value", "on"),
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1937131004.value", "ON"),
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.3437079877.name", "innodb_buffer_pool_dump_at_shutdown"),
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.3437079877.value", "1"),
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1092112861.name", "innodb_file_format"),
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1092112861.value", "barracuda"),
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1092112861.value", "Barracuda"),
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.615571931.name", "innodb_io_capacity"),
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.615571931.value", "2000"),
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1065962799.name", "innodb_io_capacity_max"),
Expand All @@ -185,7 +185,7 @@ func TestAccAWSDBParameterGroup_limit(t *testing.T) {
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.591700516.name", "log_warnings"),
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.591700516.value", "2"),
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1918306725.name", "log_output"),
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1918306725.value", "file"),
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1918306725.value", "FILE"),
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.386204433.name", "max_allowed_packet"),
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.386204433.value", "1073741824"),
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1700901269.name", "max_connect_errors"),
Expand All @@ -197,7 +197,7 @@ func TestAccAWSDBParameterGroup_limit(t *testing.T) {
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.881816039.name", "sync_binlog"),
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.881816039.value", "0"),
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.748684209.name", "tx_isolation"),
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.748684209.value", "repeatable-read"),
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.748684209.value", "REPEATABLE-READ"),
),
},
{
Expand Down Expand Up @@ -260,11 +260,11 @@ func TestAccAWSDBParameterGroup_limit(t *testing.T) {
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1708034931.name", "character_set_results"),
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1708034931.value", "utf8"),
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1937131004.name", "event_scheduler"),
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1937131004.value", "on"),
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1937131004.value", "ON"),
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.3437079877.name", "innodb_buffer_pool_dump_at_shutdown"),
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.3437079877.value", "1"),
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1092112861.name", "innodb_file_format"),
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1092112861.value", "barracuda"),
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1092112861.value", "Barracuda"),
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.615571931.name", "innodb_io_capacity"),
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.615571931.value", "2000"),
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1065962799.name", "innodb_io_capacity_max"),
Expand All @@ -278,7 +278,7 @@ func TestAccAWSDBParameterGroup_limit(t *testing.T) {
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.591700516.name", "log_warnings"),
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.591700516.value", "2"),
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1918306725.name", "log_output"),
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1918306725.value", "file"),
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1918306725.value", "FILE"),
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.386204433.name", "max_allowed_packet"),
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.386204433.value", "1073741824"),
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.1700901269.name", "max_connect_errors"),
Expand All @@ -290,7 +290,7 @@ func TestAccAWSDBParameterGroup_limit(t *testing.T) {
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.881816039.name", "sync_binlog"),
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.881816039.value", "0"),
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.748684209.name", "tx_isolation"),
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.748684209.value", "repeatable-read"),
resource.TestCheckResourceAttr("aws_db_parameter_group.large", "parameter.748684209.value", "REPEATABLE-READ"),
),
},
},
Expand Down

0 comments on commit 5537b0f

Please sign in to comment.