Skip to content

Commit b68b6e2

Browse files
authored
chore(rdb): add support for fast retries with cassettes (#1197)
1 parent 7745567 commit b68b6e2

13 files changed

+3318
-3846
lines changed

scaleway/helpers_rdb.go

+6-2
Original file line numberDiff line numberDiff line change
@@ -74,12 +74,16 @@ func expandInstanceSettings(i interface{}) []*rdb.InstanceSetting {
7474
return res
7575
}
7676

77-
func waitInstance(ctx context.Context, api *rdb.API, region scw.Region, id string, timeout time.Duration) (*rdb.Instance, error) {
77+
func waitForRDBInstance(ctx context.Context, api *rdb.API, region scw.Region, id string, timeout time.Duration) (*rdb.Instance, error) {
7878
retryInterval := defaultWaitRDBRetryInterval
79+
if DefaultWaitRetryInterval != nil {
80+
retryInterval = *DefaultWaitRetryInterval
81+
}
82+
7983
return api.WaitForInstance(&rdb.WaitForInstanceRequest{
8084
Region: region,
81-
InstanceID: id,
8285
Timeout: scw.TimeDurationPtr(timeout),
86+
InstanceID: id,
8387
RetryInterval: &retryInterval,
8488
}, scw.WithContext(ctx))
8589
}

scaleway/resource_rdb_acl.go

+7-8
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ func resourceScalewayRdbACLCreate(ctx context.Context, d *schema.ResourceData, m
6565
return diag.FromErr(err)
6666
}
6767

68-
_, err = waitInstance(ctx, rdbAPI, region, expandID(instanceID), d.Timeout(schema.TimeoutCreate))
68+
_, err = waitForRDBInstance(ctx, rdbAPI, region, expandID(instanceID), d.Timeout(schema.TimeoutCreate))
6969
if err != nil {
7070
return diag.FromErr(err)
7171
}
@@ -96,7 +96,7 @@ func resourceScalewayRdbACLRead(ctx context.Context, d *schema.ResourceData, met
9696
return diag.FromErr(err)
9797
}
9898

99-
_, err = waitInstance(ctx, rdbAPI, region, instanceID, d.Timeout(schema.TimeoutRead))
99+
_, err = waitForRDBInstance(ctx, rdbAPI, region, instanceID, d.Timeout(schema.TimeoutRead))
100100
if err != nil && !is404Error(err) {
101101
return diag.FromErr(err)
102102
}
@@ -128,16 +128,15 @@ func resourceScalewayRdbACLUpdate(ctx context.Context, d *schema.ResourceData, m
128128
return diag.FromErr(err)
129129
}
130130

131-
_, err = waitInstance(ctx, rdbAPI, region, instanceID, d.Timeout(schema.TimeoutUpdate))
131+
_, err = waitForRDBInstance(ctx, rdbAPI, region, instanceID, d.Timeout(schema.TimeoutUpdate))
132132
if err != nil && !is404Error(err) {
133133
return diag.FromErr(err)
134134
}
135135

136136
if d.HasChange("acl_rules") {
137-
_ = rdb.WaitForInstanceRequest{
138-
InstanceID: instanceID,
139-
Region: region,
140-
RetryInterval: DefaultWaitRetryInterval,
137+
_, err := waitForRDBInstance(ctx, rdbAPI, region, instanceID, d.Timeout(schema.TimeoutUpdate))
138+
if err != nil {
139+
return diag.FromErr(err)
141140
}
142141

143142
aclRules, err := rdbACLExpand(d.Get("acl_rules").(*schema.Set))
@@ -173,7 +172,7 @@ func resourceScalewayRdbACLDelete(ctx context.Context, d *schema.ResourceData, m
173172
aclRuleIPs = append(aclRuleIPs, acl.IP.String())
174173
}
175174

176-
_, err = waitInstance(ctx, rdbAPI, region, instanceID, d.Timeout(schema.TimeoutDelete))
175+
_, err = waitForRDBInstance(ctx, rdbAPI, region, instanceID, d.Timeout(schema.TimeoutDelete))
177176
if err != nil && !is404Error(err) {
178177
return diag.FromErr(err)
179178
}

scaleway/resource_rdb_database.go

+7-8
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ func resourceScalewayRdbDatabaseCreate(ctx context.Context, d *schema.ResourceDa
6767
return diag.FromErr(err)
6868
}
6969

70-
_, err = waitInstance(ctx, rdbAPI, region, instanceID, d.Timeout(schema.TimeoutCreate))
70+
_, err = waitForRDBInstance(ctx, rdbAPI, region, instanceID, d.Timeout(schema.TimeoutCreate))
7171
if err != nil {
7272
return diag.FromErr(err)
7373
}
@@ -97,7 +97,7 @@ func resourceScalewayRdbDatabaseCreate(ctx context.Context, d *schema.ResourceDa
9797
return diag.FromErr(err)
9898
}
9999

100-
_, err = waitInstance(ctx, rdbAPI, region, instanceID, d.Timeout(schema.TimeoutCreate))
100+
_, err = waitForRDBInstance(ctx, rdbAPI, region, instanceID, d.Timeout(schema.TimeoutCreate))
101101
if err != nil {
102102
return diag.FromErr(err)
103103
}
@@ -131,11 +131,6 @@ func resourceScalewayRdbDatabaseRead(ctx context.Context, d *schema.ResourceData
131131
return diag.FromErr(err)
132132
}
133133

134-
_, err = waitInstance(ctx, rdbAPI, region, instanceID, d.Timeout(schema.TimeoutRead))
135-
if err != nil {
136-
return diag.FromErr(err)
137-
}
138-
139134
database, err := getDatabase(ctx, rdbAPI, region, instanceID, databaseName)
140135
if err != nil {
141136
return diag.FromErr(err)
@@ -158,7 +153,7 @@ func resourceScalewayRdbDatabaseDelete(ctx context.Context, d *schema.ResourceDa
158153
return diag.FromErr(err)
159154
}
160155

161-
_, err = waitInstance(ctx, rdbAPI, region, instanceID, d.Timeout(schema.TimeoutDelete))
156+
_, err = waitForRDBInstance(ctx, rdbAPI, region, instanceID, d.Timeout(schema.TimeoutDelete))
162157
if err != nil {
163158
return diag.FromErr(err)
164159
}
@@ -168,7 +163,11 @@ func resourceScalewayRdbDatabaseDelete(ctx context.Context, d *schema.ResourceDa
168163
InstanceID: instanceID,
169164
Name: databaseName,
170165
}, scw.WithContext(ctx))
166+
if err != nil {
167+
return diag.FromErr(err)
168+
}
171169

170+
_, err = waitForRDBInstance(ctx, rdbAPI, region, instanceID, d.Timeout(schema.TimeoutDelete))
172171
if err != nil && !is404Error(err) {
173172
return diag.FromErr(err)
174173
}

scaleway/resource_rdb_instance.go

+12-12
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,7 @@ func resourceScalewayRdbInstanceCreate(ctx context.Context, d *schema.ResourceDa
340340
updateReq.BackupScheduleRetention = scw.Uint32Ptr(uint32(backupScheduleRetention.(int)))
341341
}
342342

343-
_, err = waitInstance(ctx, rdbAPI, region, res.ID, d.Timeout(schema.TimeoutCreate))
343+
_, err = waitForRDBInstance(ctx, rdbAPI, region, res.ID, d.Timeout(schema.TimeoutCreate))
344344
if err != nil {
345345
return diag.FromErr(err)
346346
}
@@ -352,7 +352,7 @@ func resourceScalewayRdbInstanceCreate(ctx context.Context, d *schema.ResourceDa
352352
}
353353
// Configure Instance settings
354354
if settings, ok := d.GetOk("settings"); ok {
355-
res, err = waitInstance(ctx, rdbAPI, region, res.ID, d.Timeout(schema.TimeoutCreate))
355+
res, err = waitForRDBInstance(ctx, rdbAPI, region, res.ID, d.Timeout(schema.TimeoutCreate))
356356
if err != nil {
357357
return diag.FromErr(err)
358358
}
@@ -377,7 +377,7 @@ func resourceScalewayRdbInstanceRead(ctx context.Context, d *schema.ResourceData
377377
}
378378

379379
// verify resource is ready
380-
res, err := waitInstance(ctx, rdbAPI, region, ID, d.Timeout(schema.TimeoutRead))
380+
res, err := waitForRDBInstance(ctx, rdbAPI, region, ID, d.Timeout(schema.TimeoutRead))
381381
if err != nil {
382382
return diag.FromErr(err)
383383
}
@@ -469,7 +469,7 @@ func resourceScalewayRdbInstanceUpdate(ctx context.Context, d *schema.ResourceDa
469469
req.Tags = scw.StringsPtr(expandStrings(d.Get("tags")))
470470
}
471471

472-
_, err = waitInstance(ctx, rdbAPI, region, ID, d.Timeout(schema.TimeoutUpdate))
472+
_, err = waitForRDBInstance(ctx, rdbAPI, region, ID, d.Timeout(schema.TimeoutUpdate))
473473
if err != nil {
474474
return diag.FromErr(err)
475475
}
@@ -480,7 +480,7 @@ func resourceScalewayRdbInstanceUpdate(ctx context.Context, d *schema.ResourceDa
480480
}
481481
// Change settings
482482
if d.HasChange("settings") {
483-
_, err = waitInstance(ctx, rdbAPI, region, ID, d.Timeout(schema.TimeoutUpdate))
483+
_, err = waitForRDBInstance(ctx, rdbAPI, region, ID, d.Timeout(schema.TimeoutUpdate))
484484
if err != nil && !is404Error(err) {
485485
return diag.FromErr(err)
486486
}
@@ -563,7 +563,7 @@ func resourceScalewayRdbInstanceUpdate(ctx context.Context, d *schema.ResourceDa
563563
})
564564
}
565565
for _, request := range upgradeInstanceRequests {
566-
_, err = waitInstance(ctx, rdbAPI, region, ID, d.Timeout(schema.TimeoutUpdate))
566+
_, err = waitForRDBInstance(ctx, rdbAPI, region, ID, d.Timeout(schema.TimeoutUpdate))
567567
if err != nil && !is404Error(err) {
568568
return diag.FromErr(err)
569569
}
@@ -573,14 +573,14 @@ func resourceScalewayRdbInstanceUpdate(ctx context.Context, d *schema.ResourceDa
573573
return diag.FromErr(err)
574574
}
575575

576-
_, err = waitInstance(ctx, rdbAPI, region, ID, d.Timeout(schema.TimeoutUpdate))
576+
_, err = waitForRDBInstance(ctx, rdbAPI, region, ID, d.Timeout(schema.TimeoutUpdate))
577577
if err != nil && !is404Error(err) {
578578
return diag.FromErr(err)
579579
}
580580
}
581581

582582
if d.HasChange("password") {
583-
_, err := waitInstance(ctx, rdbAPI, region, ID, d.Timeout(schema.TimeoutUpdate))
583+
_, err := waitForRDBInstance(ctx, rdbAPI, region, ID, d.Timeout(schema.TimeoutUpdate))
584584
if err != nil {
585585
return diag.FromErr(err)
586586
}
@@ -600,7 +600,7 @@ func resourceScalewayRdbInstanceUpdate(ctx context.Context, d *schema.ResourceDa
600600

601601
if d.HasChanges("private_network") {
602602
// retrieve state
603-
res, err := waitInstance(ctx, rdbAPI, region, ID, d.Timeout(schema.TimeoutUpdate))
603+
res, err := waitForRDBInstance(ctx, rdbAPI, region, ID, d.Timeout(schema.TimeoutUpdate))
604604
if err != nil {
605605
return diag.FromErr(err)
606606
}
@@ -623,7 +623,7 @@ func resourceScalewayRdbInstanceUpdate(ctx context.Context, d *schema.ResourceDa
623623
}
624624

625625
// retrieve state
626-
_, err = waitInstance(ctx, rdbAPI, region, ID, d.Timeout(schema.TimeoutUpdate))
626+
_, err = waitForRDBInstance(ctx, rdbAPI, region, ID, d.Timeout(schema.TimeoutUpdate))
627627
if err != nil {
628628
return diag.FromErr(err)
629629
}
@@ -656,7 +656,7 @@ func resourceScalewayRdbInstanceDelete(ctx context.Context, d *schema.ResourceDa
656656
}
657657

658658
// We first wait in case the instance is in a transient state
659-
_, err = waitInstance(ctx, rdbAPI, region, ID, d.Timeout(schema.TimeoutDelete))
659+
_, err = waitForRDBInstance(ctx, rdbAPI, region, ID, d.Timeout(schema.TimeoutDelete))
660660
if err != nil {
661661
return diag.FromErr(err)
662662
}
@@ -671,7 +671,7 @@ func resourceScalewayRdbInstanceDelete(ctx context.Context, d *schema.ResourceDa
671671
}
672672

673673
// Lastly wait in case the instance is in a transient state
674-
_, err = waitInstance(ctx, rdbAPI, region, ID, d.Timeout(schema.TimeoutDelete))
674+
_, err = waitForRDBInstance(ctx, rdbAPI, region, ID, d.Timeout(schema.TimeoutDelete))
675675
if err != nil && !is404Error(err) {
676676
return diag.FromErr(err)
677677
}

scaleway/resource_rdb_privilege.go

+10-10
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ func resourceScalewayRdbPrivilegeCreate(ctx context.Context, d *schema.ResourceD
6767
return diag.FromErr(err)
6868
}
6969

70-
_, err = waitInstance(ctx, rdbAPI, region, instanceID, d.Timeout(schema.TimeoutCreate))
70+
_, err = waitForRDBInstance(ctx, rdbAPI, region, instanceID, d.Timeout(schema.TimeoutCreate))
7171
if err != nil {
7272
return diag.FromErr(err)
7373
}
@@ -86,7 +86,7 @@ func resourceScalewayRdbPrivilegeCreate(ctx context.Context, d *schema.ResourceD
8686
_, errSetPrivilege := rdbAPI.SetPrivilege(createReq, scw.WithContext(ctx))
8787
if errSetPrivilege != nil {
8888
if is409Error(errSetPrivilege) {
89-
_, errWait := waitInstance(ctx, rdbAPI, region, instanceID, d.Timeout(schema.TimeoutCreate))
89+
_, errWait := waitForRDBInstance(ctx, rdbAPI, region, instanceID, d.Timeout(schema.TimeoutCreate))
9090
if errWait != nil {
9191
return resource.NonRetryableError(errWait)
9292
}
@@ -100,7 +100,7 @@ func resourceScalewayRdbPrivilegeCreate(ctx context.Context, d *schema.ResourceD
100100
return diag.FromErr(err)
101101
}
102102

103-
_, err = waitInstance(ctx, rdbAPI, region, instanceID, d.Timeout(schema.TimeoutCreate))
103+
_, err = waitForRDBInstance(ctx, rdbAPI, region, instanceID, d.Timeout(schema.TimeoutCreate))
104104
if err != nil {
105105
return diag.FromErr(err)
106106
}
@@ -119,7 +119,7 @@ func resourceScalewayRdbPrivilegeRead(ctx context.Context, d *schema.ResourceDat
119119
dbName, _ := d.Get("database_name").(string)
120120
userName, _ := d.Get("user_name").(string)
121121

122-
_, err = waitInstance(ctx, rdbAPI, region, instanceID, d.Timeout(schema.TimeoutRead))
122+
_, err = waitForRDBInstance(ctx, rdbAPI, region, instanceID, d.Timeout(schema.TimeoutRead))
123123
if err != nil {
124124
return diag.FromErr(err)
125125
}
@@ -172,7 +172,7 @@ func resourceScalewayRdbPrivilegeUpdate(ctx context.Context, d *schema.ResourceD
172172
return diag.FromErr(err)
173173
}
174174

175-
_, err = waitInstance(ctx, rdbAPI, region, instanceID, d.Timeout(schema.TimeoutUpdate))
175+
_, err = waitForRDBInstance(ctx, rdbAPI, region, instanceID, d.Timeout(schema.TimeoutUpdate))
176176
if err != nil {
177177
return diag.FromErr(err)
178178
}
@@ -209,7 +209,7 @@ func resourceScalewayRdbPrivilegeUpdate(ctx context.Context, d *schema.ResourceD
209209
_, errSet := rdbAPI.SetPrivilege(updateReq, scw.WithContext(ctx))
210210
if errSet != nil {
211211
if is409Error(errSet) {
212-
_, errWait := waitInstance(ctx, rdbAPI, region, instanceID, d.Timeout(schema.TimeoutUpdate))
212+
_, errWait := waitForRDBInstance(ctx, rdbAPI, region, instanceID, d.Timeout(schema.TimeoutUpdate))
213213
if errWait != nil {
214214
return resource.NonRetryableError(errWait)
215215
}
@@ -223,7 +223,7 @@ func resourceScalewayRdbPrivilegeUpdate(ctx context.Context, d *schema.ResourceD
223223
return diag.FromErr(err)
224224
}
225225

226-
_, err = waitInstance(ctx, rdbAPI, region, instanceID, d.Timeout(schema.TimeoutUpdate))
226+
_, err = waitForRDBInstance(ctx, rdbAPI, region, instanceID, d.Timeout(schema.TimeoutUpdate))
227227
if err != nil {
228228
return diag.FromErr(err)
229229
}
@@ -239,7 +239,7 @@ func resourceScalewayRdbPrivilegeDelete(ctx context.Context, d *schema.ResourceD
239239
return diag.FromErr(err)
240240
}
241241

242-
_, err = waitInstance(ctx, rdbAPI, region, instanceID, d.Timeout(schema.TimeoutDelete))
242+
_, err = waitForRDBInstance(ctx, rdbAPI, region, instanceID, d.Timeout(schema.TimeoutDelete))
243243
if err != nil {
244244
return diag.FromErr(err)
245245
}
@@ -295,7 +295,7 @@ func resourceScalewayRdbPrivilegeDelete(ctx context.Context, d *schema.ResourceD
295295
_, errSet := rdbAPI.SetPrivilege(updateReq, scw.WithContext(ctx))
296296
if errSet != nil {
297297
if is409Error(errSet) {
298-
_, errWait := waitInstance(ctx, rdbAPI, region, instanceID, d.Timeout(schema.TimeoutDelete))
298+
_, errWait := waitForRDBInstance(ctx, rdbAPI, region, instanceID, d.Timeout(schema.TimeoutDelete))
299299
if errWait != nil {
300300
return resource.NonRetryableError(errWait)
301301
}
@@ -309,7 +309,7 @@ func resourceScalewayRdbPrivilegeDelete(ctx context.Context, d *schema.ResourceD
309309
return diag.FromErr(err)
310310
}
311311

312-
_, err = waitInstance(ctx, rdbAPI, region, instanceID, d.Timeout(schema.TimeoutDelete))
312+
_, err = waitForRDBInstance(ctx, rdbAPI, region, instanceID, d.Timeout(schema.TimeoutDelete))
313313
if err != nil {
314314
return diag.FromErr(err)
315315
}

scaleway/resource_rdb_user.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ func resourceScalewayRdbUserCreate(ctx context.Context, d *schema.ResourceData,
6565
diag.FromErr(err)
6666
}
6767

68-
ins, err := waitInstance(ctx, rdbAPI, region, instanceID, d.Timeout(schema.TimeoutCreate))
68+
ins, err := waitForRDBInstance(ctx, rdbAPI, region, instanceID, d.Timeout(schema.TimeoutCreate))
6969
if err != nil {
7070
return diag.FromErr(err)
7171
}
@@ -84,7 +84,7 @@ func resourceScalewayRdbUserCreate(ctx context.Context, d *schema.ResourceData,
8484
currentUser, errCreateUser := rdbAPI.CreateUser(createReq, scw.WithContext(ctx))
8585
if errCreateUser != nil {
8686
if is409Error(errCreateUser) {
87-
_, errWait := waitInstance(ctx, rdbAPI, region, ins.ID, d.Timeout(schema.TimeoutCreate))
87+
_, errWait := waitForRDBInstance(ctx, rdbAPI, region, ins.ID, d.Timeout(schema.TimeoutCreate))
8888
if errWait != nil {
8989
return resource.NonRetryableError(errWait)
9090
}
@@ -112,7 +112,7 @@ func resourceScalewayRdbUserRead(ctx context.Context, d *schema.ResourceData, me
112112
return diag.FromErr(err)
113113
}
114114

115-
_, err = waitInstance(ctx, rdbAPI, region, instanceID, d.Timeout(schema.TimeoutRead))
115+
_, err = waitForRDBInstance(ctx, rdbAPI, region, instanceID, d.Timeout(schema.TimeoutRead))
116116
if err != nil {
117117
return diag.FromErr(err)
118118
}
@@ -149,7 +149,7 @@ func resourceScalewayRdbUserUpdate(ctx context.Context, d *schema.ResourceData,
149149
return diag.FromErr(err)
150150
}
151151

152-
_, err = waitInstance(ctx, rdbAPI, region, instanceID, d.Timeout(schema.TimeoutUpdate))
152+
_, err = waitForRDBInstance(ctx, rdbAPI, region, instanceID, d.Timeout(schema.TimeoutUpdate))
153153
if err != nil {
154154
return diag.FromErr(err)
155155
}
@@ -183,7 +183,7 @@ func resourceScalewayRdbUserDelete(ctx context.Context, d *schema.ResourceData,
183183
return diag.FromErr(err)
184184
}
185185

186-
_, err = waitInstance(ctx, rdbAPI, region, instanceID, d.Timeout(schema.TimeoutDelete))
186+
_, err = waitForRDBInstance(ctx, rdbAPI, region, instanceID, d.Timeout(schema.TimeoutDelete))
187187
if err != nil {
188188
return diag.FromErr(err)
189189
}
@@ -196,7 +196,7 @@ func resourceScalewayRdbUserDelete(ctx context.Context, d *schema.ResourceData,
196196
}, scw.WithContext(ctx))
197197
if errDeleteUser != nil {
198198
if is409Error(errDeleteUser) {
199-
_, errWait := waitInstance(ctx, rdbAPI, region, instanceID, d.Timeout(schema.TimeoutDelete))
199+
_, errWait := waitForRDBInstance(ctx, rdbAPI, region, instanceID, d.Timeout(schema.TimeoutDelete))
200200
if errWait != nil {
201201
return resource.NonRetryableError(errWait)
202202
}

0 commit comments

Comments
 (0)