KEMBAR78
Deadlock due to race condition in download thread when using Bigquery Storage API · Issue #2032 · googleapis/python-bigquery · GitHub
Skip to content

Deadlock due to race condition in download thread when using Bigquery Storage API #2032

@kien-truong

Description

@kien-truong

There is a race condition in the download thread and the main thread when using Bigquery Storage API to fetch data.

for page in rowstream.pages:
if download_state.done:
return
item = page_to_item(page)
worker_queue.put(item)

finally:
# No need for a lock because reading/replacing a variable is
# defined to be an atomic operation in the Python language
# definition (enforced by the global interpreter lock).
download_state.done = True
# Shutdown all background threads, now that they should know to
# exit early.
pool.shutdown(wait=True)

When the download thread is blocked on worker_queue.put(item), if the main thread exit, causing the pool to shut down, the download thread will be stuck. This behavior prevents the program from exiting.

Metadata

Metadata

Assignees

Labels

api: bigqueryIssues related to the googleapis/python-bigquery API.policybotpriority: p3Desirable enhancement or fix. May not be included in next release.type: bugError or flaw in code with unintended results or allowing sub-optimal usage patterns.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions