diff --git a/apps/lock_manager/managers.py b/apps/lock_manager/managers.py index 603a36c575..99145e8c5a 100644 --- a/apps/lock_manager/managers.py +++ b/apps/lock_manager/managers.py @@ -22,6 +22,7 @@ class LockManager(models.Manager): logger.debug('acquired lock: %s' % name) return lock except IntegrityError, msg: + transaction.rollback() logger.debug('IntegrityError: %s', msg) # There is already an existing lock # Check it's expiration date and if expired, reset it diff --git a/apps/ocr/__init__.py b/apps/ocr/__init__.py index 5f160d4fce..c1c280503c 100644 --- a/apps/ocr/__init__.py +++ b/apps/ocr/__init__.py @@ -7,6 +7,7 @@ from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext from django.db.models.signals import post_save, post_syncdb from django.dispatch import receiver +from django.db.utils import DatabaseError from navigation.api import register_links, register_multi_item_links from documents.models import Document, DocumentVersion @@ -64,10 +65,14 @@ register_maintenance_links([all_document_ocr_cleanup], namespace='ocr', title=_( @transaction.commit_on_success def create_default_queue(): - default_queue, created = DocumentQueue.objects.get_or_create(name='default') - if created: - default_queue.label = ugettext(u'Default') - default_queue.save() + try: + default_queue, created = DocumentQueue.objects.get_or_create(name='default') + except DatabaseError: + transaction.rollback() + else: + if created: + default_queue.label = ugettext(u'Default') + default_queue.save() @receiver(post_save, dispatch_uid='document_post_save', sender=DocumentVersion) diff --git a/apps/sources/models.py b/apps/sources/models.py index 6fb3ca3f67..5e32cddb7a 100644 --- a/apps/sources/models.py +++ b/apps/sources/models.py @@ -9,6 +9,7 @@ from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes import generic from django.core.exceptions import ValidationError from django.db import transaction +from django.db.utils import DatabaseError from converter.api import get_available_transformations_choices from converter.literals import DIMENSION_SEPARATOR @@ -93,7 +94,7 @@ class BaseModel(models.Model): document = Document() if document_type: document.document_type = document_type - document.save() + document.save() apply_default_acls(document, user) @@ -119,7 +120,8 @@ class BaseModel(models.Model): new_version = document.new_version(file=file_object, **new_version_data) except Exception: # Don't leave the database in a broken state - document.delete() + # document.delete() + transaction.rollback() raise if filename: