Files
mayan-edms/mayan/apps/file_metadata/tasks.py
Roberto Rosario a71db0b908 Add locking to the file metadata task
Signed-off-by: Roberto Rosario <roberto.rosario@mayan-edms.com>
2019-12-08 02:59:39 -04:00

40 lines
1.2 KiB
Python

from __future__ import unicode_literals
import logging
from django.apps import apps
from mayan.apps.lock_manager.exceptions import LockError
from mayan.apps.lock_manager.runtime import locking_backend
from mayan.celery import app
from .literals import LOCK_EXPIRE
from .classes import FileMetadataDriver
logger = logging.getLogger(__name__)
@app.task(ignore_result=True)
def task_process_document_version(document_version_id):
DocumentVersion = apps.get_model(
app_label='documents', model_name='DocumentVersion'
)
document_version = DocumentVersion.objects.get(pk=document_version_id)
lock_id = 'task_process_document_version-%d' % document_version_id
try:
logger.debug('trying to acquire lock: %s', lock_id)
# Acquire lock to avoid processing the same document version more
# than once concurrently
lock = locking_backend.acquire_lock(name=lock_id, timeout=LOCK_EXPIRE)
logger.debug('acquired lock: %s', lock_id)
except LockError:
logger.debug('unable to obtain lock: %s' % lock_id)
else:
FileMetadataDriver.process_document_version(
document_version=document_version
)
lock.release()