Opened 2 years ago

Last modified 2 years ago

#23353 new Bug

TransactionManagmentError isn't helpful for tracking down cause

Reported by: Malcolm Box Owned by: nobody
Component: Database layer (models, ORM) Version: master
Severity: Normal Keywords:
Cc: Triage Stage: Accepted
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no


The error: "TransactionManagementError: An error occurred in the current transaction. You can't execute queries until the end of the 'atomic' block." thrown from django/db/backends/", line 372, in validate_no_broken_transaction doesn't provide enough information to help track down the problem.

The exception is thrown if self.needs_rollback is True, but the underlying reason that self.needs_rollback has been set True has been lost, since it could have happened a long time previously.

Transactions should keep track of why needs_rollback has been set, and use that to provide a more helpful error.

Background: I'm seeing this error being thrown when a task is run on a Celery queue, but not when run manually. Since it's via Celery, dropping into the debugger is impossible, and thus I'm back to trying to dump useful debug info.

Change History (1)

comment:1 Changed 2 years ago by Aymeric Augustin

Needs documentation: unset
Needs tests: unset
Patch needs improvement: unset
Triage Stage: UnreviewedAccepted

Accepting the general idea, but I'm not sure how that would work in practice.

Note: See TracTickets for help on using tickets.
Back to Top