queues: Preserve items when waiting consumers are canceled - #3689
Open
Sanjays2402 wants to merge 1 commit into
Open
queues: Preserve items when waiting consumers are canceled#3689Sanjays2402 wants to merge 1 commit into
Sanjays2402 wants to merge 1 commit into
Conversation
Queue.put_nowait resolves a waiting getter before its consumer task resumes. If that task is canceled in the gap, cancellation replaces the delivered result and the item disappears. Use a cancellation-aware getter future to return a delivered item to the queue when cancellation wins that race. Add regression coverage for the put-then-cancel ordering. Fixes tornadoweb#2826.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Fixes #2826.
A queue item can be assigned to a waiting getter just before its consumer task is canceled; cancellation then replaces the getter's completed result and silently drops the item. Queue getters now return completed items to the queue when cancellation wins that race, without changing the unfinished-task count.
The regression test reproduces the put-then-cancel ordering: it fails with
QueueEmptybefore the fix and passes afterward. The queues test module passes all 43 tests.