diff --git a/docs/releases/2.5.rst b/docs/releases/2.5.rst index bed31b1810..a408cd9cf9 100644 --- a/docs/releases/2.5.rst +++ b/docs/releases/2.5.rst @@ -76,7 +76,9 @@ Other Changes images of document pages. The settings can be used together or separately depending on how much disk space saving is desired. These settings give control over the trade-off between disk space savings and higher CPU utilization. - +- The trashed document deletion action is now a background task. This + feature results is much faster trashed document deletion and trash + can emptying. Removals -------- diff --git a/mayan/apps/documents/apps.py b/mayan/apps/documents/apps.py index 22f8f36e13..179eea52e8 100644 --- a/mayan/apps/documents/apps.py +++ b/mayan/apps/documents/apps.py @@ -317,6 +317,9 @@ class DocumentsApp(MayanAppConfig): routing_key='documents_periodic', delivery_mode=1 ), Queue('uploads', Exchange('uploads'), routing_key='uploads'), + Queue( + 'documents', Exchange('documents'), routing_key='documents' + ), ) ) @@ -349,6 +352,9 @@ class DocumentsApp(MayanAppConfig): 'documents.tasks.task_scan_duplicates_for': { 'queue': 'uploads' }, + 'documents.tasks.task_delete_document': { + 'queue': 'documents' + }, } ) diff --git a/mayan/apps/documents/queues.py b/mayan/apps/documents/queues.py index 48ba1e4181..a544b20ab0 100644 --- a/mayan/apps/documents/queues.py +++ b/mayan/apps/documents/queues.py @@ -14,6 +14,9 @@ queue_documents_periodic = CeleryQueue( queue_uploads = CeleryQueue( name='uploads', label=_('Uploads') ) +queue_uploads = CeleryQueue( + name='documents', label=_('Documents') +) queue_documents_periodic.add_task_type( name='documents.tasks.task_check_delete_periods', @@ -46,3 +49,7 @@ queue_uploads.add_task_type( name='documents.tasks.task_upload_new_version', label=_('Upload new document version') ) +queue_uploads.add_task_type( + name='documents.tasks.task_delete_document', + label=_('Delete a document') +) diff --git a/mayan/apps/documents/tasks.py b/mayan/apps/documents/tasks.py index 1d9690cb05..cd4c0a17c5 100644 --- a/mayan/apps/documents/tasks.py +++ b/mayan/apps/documents/tasks.py @@ -44,6 +44,18 @@ def task_clear_image_cache(): logger.info('Finished document cache invalidation') +@app.task(ignore_result=True) +def task_delete_document(deleted_document_id): + DeletedDocument = apps.get_model( + app_label='documents', model_name='DeletedDocument' + ) + + logger.debug('Executing') + deleted_document = DeletedDocument.objects.get(pk=deleted_document_id) + deleted_document.delete() + logger.debug('Finshed') + + @app.task(ignore_result=True) def task_delete_stubs(): Document = apps.get_model( diff --git a/mayan/apps/documents/views/document_views.py b/mayan/apps/documents/views/document_views.py index c641b1017b..b7cd65315d 100644 --- a/mayan/apps/documents/views/document_views.py +++ b/mayan/apps/documents/views/document_views.py @@ -43,7 +43,7 @@ from ..permissions import ( permission_empty_trash ) from ..settings import setting_print_size -from ..tasks import task_update_page_count +from ..tasks import task_delete_document, task_update_page_count from ..utils import parse_range logger = logging.getLogger(__name__) @@ -95,7 +95,9 @@ class DeletedDocumentDeleteView(ConfirmView): obj=source_document ) - instance.delete() + task_delete_document.apply_async( + kwargs={'deleted_document_id': instance.pk} + ) def view_action(self): instance = get_object_or_404(DeletedDocument, pk=self.kwargs['pk']) @@ -364,7 +366,9 @@ class EmptyTrashCanView(ConfirmView): def view_action(self): for deleted_document in DeletedDocument.objects.all(): - deleted_document.delete() + task_delete_document.apply_async( + kwargs={'deleted_document_id': deleted_document.pk} + ) messages.success(self.request, _('Trash emptied successfully'))