-
-
Notifications
You must be signed in to change notification settings - Fork 6.9k
set_roll_back should only rollback initialized connections #9599
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
base: master
Are you sure you want to change the base?
Conversation
The exception handler call "connections.all()". This creates a database connection to all defined databases. As a small optimization you can use "connections.all(initialized_only=True)" to rollback only the database to which the current thread has open connections. (My application can have many databases defined, and this loop is identified as a source of many idle database connections)
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.
is it possible to add tests to avoid regression?
@auvipy I just looked into updating django-rest-framework/tests/test_views.py Line 113 in a8595a8
|
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. |
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.
Pull Request Overview
This pull request optimizes the rollback process by limiting the rollback to initialized database connections only.
- Updated the set_rollback function to use the "initialized_only" flag
- Reduces unnecessary database connection instantiation during exception handling
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.
This looks very reasonable, and I've followed the flow into what Django does when this is called, and it lgtm.
I've also verified that this is supported by all Django releases we rely on. I guess we didn't have this initially because it was only introduced in Django 4.1.
The exception handler call "connections.all()". This creates a database connection to all defined databases. As a small optimization you can use "connections.all(initialized_only=True)" to rollback only the database to which the current thread has open connections.
(My application can have many databases defined, and this loop is identified as a source of many idle database connections)
Note: Before submitting a code change, please review our contributing guidelines.
Description
Please describe your pull request. If it fixes a bug or resolves a feature request, be sure to link to that issue. When linking to an issue, please use
refs #...
in the description of the pull request.