Skip to content

[BUG] Test error when worker amount set to auto #1269

@Lucasboina

Description

@Lucasboina

First at all, thanks for your time and the develop of this project.

I'm workin with pytest-django and postgres.
Sometimes when i start a test session using -n auto, where it starts with 12 workers, the tests raises an error becouse it fails to drop the previous instaciated db's

In my tests, it only happen when the worker amount is set auto.
Not sure if the issue is caused by pytest-xdist, but i belive so becouse when i run only python -m pytest --no-migrations it works just fine.
These are some of the retuns i'm getting:

python -m pytest --no-migrations -n auto
=================================================================================== test session starts ====================================================================================
platform linux -- Python 3.12.7, pytest-8.4.2, pluggy-1.5.0
django: version: 5.2.7, settings: myproject_settings.test (from option)
rootdir: /home/lucas/projects/myproject
configfile: pyproject.toml
testpaths: tests
plugins: xdist-3.8.0, mock-3.15.1, anyio-4.11.0, Faker-33.0.0, snapshot-0.9.0, django-4.9.0, cov-6.2.1
12 workers [3918 items]   
EEEEEEEEEEEEEEEEEEE.EEE..E.......E..EE.....E....E.E..E....E......E..EE....E........E.........................E....E....E...E...E.....E.E...E....E....E..E.E...E.E...EE.....E.....E.. [  4%]
.EE..E....E...EE...E.E.....EEE...E......E..EE.........E.....E.EE.....E....E....EE........E.....E..EE.....E......E...E................E...E.....EEE.E.....E.EE.E....E..E.E..E....E.E. [  9%]
..E.E...E...E.E..E..EEE.E....E.EE..E.E....EE.E.E.E.E.E..E..E..E.E....E..E.E...E....E.E................E.....E...E....EE...E....E..EE.E.E...EE..EE.E.E..E.E.EE..E.E..EE...EE..E.E.... [ 13%]
E.E...E.E....EE....E.E..EE......EE..E.E....E..E.EE....E.........E....E.E...EE..EE...E.E.E...E...E.E.E..E....E...EE.E.E.....E.E..E...E..EE.E.E....E.EE.E..EE.E.E.....EE.E.E...E..E... [ 18%]
E..E...E..EE.....E....E...E.EE......E..EE...E..EE.EE.....E..EEE...EEEE.....E.EEE...EEEE..EEE...EE.EEE......E.EE.E.......EEEE....EE.E....E.E........EEE......EE.E.E...E.EEE.....EEEE. [ 22%]
...EEE.E....EEEE.....E.EEE......EEEE.......E..EEE....E..E.E.E.......E..E.EE..........E..E..E..............E.E.....E..E.E.....EE.E..E.EE..EE....EE..EE......E..E..EE.....E..E.EE..... [ 27%]
..E.EE.E....E.EE.E....E..E.E.E.....E..EE..E.....EEE.E...E.EE..E..EE.E....E..E.....E..E...E.E.E..E.E...EE....E.E....E.E.E.E....EE..EE...E.EE..E...E...EE.E.....E..EEE.......E..EE.E.. [ 32%]
...EEEE.....E.EEE.E.EE....E.E......E..E...E..E.EE.E...E.EE...E..E..EEEE.EEE..E.E.EE....EEE...E....EE.E.E...E.EEE.....EEE...E....EEE...E...E.E...E.....E..E..............EE..E....EE. [ 36%]
E.E....EE.E.E....EEE.E.....E.E.EE..E.E.EE....E...E.EE..E..EEE....E...EEE..E.EE.E....E..EEE.......EEE....E.E...E....EE..E...E.EE....E...EEE..E.E.EE...E..E.E.E..E.EE..E..E...EE..E.E. [ 41%]
.E.EEE.EEE..E..EE.E.E..EE.E.....EE.E.E....E....E...EEE.......EE.EE.......E..EE..E......E..EE.E.E.EE..E.EEE.E...EEEE.....E.....EEE....E..EE.E.EEE.E.EEE..E...EEE....EEE.EE.E.E.EE.E.. [ 45%]
.EE.E..E..EEEE.E.EE.E..E.EE..E...EEE..E..EE..EE...E.E.EE....E..EEE.....EEE...E..EE.......EEE..EEE..E.EE..E.EEE..E..E.EE.EEEE..E...E.EE..EEEE.E..EEEEEEE.....EEEE..EE.E....EE.E.E..E. [ 50%]
.E.E..EE.E...EEEEEEE...E..E.EEEE...EE..E.E..EE...E.E.E.E.E.E..EE.E.E...EE.....E..E..E.E...E..E..E..E.......E..E.E..E....E..E......E...EE.......EE..E.....E..EE...E...E.EE....E...E.. [ 55%]
EE..E....E.E.E..E..E..E.E....E...E.EE....E.E.E.E.E...EE..E....E..E..E......E...E......EE.....EE...E.EEE..E.....EE..E..EEE.E.EE.E..E...EEE.E..EEEE....EE.E.EEEE..E......EEE.E...EEEE. [ 59%]
EE.E.E....EE.....E..E..E........E.EE...E....EE..E......E.EE.E....EEE.E.....EEE..E.EE.EE..E..EE..E..E..E..E.E..E.E.EE....E..EE.E..E...EEE...E....E.E.E.E.EE.E..EE.E..EE..EE.E.EEEE.E. [ 64%]
.E.EEE.E.E.EEE..E.EE...E..E.EEEE.EE.EEEE...E.E.EE..E.E..E..EEEE.....EEE.EE...EEE.EEE..EEE..E.EE.E..E..EEEEEE.EEEE.E.E....EE.E..EEE.E..E.E.E.E..E...EE..EEE......EE.E...E...E.EEEEEE. [ 68%]
..EEEEEEE..EEEE...EEE.E..EEEE..E.E..EE...EE.E....E.....EEE.....E....EE......E..EE.E........E.EE............E...EE............E...E.E..E....E...EE.E...E..E...EE.....E...E.E.E.....E. [ 73%]
EE....E...E.E.E....E...E.E.E...........E....E...E.E.........E...E...E.E.........E......E................E......E.......E..E......E............E.E..E.........E.....EE............... [ 78%]
...E......EE..........E.........E.....EE.......E.......E.....E.E....E......E....E.E.....E.....E....EE......E.......EE.E......E....EE.E......E...EEE.....E....E.EE.......E...E....... [ 82%]
..EE......EE....E......E..E.....E.........EE...E...........E.E.....E.......E....E.E....E.......E.....EE.....E....E.....E.E...E......E...E.....E.E.......E..E....EE...........E.E.... [ 87%]
....E.E.............EE....E.....E...........E...E....E.E......................E...E....................E..EE..........E..............E...E............E.........E.....E.......E..... [ 91%]
..E............E.....E.........E...........E..E.....E.......E.......E..E......E.....E......E...E...E.E...E.E..EE.E.EE.EEE.E.EEE..EE..EEEE..E....EE...E..E...E.E..E...E.E....E....... [ 96%]
E..E......E.......E...E..E...E.......EE...EE......EE....EE........E....E.....E.E...E.E..E.E..EE.EEEE.EEEE..E..EEE.E...E.E.EE..EE...E......                                           [100%]
Plugin: 124523839128928, Hook: pytest_sessionfinish
OSError: cannot send (already closed?)
For more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning
  config.hook.pytest_sessionfinish(
/home/lucas/projects/myproject/.venv/lib/python3.12/site-packages/_pytest/main.py:324: PluggyTeardownRaisedWarning: A plugin raised an exception during an old-style hookwrapper teardown.
ERROR tests/vehicles/test_views.py::TestVehicleSetUpdateView::test_post_404 - django.db.utils.OperationalError: out of shared memory
self = <django.db.backends.utils.CursorWrapper object at 0x790bea824230>
sql = 'CREATE INDEX "index" ON "table" ("id")', params = None
ignored_wrapper_args = (False, {'connection': <DatabaseWrapper vendor='postgresql' alias='default'>, 'cursor': <django.db.backends.utils.CursorWrapper object at 0x790bea824230>})

    def _execute(self, sql, params, *ignored_wrapper_args):
        # Raise a warning during app initialization (stored_app_configs is only
        # ever set during testing).
        if not apps.ready and not apps.stored_app_configs:
            warnings.warn(self.APPS_NOT_READY_WARNING_MSG, category=RuntimeWarning)
        self.db.validate_no_broken_transaction()
        with self.db.wrap_database_errors:
            if params is None:
                # params default might be backend specific.
>               return self.cursor.execute(sql)
                       ^^^^^^^^^^^^^^^^^^^^^^^^
E               django.db.utils.OperationalError: out of shared memory
E               HINT:  You might need to increase max_locks_per_transaction.

.venv/lib/python3.12/site-packages/django/db/backends/utils.py:103: OperationalError

and this is the db state after the test finishes

Image

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions