From fb7bca84bd13070f944c061c6649a2eba0e80c4b Mon Sep 17 00:00:00 2001 From: Erwan Rouchet <rouchet@teklia.com> Date: Mon, 26 Feb 2024 14:11:43 +0100 Subject: [PATCH] Delete worker activities when using DestroyWorkerResults with a model version filter --- arkindex/documents/tasks.py | 5 ++-- .../worker_results_delete_all_versions.sql | 6 ++--- ...er_results_delete_configuration_filter.sql | 1 - ...ults_delete_model_version_under_parent.sql | 23 ++++++++++++++++++- ...ker_results_delete_unset_configuration.sql | 6 ++--- 5 files changed, 28 insertions(+), 13 deletions(-) diff --git a/arkindex/documents/tasks.py b/arkindex/documents/tasks.py index 7e0421e4e4..acd269aede 100644 --- a/arkindex/documents/tasks.py +++ b/arkindex/documents/tasks.py @@ -185,6 +185,7 @@ def worker_results_delete( # a worker version but without a worker run.) # We use worker_version_id != None and not worker_version_id__isnull=False, # because isnull would cause an unnecessary LEFT JOIN query. + # No extra filtering is needed on worker activities, since worker versions cannot be null there. else: elements = elements.exclude(worker_version_id=None) classifications = classifications.exclude(worker_version_id=None) @@ -192,7 +193,6 @@ def worker_results_delete( transcription_entities = transcription_entities.exclude(transcription__worker_version_id=None) worker_transcription_entities = worker_transcription_entities.exclude(worker_version_id=None) metadata = metadata.exclude(worker_version_id=None) - worker_activities = worker_activities.exclude(worker_version_id=None) if element_id: # include_children causes a deletion *only* on the element's descendants. @@ -227,8 +227,7 @@ def worker_results_delete( transcription_entities = transcription_entities.filter(transcription__worker_run__model_version_id=model_version_id) worker_transcription_entities = worker_transcription_entities.filter(worker_run__model_version_id=model_version_id) metadata = metadata.filter(worker_run__model_version_id=model_version_id) - # Activities are not linked to a worker run and cannot be filtered by model version - worker_activities = worker_activities.none() + worker_activities = worker_activities.filter(model_version_id=model_version_id) if not worker_run_id and configuration_id is not None: if configuration_id is False: diff --git a/arkindex/sql_validation/worker_results_delete_all_versions.sql b/arkindex/sql_validation/worker_results_delete_all_versions.sql index fdc4a049dd..b0fe051fd7 100644 --- a/arkindex/sql_validation/worker_results_delete_all_versions.sql +++ b/arkindex/sql_validation/worker_results_delete_all_versions.sql @@ -270,9 +270,7 @@ WHERE "documents_metadata"."id" IN DELETE FROM "process_workeractivity" -WHERE "process_workeractivity"."id" IN - (SELECT U0."id" +WHERE "process_workeractivity"."id" IN (SELECT U0."id" FROM "process_workeractivity" U0 INNER JOIN "documents_element" U1 ON (U0."element_id" = U1."id") - WHERE (U1."corpus_id" = '{corpus_id}'::uuid - AND NOT (U0."worker_version_id" IS NULL))) + WHERE U1."corpus_id" = '{corpus_id}'::uuid) diff --git a/arkindex/sql_validation/worker_results_delete_configuration_filter.sql b/arkindex/sql_validation/worker_results_delete_configuration_filter.sql index df6e8fd9da..f1e2ed0627 100644 --- a/arkindex/sql_validation/worker_results_delete_configuration_filter.sql +++ b/arkindex/sql_validation/worker_results_delete_configuration_filter.sql @@ -182,5 +182,4 @@ WHERE "process_workeractivity"."id" IN FROM "process_workeractivity" U0 INNER JOIN "documents_element" U1 ON (U0."element_id" = U1."id") WHERE (U1."corpus_id" = '{corpus_id}'::uuid - AND NOT (U0."worker_version_id" IS NULL) AND U0."configuration_id" = '{configuration_id}'::uuid)) diff --git a/arkindex/sql_validation/worker_results_delete_model_version_under_parent.sql b/arkindex/sql_validation/worker_results_delete_model_version_under_parent.sql index 434cb3402d..cbee78f2f6 100644 --- a/arkindex/sql_validation/worker_results_delete_model_version_under_parent.sql +++ b/arkindex/sql_validation/worker_results_delete_model_version_under_parent.sql @@ -207,6 +207,17 @@ WHERE "documents_metadata"."id" IN AND U4."path" && (ARRAY['{element_id}'::uuid])::uuid[] AND U5."model_version_id" = '{model_version_id}'::uuid)); +DELETE +FROM "process_workeractivity" +WHERE "process_workeractivity"."id" IN + (SELECT U0."id" + FROM "process_workeractivity" U0 + INNER JOIN "documents_element" U1 ON (U0."element_id" = U1."id") + INNER JOIN "documents_elementpath" U3 ON (U1."id" = U3."element_id") + WHERE (U1."corpus_id" = '{corpus_id}'::uuid + AND U3."path" && (ARRAY['{element_id}'::uuid])::uuid[] + AND U0."model_version_id" = '{model_version_id}'::uuid)); + select min(length), max(length) FROM @@ -398,4 +409,14 @@ WHERE "documents_metadata"."id" IN WHERE (U1."corpus_id" = '{corpus_id}'::uuid AND NOT (U0."worker_version_id" IS NULL) AND U0."element_id" = '{element_id}'::uuid - AND U4."model_version_id" = '{model_version_id}'::uuid)) + AND U4."model_version_id" = '{model_version_id}'::uuid)); + +DELETE +FROM "process_workeractivity" +WHERE "process_workeractivity"."id" IN + (SELECT U0."id" + FROM "process_workeractivity" U0 + INNER JOIN "documents_element" U1 ON (U0."element_id" = U1."id") + WHERE (U1."corpus_id" = '{corpus_id}'::uuid + AND U0."element_id" = '{element_id}'::uuid + AND U0."model_version_id" = '{model_version_id}'::uuid)) diff --git a/arkindex/sql_validation/worker_results_delete_unset_configuration.sql b/arkindex/sql_validation/worker_results_delete_unset_configuration.sql index 57b1e6c358..0ec40721d8 100644 --- a/arkindex/sql_validation/worker_results_delete_unset_configuration.sql +++ b/arkindex/sql_validation/worker_results_delete_unset_configuration.sql @@ -213,10 +213,9 @@ WHERE "process_workeractivity"."id" IN (SELECT U0."id" FROM "process_workeractivity" U0 INNER JOIN "documents_element" U1 ON (U0."element_id" = U1."id") - INNER JOIN "documents_elementpath" U4 ON (U1."id" = U4."element_id") + INNER JOIN "documents_elementpath" U3 ON (U1."id" = U3."element_id") WHERE (U1."corpus_id" = '{corpus_id}'::uuid - AND NOT (U0."worker_version_id" IS NULL) - AND U4."path" && (ARRAY['{element_id}'::uuid])::uuid[] + AND U3."path" && (ARRAY['{element_id}'::uuid])::uuid[] AND U0."configuration_id" IS NULL)); select min(length), @@ -419,6 +418,5 @@ WHERE "process_workeractivity"."id" IN FROM "process_workeractivity" U0 INNER JOIN "documents_element" U1 ON (U0."element_id" = U1."id") WHERE (U1."corpus_id" = '{corpus_id}'::uuid - AND NOT (U0."worker_version_id" IS NULL) AND U0."element_id" = '{element_id}'::uuid AND U0."configuration_id" IS NULL)) -- GitLab