Skip to content

Commit 96d3e75

Browse files
committed
feat: support concurrency model for deletes
1 parent 3a41751 commit 96d3e75

File tree

4 files changed

+24
-4
lines changed

4 files changed

+24
-4
lines changed

internal/provider/policy_resource.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,12 @@ func (r *policyResource) Delete(ctx context.Context, req resource.DeleteRequest,
272272
return
273273
}
274274

275-
err := r.client.DeletePolicy(data.PermissionsSystemID.ValueString(), data.ID.ValueString())
275+
// Coordinate operations to prevent conflicts
276+
permissionSystemID := data.PermissionsSystemID.ValueString()
277+
r.fgamCoordinator.Lock(permissionSystemID)
278+
defer r.fgamCoordinator.Unlock(permissionSystemID)
279+
280+
err := r.client.DeletePolicy(permissionSystemID, data.ID.ValueString())
276281
if err != nil {
277282
resp.Diagnostics.AddError("Client Error", fmt.Sprintf("Unable to delete policy, got error: %s", err))
278283
return

internal/provider/role_resource.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,12 @@ func (r *roleResource) Delete(ctx context.Context, req resource.DeleteRequest, r
244244
return
245245
}
246246

247-
err := r.client.DeleteRole(data.PermissionsSystemID.ValueString(), data.ID.ValueString())
247+
// Coordinate operations to prevent conflicts
248+
permissionSystemID := data.PermissionsSystemID.ValueString()
249+
r.fgamCoordinator.Lock(permissionSystemID)
250+
defer r.fgamCoordinator.Unlock(permissionSystemID)
251+
252+
err := r.client.DeleteRole(permissionSystemID, data.ID.ValueString())
248253
if err != nil {
249254
resp.Diagnostics.AddError("Client Error", fmt.Sprintf("Unable to delete role, got error: %s", err))
250255
return

internal/provider/service_account_resource.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,12 @@ func (r *serviceAccountResource) Delete(ctx context.Context, req resource.Delete
222222
return
223223
}
224224

225-
err := r.client.DeleteServiceAccount(data.PermissionsSystemID.ValueString(), data.ID.ValueString())
225+
// Coordinate operations to prevent conflicts
226+
permissionSystemID := data.PermissionsSystemID.ValueString()
227+
r.fgamCoordinator.Lock(permissionSystemID)
228+
defer r.fgamCoordinator.Unlock(permissionSystemID)
229+
230+
err := r.client.DeleteServiceAccount(permissionSystemID, data.ID.ValueString())
226231
if err != nil {
227232
resp.Diagnostics.AddError("Client Error", fmt.Sprintf("Unable to delete service account, got error: %s", err))
228233
return

internal/provider/token_resource.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -299,8 +299,13 @@ func (r *TokenResource) Delete(ctx context.Context, req resource.DeleteRequest,
299299
return
300300
}
301301

302+
// Coordinate operations to prevent conflicts
303+
permissionSystemID := state.PermissionsSystemID.ValueString()
304+
r.fgamCoordinator.Lock(permissionSystemID)
305+
defer r.fgamCoordinator.Unlock(permissionSystemID)
306+
302307
err := r.client.DeleteToken(
303-
state.PermissionsSystemID.ValueString(),
308+
permissionSystemID,
304309
state.ServiceAccountID.ValueString(),
305310
state.ID.ValueString(),
306311
)

0 commit comments

Comments
 (0)