Add locking to the file metadata task
Signed-off-by: Roberto Rosario <roberto.rosario@mayan-edms.com>
This commit is contained in:
@@ -4,8 +4,12 @@ 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__)
|
||||
@@ -19,6 +23,17 @@ def task_process_document_version(document_version_id):
|
||||
|
||||
document_version = DocumentVersion.objects.get(pk=document_version_id)
|
||||
|
||||
FileMetadataDriver.process_document_version(
|
||||
document_version=document_version
|
||||
)
|
||||
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()
|
||||
|
||||
Reference in New Issue
Block a user