diff --git a/internal/services/rdb/database.go b/internal/services/rdb/database.go index be7143705..8a2012307 100644 --- a/internal/services/rdb/database.go +++ b/internal/services/rdb/database.go @@ -134,11 +134,13 @@ func ResourceRdbDatabaseCreate(ctx context.Context, d *schema.ResourceData, m an } func getDatabase(ctx context.Context, api *rdb.API, r scw.Region, instanceID, dbName string) (*rdb.Database, error) { - res, err := api.ListDatabases(&rdb.ListDatabasesRequest{ - Region: r, - InstanceID: instanceID, - Name: &dbName, - }, scw.WithContext(ctx)) + res, err := retryRDBReadOnTransient(ctx, api, r, instanceID, func() (*rdb.ListDatabasesResponse, error) { + return api.ListDatabases(&rdb.ListDatabasesRequest{ + Region: r, + InstanceID: instanceID, + Name: &dbName, + }, scw.WithContext(ctx)) + }) if err != nil { return nil, err } diff --git a/internal/services/rdb/helpers.go b/internal/services/rdb/helpers.go index 418a981bd..a19b9465a 100644 --- a/internal/services/rdb/helpers.go +++ b/internal/services/rdb/helpers.go @@ -12,6 +12,7 @@ import ( "github.com/scaleway/scaleway-sdk-go/scw" "github.com/scaleway/terraform-provider-scaleway/v2/internal/locality/regional" "github.com/scaleway/terraform-provider-scaleway/v2/internal/meta" + "github.com/scaleway/terraform-provider-scaleway/v2/internal/transport" "github.com/scaleway/terraform-provider-scaleway/v2/internal/types" ) @@ -119,3 +120,14 @@ func LoadBalancerDiffSuppressFunc(k, oldValue, newValue string, d *schema.Resour return false } + +// retryRDBReadOnTransient wraps a read action to handle transient_state (HTTP 409) by +// waiting for the instance to be ready, then retrying the action. +func retryRDBReadOnTransient[T any](ctx context.Context, api *rdb.API, region scw.Region, instanceID string, action func() (T, error)) (T, error) { + return transport.RetryOnTransientStateError( + action, + func() (*rdb.Instance, error) { + return waitForRDBInstance(ctx, api, region, instanceID, defaultInstanceTimeout) + }, + ) +}