Skip to content

gh-109538: Catch closed loop runtime error and issue warning #111983

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

Merged
merged 6 commits into from
Nov 15, 2023

Conversation

dpr-0
Copy link
Contributor

@dpr-0 dpr-0 commented Nov 11, 2023

Catch RuntimeError("Event loop is closed") from base_events.py line 514 then issue a warning to user

@ghost
Copy link

ghost commented Nov 11, 2023

All commit authors signed the Contributor License Agreement.
CLA signed

@bedevere-app
Copy link

bedevere-app bot commented Nov 11, 2023

Most changes to Python require a NEWS entry. Add one using the blurb_it web app or the blurb command-line tool.

If this change has little impact on Python users, wait for a maintainer to apply the skip news label instead.

@bedevere-app
Copy link

bedevere-app bot commented Nov 11, 2023

Most changes to Python require a NEWS entry. Add one using the blurb_it web app or the blurb command-line tool.

If this change has little impact on Python users, wait for a maintainer to apply the skip news label instead.

@AlexWaygood AlexWaygood added type-bug An unexpected behavior, bug, or error topic-asyncio labels Nov 11, 2023
@dpr-0 dpr-0 force-pushed the closed-loop-runtime-error branch 2 times, most recently from 5dd6f38 to a0dbe8b Compare November 11, 2023 17:08
@dpr-0 dpr-0 force-pushed the closed-loop-runtime-error branch from 2f72974 to 075a7fd Compare November 12, 2023 01:59
@dpr-0 dpr-0 force-pushed the closed-loop-runtime-error branch from 075a7fd to 7461e4e Compare November 12, 2023 02:02
@hugovk
Copy link
Member

hugovk commented Nov 12, 2023

Tip:

In order to keep the commit history intact, please avoid squashing or amending history and then force-pushing to the PR. Reviewers often want to look at individual commits.

https://devguide.python.org/getting-started/pull-request-lifecycle/#quick-guide

@dpr-0
Copy link
Contributor Author

dpr-0 commented Nov 12, 2023

Tip:

In order to keep the commit history intact, please avoid squashing or amending history and then force-pushing to the PR. Reviewers often want to look at individual commits.

https://devguide.python.org/getting-started/pull-request-lifecycle/#quick-guide

I see, thanks for letting me know.

Copy link
Member

@gvanrossum gvanrossum left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry to be arguing.


try:
self.close()
except RuntimeError:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Catching all RuntimeErrors always feels scary -- it could mark other, more serious bugs. How about only issuing the new warning if self._loop.is_closed()?

Copy link
Member

@gvanrossum gvanrossum left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Have you confirmed that this version solves the problem in your code? How hard would it be to write a unit test to confirm that this warning is reported?

Copy link
Contributor

@willingc willingc left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Change looks good. Thanks. Happy to merge after we have a test. This would be the file to add the test: https://github.com/python/cpython/blob/main/Lib/test/test_asyncio/test_streams.py

@miss-islington-app
Copy link

Thanks @dpr-0 for the PR, and @gvanrossum for merging it 🌮🎉.. I'm working now to backport this PR to: 3.11, 3.12.
🐍🍒⛏🤖

@miss-islington-app
Copy link

Sorry, @dpr-0 and @gvanrossum, I could not cleanly backport this to 3.12 due to a conflict.
Please backport using cherry_picker on command line.

cherry_picker e0f512797596282bff63260f8102592aad37cdf1 3.12

@miss-islington-app
Copy link

Sorry, @dpr-0 and @gvanrossum, I could not cleanly backport this to 3.11 due to a conflict.
Please backport using cherry_picker on command line.

cherry_picker e0f512797596282bff63260f8102592aad37cdf1 3.11

@dpr-0 dpr-0 deleted the closed-loop-runtime-error branch November 15, 2023 01:28
@gvanrossum
Copy link
Member

@dpr-0 Are you interested in attempting the backports?

@dpr-0
Copy link
Contributor Author

dpr-0 commented Nov 15, 2023

@dpr-0 Are you interested in attempting the backports?

Yes, any brief backport steps or I just cherry-pick and create two PRs?

@gvanrossum
Copy link
Member

I think it's just a matter of checking out the right branch (3.11 or 3.12), cherry-picking the commit from main, resolving conflicts, and submitting a PR. Repeat for the other branch. The PR title should follow certain conventions (see either the devguide or just wait for the test to fail -- I always forget what it is and I use the latter).

I don't know what caused the conflict -- if it's complicated just ping this thread with the conflict info.

try:
self.loop.run_until_complete(inner(httpd))
# This exception is caused by `self.loop.stop()` as expected.
except RuntimeError:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If this exception is expected then why not use self.assertRaises etc?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

except allows/tolerates an exception, assert requires one and will fail if it does not happen because of other improvements.

@dpr-0
Copy link
Contributor Author

dpr-0 commented Nov 16, 2023

@kumaraditya303 @gvanrossum I am planning to backport this PR and issue a new PR to improve test case.

@bedevere-app
Copy link

bedevere-app bot commented Nov 16, 2023

GH-112141 is a backport of this pull request to the 3.11 branch.

@bedevere-app
Copy link

bedevere-app bot commented Nov 16, 2023

GH-112142 is a backport of this pull request to the 3.12 branch.

@bedevere-app bedevere-app bot removed the needs backport to 3.12 only security fixes label Nov 16, 2023
@bedevere-app
Copy link

bedevere-app bot commented Nov 16, 2023

GH-112141 is a backport of this pull request to the 3.12 branch.

@bedevere-app
Copy link

bedevere-app bot commented Nov 16, 2023

GH-112141 is a backport of this pull request to the 3.11 branch.

@bedevere-app
Copy link

bedevere-app bot commented Nov 16, 2023

GH-112142 is a backport of this pull request to the 3.12 branch.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
topic-asyncio type-bug An unexpected behavior, bug, or error
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants