Skip to content

Commit 2efd79c

Browse files
committed
fix: defer unlock crashes
1 parent 472b35d commit 2efd79c

File tree

3 files changed

+11
-3
lines changed

3 files changed

+11
-3
lines changed

provider/pro/resource_rediscloud_pro_database.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,6 @@ func resourceRedisCloudProDatabaseCreate(ctx context.Context, d *schema.Resource
363363

364364
subId := *utils.GetInt(d, "subscription_id")
365365
utils.SubscriptionMutex.Lock(subId)
366-
defer utils.SubscriptionMutex.Unlock(subId)
367366

368367
createModules := make([]*databases.Module, 0)
369368
modules := d.Get("modules").(*schema.Set)
@@ -449,21 +448,25 @@ func resourceRedisCloudProDatabaseCreate(ctx context.Context, d *schema.Resource
449448

450449
// Confirm sub is ready to accept a db request
451450
if err := utils.WaitForSubscriptionToBeActive(ctx, subId, api); err != nil {
451+
utils.SubscriptionMutex.Unlock(subId)
452452
return diag.FromErr(err)
453453
}
454454

455455
dbId, err := api.Client.Database.Create(ctx, subId, createDatabase)
456456
if err != nil {
457+
utils.SubscriptionMutex.Unlock(subId)
457458
return diag.FromErr(err)
458459
}
459460

460461
d.SetId(utils.BuildResourceId(subId, dbId))
461462

462463
// Confirm db + sub active status
463464
if err := utils.WaitForDatabaseToBeActive(ctx, subId, dbId, api); err != nil {
465+
utils.SubscriptionMutex.Unlock(subId)
464466
return diag.FromErr(err)
465467
}
466468
if err := utils.WaitForSubscriptionToBeActive(ctx, subId, api); err != nil {
469+
utils.SubscriptionMutex.Unlock(subId)
467470
return diag.FromErr(err)
468471
}
469472

provider/resource_rediscloud_active_active_database.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -361,7 +361,6 @@ func resourceRedisCloudActiveActiveDatabaseCreate(ctx context.Context, d *schema
361361

362362
subId := d.Get("subscription_id").(int)
363363
utils.SubscriptionMutex.Lock(subId)
364-
defer utils.SubscriptionMutex.Unlock(subId)
365364

366365
name := d.Get("name").(string)
367366
supportOSSClusterAPI := d.Get("support_oss_cluster_api").(bool)
@@ -396,6 +395,7 @@ func resourceRedisCloudActiveActiveDatabaseCreate(ctx context.Context, d *schema
396395
// Get regions from /subscriptions/{subscriptionId}/regions, this will use the Regions API
397396
regions, err := api.Client.Regions.List(ctx, subId)
398397
if err != nil {
398+
utils.SubscriptionMutex.Unlock(subId)
399399
return diag.FromErr(err)
400400
}
401401

@@ -460,11 +460,13 @@ func resourceRedisCloudActiveActiveDatabaseCreate(ctx context.Context, d *schema
460460
// Confirm Subscription Active status before creating database
461461
err = utils.WaitForSubscriptionToBeActive(ctx, subId, api)
462462
if err != nil {
463+
utils.SubscriptionMutex.Unlock(subId)
463464
return diag.FromErr(err)
464465
}
465466

466467
dbId, err := api.Client.Database.ActiveActiveCreate(ctx, subId, createDatabase)
467468
if err != nil {
469+
utils.SubscriptionMutex.Unlock(subId)
468470
return diag.FromErr(err)
469471
}
470472

@@ -473,10 +475,12 @@ func resourceRedisCloudActiveActiveDatabaseCreate(ctx context.Context, d *schema
473475
// Confirm Database Active status
474476
err = utils.WaitForDatabaseToBeActive(ctx, subId, dbId, api)
475477
if err != nil {
478+
utils.SubscriptionMutex.Unlock(subId)
476479
return diag.FromErr(err)
477480
}
478481

479482
if err := utils.WaitForSubscriptionToBeActive(ctx, subId, api); err != nil {
483+
utils.SubscriptionMutex.Unlock(subId)
480484
return diag.FromErr(err)
481485
}
482486

provider/resource_rediscloud_essentials_database.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,6 @@ func resourceRedisCloudEssentialsDatabaseCreate(ctx context.Context, d *schema.R
305305
subId := d.Get("subscription_id").(int)
306306

307307
utils.SubscriptionMutex.Lock(subId)
308-
defer utils.SubscriptionMutex.Unlock(subId)
309308

310309
createDatabaseRequest := fixedDatabases.CreateFixedDatabase{
311310
Name: redis.String(d.Get("name").(string)),
@@ -427,6 +426,7 @@ func resourceRedisCloudEssentialsDatabaseCreate(ctx context.Context, d *schema.R
427426
databaseId, err := api.Client.FixedDatabases.Create(ctx, subId, createDatabaseRequest)
428427
if err != nil {
429428
log.Printf("[ERROR] FixedDatabases.Create failed for subscription %d: %v", subId, err)
429+
utils.SubscriptionMutex.Unlock(subId)
430430
return diag.FromErr(err)
431431
}
432432
log.Printf("[DEBUG] FixedDatabases.Create succeeded for subscription %d, database ID: %d", subId, databaseId)
@@ -436,6 +436,7 @@ func resourceRedisCloudEssentialsDatabaseCreate(ctx context.Context, d *schema.R
436436
// Confirm Subscription Active status
437437
err = waitForEssentialsDatabaseToBeActive(ctx, subId, databaseId, api)
438438
if err != nil {
439+
utils.SubscriptionMutex.Unlock(subId)
439440
return diag.FromErr(err)
440441
}
441442

0 commit comments

Comments
 (0)