in analytics-hub/snippets/create_listing_golang/main.go [101:126]
func listing_add_iam_policy_member(ctx context.Context, client *analyticshub.Client, listing_id string, role string, member string) *iampb.Policy {
exitLoop := false
var newPolicy *iampb.Policy
for !exitLoop {
exitLoop = true
setIamPolicyRequest, err := create_set_iam_policy_request(ctx, client, listing_id, role, member)
if err == nil {
resp, err := client.SetIamPolicy(ctx, setIamPolicyRequest)
if err != nil {
// Aborted == concurrent modification / Etag mismatch
if status.Code(err) == codes.Aborted {
// Add delay (should be exponential backoff instead of fixed time)
time.Sleep(5 * time.Second)
println("add_iam_policy_member: concurrent modification (Etag mismatch), retrying")
exitLoop = false
// TODO: handle UserNotFound error (e.g. the user to be added does not exist)
} else {
println(err.Error())
}
} else {
newPolicy = resp
}
}
}
return newPolicy
}