Catch operational errors in more critical places.

This commit is contained in:
Roberto Rosario
2015-07-14 02:21:55 -04:00
parent 8d7a9df7e8
commit dbc08afd45
2 changed files with 21 additions and 6 deletions

View File

@@ -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) @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): 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: if user_id:
user = User.objects.get(pk=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) logger.info('Warning during attempt to create new document version for document: %s; %s', document, warning)
shared_file.delete() shared_file.delete()
except OperationalError as exception: 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) logger.warning('Operational error during attempt to create new document version for document: %s; %s. Retrying.', document, exception)
raise self.retry(exc=exception) raise self.retry(exc=exception)
except Exception as exception: except Exception as exception:
# This except and else block emulate a finally: # 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) 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: 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)

View File

@@ -3,7 +3,7 @@ from __future__ import unicode_literals
import datetime import datetime
import logging import logging
from django.db import models, transaction from django.db import OperationalError, models, transaction
from django.db.utils import IntegrityError from django.db.utils import IntegrityError
from django.utils.timezone import now from django.utils.timezone import now
@@ -41,6 +41,8 @@ class LockManager(models.Manager):
else: else:
logger.debug('unable to acquire lock: %s', name) logger.debug('unable to acquire lock: %s', name)
raise LockError('Unable to acquire lock') raise LockError('Unable to acquire lock')
except OperationalError as exception:
raise LockError('Operational error while trying to acquire lock: %s; %s', name, exception)
else: else:
logger.debug('acquired lock: %s', name) logger.debug('acquired lock: %s', name)
return lock return lock