Files
mayan-edms/mayan/apps/document_indexing/tasks.py

41 lines
1.2 KiB
Python

import logging
from mayan.celery import app
from documents.models import Document
from lock_manager import Lock, LockError
from .api import update_indexes, delete_empty_index_nodes
from .tools import do_rebuild_all_indexes
logger = logging.getLogger(__name__)
RETRY_DELAY = 20 # TODO: convert this into a config option
@app.task(ignore_result=True)
def task_delete_empty_index_nodes():
delete_empty_index_nodes()
@app.task(bind=True, ignore_result=True)
def task_update_indexes(self, document_id):
# TODO: Add concurrent task control
try:
lock = Lock.acquire_lock('document_indexing_task_update_index_document_%d' % document_id)
except LockError as exception:
# This document is being reindexed by another task, retry later
raise self.retry(exc=exception, countdown=RETRY_DELAY)
else:
try:
document = Document.objects.get(pk=document_id)
except Document.DoesNotExist:
# Document was deleted before we could execute, abort about updating
pass
else:
update_indexes(document)
@app.task(ignore_result=True)
def task_do_rebuild_all_indexes():
# TODO: Find a way to rebuild after all pending updates are finished
do_rebuild_all_indexes()