Skip to content

Commit

Permalink
Fix atomic transaction not routing to the the correct DB (#324)
Browse files Browse the repository at this point in the history
* Fix atomic transaction not routing to the the correct DB

* Added test case for atomic transaction to ensure its using the correct db

* simplify the test

* lint
  • Loading branch information
nofalx committed Jun 22, 2022
1 parent 16a18d9 commit e927770
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 1 deletion.
2 changes: 1 addition & 1 deletion django_celery_results/managers.py
Expand Up @@ -87,7 +87,7 @@ def get_all_expired(self, expires):

def delete_expired(self, expires):
"""Delete all expired results."""
with transaction.atomic():
with transaction.atomic(using=self.db):
raw_delete(queryset=self.get_all_expired(expires))


Expand Down
29 changes: 29 additions & 0 deletions t/unit/test_models.py
Expand Up @@ -209,3 +209,32 @@ class TransactionError(Exception):
raise TransactionError()
except TransactionError:
pass


@pytest.mark.usefixtures('depends_on_current_app')
class test_ModelsWithoutDefaultDB(TransactionTestCase):
"""
This class to ensure all operations are done on the
same db we use and dont leak accidentally into another
db. we dont include the default db in databases as by
default an incorrect behavior would route there and
would not be detectable.
The tests will fail with the below error incase we
try to interact from a db other than the one we have
specified.
`AssertionError: Database connections to 'default' are
not allowed in this test`
"""

non_default_test_db = 'secondary'
databases = [non_default_test_db]

def test_operations_with_atomic_transactions(self):
TaskResult.objects.db_manager(
self.non_default_test_db
).delete_expired(expires=10)
GroupResult.objects.db_manager(
self.non_default_test_db
).delete_expired(expires=10)

0 comments on commit e927770

Please sign in to comment.