Schema editors leak transaction state on exception
|Reported by:||koniiiik||Owned by:||nobody|
|Has patch:||yes||Needs documentation:||no|
|Needs tests:||no||Patch needs improvement:||no|
When a schema editor is used as a context manager and an uncaught exception is raised within its block, BaseDatabaseSchemaEditor's __exit__ method doesn't call atomic.__exit__, which leaves the transaction opened when entering the block open.
I'm going to open a pull request shortly with a simple patch which does fix things for me, but I'm not sure about its correctness and I have no idea how to test this. An alternative approach might be to store an instance of Atomic as an attribute in BaseDatabaseSchemaEditor and call its __enter__ and __exit__ instead of creating separate instances; I have no idea whether that makes any difference or not.
Change History (6)
comment:1 Changed 3 years ago by aaugustin
- Needs documentation unset
- Needs tests unset
- Patch needs improvement unset
comment:3 Changed 3 years ago by timo
- Has patch set
- Triage Stage changed from Unreviewed to Accepted
comment:5 Changed 3 years ago by timo
- Component changed from Database layer (models, ORM) to Migrations