diff --git a/mayan/apps/documents/tasks.py b/mayan/apps/documents/tasks.py index cba01bd98e..bda74695ee 100644 --- a/mayan/apps/documents/tasks.py +++ b/mayan/apps/documents/tasks.py @@ -85,9 +85,17 @@ def task_update_page_count(self, version_id): @app.task(bind=True, default_retry_delay=UPLOAD_NEW_VERSION_RETRY_DELAY, ignore_result=True) def task_upload_new_version(self, document_id, shared_uploaded_file_id, user_id, comment=None): - document = Document.objects.get(pk=document_id) + try: + document = Document.objects.get(pk=document_id) + except OperationalError as exception: + logger.warning('Operational error during attempt to retrieve document: %s; %s. Retrying.', document_id, exception) + raise self.retry(exc=exception) - shared_file = SharedUploadedFile.objects.get(pk=shared_uploaded_file_id) + try: + shared_file = SharedUploadedFile.objects.get(pk=shared_uploaded_file_id) + except OperationalError as exception: + logger.warning('Operational error during attempt to retrieve shared file: %s; %s. Retrying.', shared_uploaded_file_id, exception) + raise self.retry(exc=exception) if user_id: user = User.objects.get(pk=user_id) @@ -103,12 +111,17 @@ def task_upload_new_version(self, document_id, shared_uploaded_file_id, user_id, logger.info('Warning during attempt to create new document version for document: %s; %s', document, warning) shared_file.delete() except OperationalError as exception: - # Database is locked for example logger.warning('Operational error during attempt to create new document version for document: %s; %s. Retrying.', document, exception) raise self.retry(exc=exception) except Exception as exception: # This except and else block emulate a finally: logger.error('Unexpected error during attempt to create new document version for document: %s; %s', document, exception) - shared_file.delete() + try: + shared_file.delete() + except OperationalError as exception: + logger.warning('Operational error during attempt to delete shared file: %s; %s. Retrying.', shared_file, exception) else: - shared_file.delete() + try: + shared_file.delete() + except OperationalError as exception: + logger.warning('Operational error during attempt to delete shared file: %s; %s. Retrying.', shared_file, exception) diff --git a/mayan/apps/lock_manager/managers.py b/mayan/apps/lock_manager/managers.py index 9ffaa6f8a3..b5d12fa77e 100644 --- a/mayan/apps/lock_manager/managers.py +++ b/mayan/apps/lock_manager/managers.py @@ -3,7 +3,7 @@ from __future__ import unicode_literals import datetime import logging -from django.db import models, transaction +from django.db import OperationalError, models, transaction from django.db.utils import IntegrityError from django.utils.timezone import now @@ -41,6 +41,8 @@ class LockManager(models.Manager): else: logger.debug('unable to acquire lock: %s', name) raise LockError('Unable to acquire lock') + except OperationalError as exception: + raise LockError('Operational error while trying to acquire lock: %s; %s', name, exception) else: logger.debug('acquired lock: %s', name) return lock