channel's `DatabaseSyncToAsync` calls `close_if_unusable_or_obsolete`
here.
The following patch might make sense:
{{{
diff --git c/django/db/backends/base/base.py
i/django/db/backends/base/base.py
index 9fa03cc0ee..f9ca0f8464 100644
--- c/django/db/backends/base/base.py
+++ i/django/db/backends/base/base.py
@@ -497,7 +497,10 @@ def close_if_unusable_or_obsolete(self):
if self.connection is not None:
# If the application didn't restore the original autocommit
setting,
# don't take chances, drop the connection.
- if self.get_autocommit() != self.settings_dict['AUTOCOMMIT']:
+ if (
+ not self.in_atomic_block and
+ self.get_autocommit() !=
self.settings_dict["AUTOCOMMIT"]
+ ):
self.close()
return
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/30448>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
* stage: Unreviewed => Accepted
Comment:
`close_if_unusable_or_obsolete` is certainly an internal API but I agree
that not considering `self.in_atomic_block` in the check against
`settings_dict["AUTOCOMMIT"]` is way too naive to determine the connection
is unusable or obsolete.
--
Ticket URL: <https://code.djangoproject.com/ticket/30448#comment:1>
Comment (by Daniel Hahler):
Created https://github.com/django/django/pull/11769.
> but I agree that not considering self.in_atomic_block in the check
against settings_dict["AUTOCOMMIT"] is way too naive to determine the
connection is unusable or obsolete.
Not sure I understand that correctly: do you think the patch makes sense,
or is still to naive?
--
Ticket URL: <https://code.djangoproject.com/ticket/30448#comment:2>
* owner: nobody => Daniel Hahler
* status: new => assigned
* has_patch: 0 => 1
* needs_tests: 0 => 1
Comment:
[https://github.com/django/django/pull/11769 PR]
--
Ticket URL: <https://code.djangoproject.com/ticket/30448#comment:3>