func listing_add_iam_policy_member()

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
}