-
-
Notifications
You must be signed in to change notification settings - Fork 726
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 our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
make ConnectionPool.remove cancel connection attempts #7547
Merged
fjetter
merged 3 commits into
dask:main
from
graingert:connection-pool-remove-cancel-connection-attempts
Feb 22, 2023
Merged
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains 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
This file contains 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
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Instead of mocking, you could also just connect to a server with either a very slow or blocked listener or one that is not replying on the handshake
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I thought mocking was cleaner here, I'll look into using a slow server
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
also the other tests monkeypatch with
monkeypatch.setitem(backends, "tcp", SlowBackend())
, so I still think usingmock.patch
on theconnect
function is cleanest hereThere was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
when testing this:
I hit a race condition in this asyncio.wait_for where the cancellation is ignored:
distributed/distributed/comm/core.py
Lines 291 to 295 in 9ddee12
https://github.com/python/cpython/blob/924a3bfa28578802eb9ca77a66fb5d4762a62f14/Lib/asyncio/tasks.py#L472
this is because the
connector.connect
andon_connection
tasks resume in the same even loop cycle and so the cancellation arrives just as theconnect() -> asyncio.wait_for()
coroutine is about to be resumed, this is very unlikely in production because the code will be waiting incomm.read()
orasyncio.sleep(backoff)
and can be resolved in the test by adding anasyncio.sleep(0.5)
before callingrpc.remove()
:or do you think it's best to leave this with a mocked connect function?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we should come back to this once #7571 is done. Triggering this edge case is interesting and I believe we've encountered this a couple of times in the past (in CI).
No need for any action on this PR.