-
-
Notifications
You must be signed in to change notification settings - Fork 799
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
Intermittent database errors in tests after updating to 4.2 #2118
Comments
Sounds likely from the description. Are you able to reduce it, even to an intermittent failure? (pytest? Fixtures there have often shown these kind of errors, but I never dug in to see exactly why, since I don't use it myself.) |
When I get more times to check on this I will try to introduce a bit of debug logs to check what is going on with connections and threads (currently I do not have enough tools). I am using pytest with pytest-xdist/pytest-django to run tests on my project while I still use django-based test-cases because I prefer them to test django. pytest, in that project, is only used for its reporting capabilities which are better than django. Apart from this I belive that the db-cleanup should have been implemented more like in django, using signals and not by putting a direct call to |
I think we could drop Django 4.2 from the release of 5.2, and maybe even earlier. //cc @bigfootjon It would be good to pin down exactly what's happening here. |
In my main project I have two websocket consumers which performs a lot of database-related actions.
With
channels==4.1.0
my unittests with django were proceeding smoothly without any problem (I have already removed any references todatabase_sync_to_async
since this comment, when I switched to async ORM methods).After I updated to
channels==4.2.0
it started randomly (see later) throwing database errors after the async tests are executed:I use a multiprocess testing and I get errors only in the process which is executing consumer-related tests only after those are exeuted, due to how tests are picked up by workers and how the interpreter/host handles threads this error may not occurr.
Hunting down into channels' history I found that in #2101 it was introduced a work-around to prevent
database_sync_to_async
to close old connections by mockingclose_old_connections
calls in the communicator.Shortly after, in #2090 the consumers handle/disconnect got an explicit call to
aclose_old_connections
in their workflow.My doubt is that there is an execution path in which the mock performed in the communicator is not effective against the db-closure in the consumer, but I need to get more evidences ti get what is going on and how to fix it (currently I had 1 day of errors on my development machine and now I no longer get this error locally but only on github.actions).
The text was updated successfully, but these errors were encountered: