Skip to content

Commit 6681f1f

Browse files
authored
fix: tolerate BQ connection service account propagation delay (#1505)
1 parent a70a607 commit 6681f1f

File tree

1 file changed

+16
-8
lines changed

1 file changed

+16
-8
lines changed

bigframes/clients.py

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -94,16 +94,24 @@ def create_bq_connection(
9494
# https://cloud.google.com/bigquery/docs/reference/standard-sql/remote-functions#grant_permission_on_function
9595
self._ensure_iam_binding(project_id, service_account_id, iam_role)
9696

97-
# Introduce retries to accommodate transient errors like etag mismatch,
98-
# which can be caused by concurrent operation on the same resource, and
99-
# manifests with message like:
100-
# google.api_core.exceptions.Aborted: 409 There were concurrent policy
101-
# changes. Please retry the whole read-modify-write with exponential
102-
# backoff. The request's ETag '\007\006\003,\264\304\337\272' did not match
103-
# the current policy's ETag '\007\006\003,\3750&\363'.
97+
# Introduce retries to accommodate transient errors like:
98+
# (1) Etag mismatch,
99+
# which can be caused by concurrent operation on the same resource, and
100+
# manifests with message like:
101+
# google.api_core.exceptions.Aborted: 409 There were concurrent policy
102+
# changes. Please retry the whole read-modify-write with exponential
103+
# backoff. The request's ETag '\007\006\003,\264\304\337\272' did not
104+
# match the current policy's ETag '\007\006\003,\3750&\363'.
105+
# (2) Connection creation,
106+
# for which sometimes it takes a bit for its service account to reflect
107+
# across APIs (e.g. b/397662004, b/386838767), before which, an attempt
108+
# to set an IAM policy for the service account may throw an error like:
109+
# google.api_core.exceptions.InvalidArgument: 400 Service account
110+
# bqcx-*@gcp-sa-bigquery-condel.iam.gserviceaccount.com does not exist.
104111
@google.api_core.retry.Retry(
105112
predicate=google.api_core.retry.if_exception_type(
106-
google.api_core.exceptions.Aborted
113+
google.api_core.exceptions.Aborted,
114+
google.api_core.exceptions.InvalidArgument,
107115
),
108116
initial=10,
109117
maximum=20,

0 commit comments

Comments
 (0)