Skip to content

Commit

Permalink
Wait for restart PostgreSQL replicas to prevent failures in secondary…
Browse files Browse the repository at this point in the history
… location
  • Loading branch information
Aris van Ommeren committed Apr 24, 2021
1 parent 59b6e20 commit d8c277f
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 10 deletions.
28 changes: 25 additions & 3 deletions azurerm/internal/services/postgres/postgresql_server_resource.go
Original file line number Diff line number Diff line change
Expand Up @@ -629,13 +629,35 @@ func resourcePostgreSQLServerUpdate(d *schema.ResourceData, meta interface{}) er
Sku: sku,
}
for _, replica := range *listReplicas.Value {
future, err := client.Update(ctx, id.ResourceGroup, *replica.Name, propertiesReplica)
replicaId, err := parse.ServerID(*replica.ID)
if err != nil {
return fmt.Errorf("upscaling PostgreSQL Server Replica %q (Resource Group %q): %+v", *replica.Name, id.ResourceGroup, err)
return fmt.Errorf("parsing Postgres Server Replica ID : %v", err)
}
future, err := client.Update(ctx, replicaId.ResourceGroup, replicaId.Name, propertiesReplica)
if err != nil {
return fmt.Errorf("upscaling PostgreSQL Server Replica %q (Resource Group %q): %+v", replicaId.Name, replicaId.ResourceGroup, err)
}

if err = future.WaitForCompletionRef(ctx, client.Client); err != nil {
return fmt.Errorf("waiting for update of PostgreSQL Server Replica %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err)
return fmt.Errorf("waiting for update of PostgreSQL Server Replica %q (Resource Group %q): %+v", replicaId.Name, replicaId.ResourceGroup, err)
}
}
for _, replica := range *listReplicas.Value {
replicaId, err := parse.ServerID(*replica.ID)
if err != nil {
return fmt.Errorf("parsing Postgres Server Replica ID : %v", err)
}
log.Printf("[DEBUG] Waiting for PostgreSQL Server Replica %q (Resource Group %q) to become available", replicaId.Name, replicaId.ResourceGroup)
stateConf := &resource.StateChangeConf{
Pending: []string{string(postgresql.ServerStateInaccessible), "Restarting"},
Target: []string{string(postgresql.ServerStateReady)},
Refresh: postgreSqlStateRefreshFunc(ctx, client, replicaId.ResourceGroup, replicaId.Name),
MinTimeout: 15 * time.Second,
Timeout: d.Timeout(schema.TimeoutCreate),
}

if _, err = stateConf.WaitForState(); err != nil {
return fmt.Errorf("waiting for PostgreSQL Server Replica %q (Resource Group %q)to become available: %+v", replicaId.Name, replicaId.ResourceGroup, err)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -754,18 +754,18 @@ func (r PostgreSQLServerResource) createReplica(data acceptance.TestData, sku st
resource "azurerm_postgresql_server" "replica" {
name = "acctest-psql-server-%[2]d-replica"
location = azurerm_resource_group.test.location
location = "%[3]s"
resource_group_name = azurerm_resource_group.test.name
sku_name = "%[3]s"
sku_name = "%[4]s"
version = "11"
create_mode = "Replica"
creation_source_server_id = azurerm_postgresql_server.test.id
ssl_enforcement_enabled = true
}
`, r.template(data, sku, "11"), data.RandomInteger, sku)
`, r.template(data, sku, "11"), data.RandomInteger, data.Locations.Secondary, sku)
}

func (r PostgreSQLServerResource) createReplicas(data acceptance.TestData, sku string) string {
Expand All @@ -777,7 +777,7 @@ resource "azurerm_postgresql_server" "replica1" {
location = azurerm_resource_group.test.location
resource_group_name = azurerm_resource_group.test.name
sku_name = "%[3]s"
sku_name = "%[4]s"
version = "11"
create_mode = "Replica"
Expand All @@ -788,18 +788,18 @@ resource "azurerm_postgresql_server" "replica1" {
resource "azurerm_postgresql_server" "replica2" {
name = "acctest-psql-server-%[2]d-replica2"
location = azurerm_resource_group.test.location
location = "%[3]s"
resource_group_name = azurerm_resource_group.test.name
sku_name = "%[3]s"
sku_name = "%[4]s"
version = "11"
create_mode = "Replica"
creation_source_server_id = azurerm_postgresql_server.test.id
ssl_enforcement_enabled = true
}
`, r.template(data, sku, "11"), data.RandomInteger, sku)
`, r.template(data, sku, "11"), data.RandomInteger, data.Locations.Secondary, sku)
}

func (r PostgreSQLServerResource) createPointInTimeRestore(data acceptance.TestData, version, restoreTime string) string {
Expand Down

0 comments on commit d8c277f

Please sign in to comment.