Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

[3.10] gh-90155: Fix bug in asyncio.Semaphore and strengthen FIFO guarantee (GH-93222)#97020

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Merged

Conversation

@miss-islington
Copy link
Contributor

@miss-islingtonmiss-islington commentedSep 22, 2022
edited by bedevere-bot
Loading

The main problem was that an unluckily timed task cancellation could cause
the semaphore to be stuck. There were also doubts about strict FIFO ordering
of tasks allowed to pass.

The Semaphore implementation was rewritten to be more similar to Lock.
Many tests for edge cases (including cancellation) were added.
(cherry picked from commit24e0379)

Co-authored-by: Cyker Waycykerway@gmail.com

…antee (pythonGH-93222)The main problem was that an unluckily timed task cancellation could causethe semaphore to be stuck. There were also doubts about strict FIFO orderingof tasks allowed to pass.The Semaphore implementation was rewritten to be more similar to Lock.Many tests for edge cases (including cancellation) were added.(cherry picked from commit24e0379)Co-authored-by: Cyker Way <cykerway@gmail.com>
@miss-islington
Copy link
ContributorAuthor

Status check is done, and it's a success ✅.

@miss-islingtonmiss-islington merged commit646aa7e intopython:3.10Sep 22, 2022
@miss-islingtonmiss-islington deleted the backport-24e0379-3.10 branchSeptember 22, 2022 17:01
altendky added a commit to Chia-Network/chia-blockchain that referenced this pull requestOct 15, 2022
We access the `._waiters` private attribute of the Python asyncio`Semaphore` class.  This was changed in Python 3.10.8 (and other versions)to be initialized to `None` instead of an empty deque.  Our existingunconditional length checks failed on the new `None` default.  This seemsto block syncing.python/cpython#97020https://github.com/python/cpython/compare/v3.10.7..v3.10.8#diff-0fee1befb15023abc0dad2623effa93a304946796929f6cb445d11a57821e737Reported traceback:```python-traceback2022-10-12T20:03:59.367 full_node full_node_server : INFO Connected with full_node {'host': '65.34.144.6', 'port': 8444}2022-10-12T20:03:59.370 full_node full_node_server : ERROR Exception: object of type 'NoneType' has no len(), {'host': '65.34.144.6', 'port': 8444}. Traceback (most recent call last):File "/home/summa/chia-blockchain/chia/server/server.py", line 598, in wrapped_coroutineresult = await coroutineFile "/home/summa/chia-blockchain/chia/full_node/full_node_api.py", line 114, in new_peakwaiter_count = len(self.full_node.new_peak_sem._waiters)TypeError: object of type 'NoneType' has no len()2022-10-12T20:03:59.371 full_node full_node_server : ERROR Exception: object of type 'NoneType' has no len() <class 'TypeError'>, closing connection {'host': '65.34.144.6', 'port': 8444}. Traceback (most recent call last):File "/home/summa/chia-blockchain/chia/server/server.py", line 608, in api_callresponse: Optional[Message] = await asyncio.wait_for(wrapped_coroutine(), timeout=timeout)File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_forreturn await futFile "/home/summa/chia-blockchain/chia/server/server.py", line 605, in wrapped_coroutineraise eFile "/home/summa/chia-blockchain/chia/server/server.py", line 598, in wrapped_coroutineresult = await coroutineFile "/home/summa/chia-blockchain/chia/full_node/full_node_api.py", line 114, in new_peakwaiter_count = len(self.full_node.new_peak_sem._waiters)TypeError: object of type 'NoneType' has no len()2022-10-12T20:03:59.487 full_node full_node_server : INFO Connection closed: 65.34.144.6, node id: 506fe4c05ce6b72bb707471842e552307c7a547aa9ba981175db5c08fa3e47e6```
wallentx pushed a commit to Chia-Network/chia-blockchain that referenced this pull requestOct 17, 2022
We access the `._waiters` private attribute of the Python asyncio`Semaphore` class.  This was changed in Python 3.10.8 (and other versions)to be initialized to `None` instead of an empty deque.  Our existingunconditional length checks failed on the new `None` default.  This seemsto block syncing.python/cpython#97020https://github.com/python/cpython/compare/v3.10.7..v3.10.8#diff-0fee1befb15023abc0dad2623effa93a304946796929f6cb445d11a57821e737Reported traceback:```python-traceback2022-10-12T20:03:59.367 full_node full_node_server : INFO Connected with full_node {'host': '65.34.144.6', 'port': 8444}2022-10-12T20:03:59.370 full_node full_node_server : ERROR Exception: object of type 'NoneType' has no len(), {'host': '65.34.144.6', 'port': 8444}. Traceback (most recent call last):File "/home/summa/chia-blockchain/chia/server/server.py", line 598, in wrapped_coroutineresult = await coroutineFile "/home/summa/chia-blockchain/chia/full_node/full_node_api.py", line 114, in new_peakwaiter_count = len(self.full_node.new_peak_sem._waiters)TypeError: object of type 'NoneType' has no len()2022-10-12T20:03:59.371 full_node full_node_server : ERROR Exception: object of type 'NoneType' has no len() <class 'TypeError'>, closing connection {'host': '65.34.144.6', 'port': 8444}. Traceback (most recent call last):File "/home/summa/chia-blockchain/chia/server/server.py", line 608, in api_callresponse: Optional[Message] = await asyncio.wait_for(wrapped_coroutine(), timeout=timeout)File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_forreturn await futFile "/home/summa/chia-blockchain/chia/server/server.py", line 605, in wrapped_coroutineraise eFile "/home/summa/chia-blockchain/chia/server/server.py", line 598, in wrapped_coroutineresult = await coroutineFile "/home/summa/chia-blockchain/chia/full_node/full_node_api.py", line 114, in new_peakwaiter_count = len(self.full_node.new_peak_sem._waiters)TypeError: object of type 'NoneType' has no len()2022-10-12T20:03:59.487 full_node full_node_server : INFO Connection closed: 65.34.144.6, node id: 506fe4c05ce6b72bb707471842e552307c7a547aa9ba981175db5c08fa3e47e6```
wallentx pushed a commit to Chia-Network/chia-blockchain that referenced this pull requestNov 6, 2022
* treat Semaphore._waiters as length zero when it is NoneWe access the `._waiters` private attribute of the Python asyncio`Semaphore` class.  This was changed in Python 3.10.8 (and other versions)to be initialized to `None` instead of an empty deque.  Our existingunconditional length checks failed on the new `None` default.  This seemsto block syncing.python/cpython#97020https://github.com/python/cpython/compare/v3.10.7..v3.10.8#diff-0fee1befb15023abc0dad2623effa93a304946796929f6cb445d11a57821e737Reported traceback:```python-traceback2022-10-12T20:03:59.367 full_node full_node_server : INFO Connected with full_node {'host': '65.34.144.6', 'port': 8444}2022-10-12T20:03:59.370 full_node full_node_server : ERROR Exception: object of type 'NoneType' has no len(), {'host': '65.34.144.6', 'port': 8444}. Traceback (most recent call last):File "/home/summa/chia-blockchain/chia/server/server.py", line 598, in wrapped_coroutineresult = await coroutineFile "/home/summa/chia-blockchain/chia/full_node/full_node_api.py", line 114, in new_peakwaiter_count = len(self.full_node.new_peak_sem._waiters)TypeError: object of type 'NoneType' has no len()2022-10-12T20:03:59.371 full_node full_node_server : ERROR Exception: object of type 'NoneType' has no len() <class 'TypeError'>, closing connection {'host': '65.34.144.6', 'port': 8444}. Traceback (most recent call last):File "/home/summa/chia-blockchain/chia/server/server.py", line 608, in api_callresponse: Optional[Message] = await asyncio.wait_for(wrapped_coroutine(), timeout=timeout)File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_forreturn await futFile "/home/summa/chia-blockchain/chia/server/server.py", line 605, in wrapped_coroutineraise eFile "/home/summa/chia-blockchain/chia/server/server.py", line 598, in wrapped_coroutineresult = await coroutineFile "/home/summa/chia-blockchain/chia/full_node/full_node_api.py", line 114, in new_peakwaiter_count = len(self.full_node.new_peak_sem._waiters)TypeError: object of type 'NoneType' has no len()2022-10-12T20:03:59.487 full_node full_node_server : INFO Connection closed: 65.34.144.6, node id: 506fe4c05ce6b72bb707471842e552307c7a547aa9ba981175db5c08fa3e47e6```* add LimitedSemaphore
Sign up for freeto join this conversation on GitHub. Already have an account?Sign in to comment

Reviewers

@gvanrossumgvanrossumgvanrossum approved these changes

@1st11st1Awaiting requested review from 1st11st1 is a code owner

@asvetlovasvetlovAwaiting requested review from asvetlovasvetlov is a code owner

Assignees

No one assigned

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

4 participants

@miss-islington@gvanrossum@bedevere-bot@cykerway

[8]ページ先頭

©2009-2025 Movatter.jp