Skip to content

Commit 472b35d

Browse files
committed
chore: further deferred unlock fixes and implementations
1 parent 9897e35 commit 472b35d

5 files changed

+8
-13
lines changed

provider/pro/resource_rediscloud_pro_database.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -469,6 +469,8 @@ func resourceRedisCloudProDatabaseCreate(ctx context.Context, d *schema.Resource
469469

470470
// Some attributes on a database are not accessible by the subscription creation API.
471471
// Run the subscription update function to apply any additional changes to the databases, such as password, enableDefaultUser and so on.
472+
// Unlock before calling Update since Update also needs to acquire the same subscription mutex.
473+
utils.SubscriptionMutex.Unlock(subId)
472474
return resourceRedisCloudProDatabaseUpdate(ctx, d, meta)
473475
}
474476

provider/resource_rediscloud_active_active_database.go

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -361,6 +361,7 @@ 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)
364365

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

@@ -460,13 +460,11 @@ 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)
464463
return diag.FromErr(err)
465464
}
466465

467466
dbId, err := api.Client.Database.ActiveActiveCreate(ctx, subId, createDatabase)
468467
if err != nil {
469-
utils.SubscriptionMutex.Unlock(subId)
470468
return diag.FromErr(err)
471469
}
472470

@@ -475,17 +473,16 @@ func resourceRedisCloudActiveActiveDatabaseCreate(ctx context.Context, d *schema
475473
// Confirm Database Active status
476474
err = utils.WaitForDatabaseToBeActive(ctx, subId, dbId, api)
477475
if err != nil {
478-
utils.SubscriptionMutex.Unlock(subId)
479476
return diag.FromErr(err)
480477
}
481478

482479
if err := utils.WaitForSubscriptionToBeActive(ctx, subId, api); err != nil {
483-
utils.SubscriptionMutex.Unlock(subId)
484480
return diag.FromErr(err)
485481
}
486482

487483
// Some attributes on a database are not accessible by the subscription creation API.
488484
// Run the subscription update function to apply any additional changes to the databases, such as password and so on.
485+
// Unlock before calling Update since Update also needs to acquire the same subscription mutex.
489486
utils.SubscriptionMutex.Unlock(subId)
490487
return resourceRedisCloudActiveActiveDatabaseUpdate(ctx, d, meta)
491488
}

provider/resource_rediscloud_active_active_private_service_connect.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,12 +64,12 @@ func resourceRedisCloudActiveActivePrivateServiceConnectCreate(ctx context.Conte
6464
return diag.FromErr(err)
6565
}
6666
utils.SubscriptionMutex.Lock(subscriptionId)
67+
defer utils.SubscriptionMutex.Unlock(subscriptionId)
6768

6869
regionId := d.Get("region_id").(int)
6970

7071
pscServiceId, err := api.Client.PrivateServiceConnect.CreateActiveActiveService(ctx, subscriptionId, regionId)
7172
if err != nil {
72-
utils.SubscriptionMutex.Unlock(subscriptionId)
7373
return diag.FromErr(err)
7474
}
7575

@@ -79,17 +79,14 @@ func resourceRedisCloudActiveActivePrivateServiceConnectCreate(ctx context.Conte
7979
return refreshPrivateServiceConnectServiceActiveActiveStatus(ctx, subscriptionId, regionId, api)
8080
})
8181
if err != nil {
82-
utils.SubscriptionMutex.Unlock(subscriptionId)
8382
return diag.FromErr(err)
8483
}
8584

8685
err = utils.WaitForSubscriptionToBeActive(ctx, subscriptionId, api)
8786
if err != nil {
88-
utils.SubscriptionMutex.Unlock(subscriptionId)
8987
return diag.FromErr(err)
9088
}
9189

92-
utils.SubscriptionMutex.Unlock(subscriptionId)
9390
return resourceRedisCloudActiveActivePrivateServiceConnectRead(ctx, d, meta)
9491
}
9592

provider/resource_rediscloud_essentials_database.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -442,6 +442,8 @@ func resourceRedisCloudEssentialsDatabaseCreate(ctx context.Context, d *schema.R
442442
// Some attributes on a database are not accessible by the subscription creation API.
443443
// Run the subscription update function to apply any additional changes to the databases (enableDefaultUser)
444444
// Others are omitted here _because_ the update will take care of them, such as tags
445+
// Unlock before calling Update since Update also needs to acquire the same subscription mutex.
446+
utils.SubscriptionMutex.Unlock(subId)
445447
return resourceRedisCloudEssentialsDatabaseUpdate(ctx, d, meta)
446448
}
447449

provider/resource_rediscloud_private_service_connect.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,10 @@ func resourceRedisCloudPrivateServiceConnectCreate(ctx context.Context, d *schem
5959
return diag.FromErr(err)
6060
}
6161
utils.SubscriptionMutex.Lock(subscriptionId)
62+
defer utils.SubscriptionMutex.Unlock(subscriptionId)
6263

6364
pscServiceId, err := api.Client.PrivateServiceConnect.CreateService(ctx, subscriptionId)
6465
if err != nil {
65-
utils.SubscriptionMutex.Unlock(subscriptionId)
6666
return diag.FromErr(err)
6767
}
6868

@@ -72,17 +72,14 @@ func resourceRedisCloudPrivateServiceConnectCreate(ctx context.Context, d *schem
7272
return refreshPrivateServiceConnectServiceStatus(ctx, subscriptionId, api)
7373
})
7474
if err != nil {
75-
utils.SubscriptionMutex.Unlock(subscriptionId)
7675
return diag.FromErr(err)
7776
}
7877

7978
err = utils.WaitForSubscriptionToBeActive(ctx, subscriptionId, api)
8079
if err != nil {
81-
utils.SubscriptionMutex.Unlock(subscriptionId)
8280
return diag.FromErr(err)
8381
}
8482

85-
utils.SubscriptionMutex.Unlock(subscriptionId)
8683
return resourceRedisCloudPrivateServiceConnectRead(ctx, d, meta)
8784
}
8885

0 commit comments

Comments
 (0)