fix: Race condition where future callbacks invoked before client is in paused state #1145
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
For non-retriable errors returned from the backend, the client library currently sets
future.set_exception()
for all outstanding futures:python-pubsub/google/cloud/pubsub_v1/publisher/_batch/thread.py
Lines 285 to 286 in 8c7e2a9
before it tries to change its state to paused by calling
_batch_done_callback()
:python-pubsub/google/cloud/pubsub_v1/publisher/_batch/thread.py
Lines 289 to 291 in 8c7e2a9
which transitions the state of the client library to a paused state:
python-pubsub/google/cloud/pubsub_v1/publisher/_sequencer/ordered_sequencer.py
Lines 204 to 206 in ff229a5
This results in race conditions where the callback associated with the future is invoked before the client enters paused state. This causes issues if the callback attempts to do a
resume_publish()
before the client is in the paused state.This fix ensures that the client is in paused state before future callbacks are invoked as a consequence of
future.set_exception
Fixes #1144 🦕