From 2992798c5b29bb65b212527ce11ac3a7c2caed46 Mon Sep 17 00:00:00 2001 From: jasquat <2487833+jasquat@users.noreply.github.com> Date: Thu, 30 May 2024 14:15:40 -0400 Subject: [PATCH] reference-cache-integrity-fix-2 (#1645) * delete from process caller table explicitly before removing from reference cache to hopefully avoid integrity errors * check if reference cache id list has items to avoid unnecessary db calls --------- Co-authored-by: jasquat Co-authored-by: Kevin Burnett <18027+burnettk@users.noreply.github.com> --- .../services/process_caller_service.py | 15 ++++++++------- .../services/spec_file_service.py | 4 ++++ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/services/process_caller_service.py b/spiffworkflow-backend/src/spiffworkflow_backend/services/process_caller_service.py index 4a50d9d49..e9bd97708 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/services/process_caller_service.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/services/process_caller_service.py @@ -20,13 +20,14 @@ class ProcessCallerService: @staticmethod def clear_cache_for_process_ids(reference_cache_ids: list[int]) -> None: - # query-invoked autoflush happens here - ProcessCallerRelationshipModel.query.filter( - or_( - ProcessCallerRelationshipModel.called_reference_cache_process_id.in_(reference_cache_ids), - ProcessCallerRelationshipModel.calling_reference_cache_process_id.in_(reference_cache_ids), - ) - ).delete() + if len(reference_cache_ids) > 0: + # query-invoked autoflush happens here + ProcessCallerRelationshipModel.query.filter( + or_( + ProcessCallerRelationshipModel.called_reference_cache_process_id.in_(reference_cache_ids), + ProcessCallerRelationshipModel.calling_reference_cache_process_id.in_(reference_cache_ids), + ) + ).delete() @staticmethod def add_caller(calling_process_identifier: str, called_process_identifiers: list[str]) -> None: diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/services/spec_file_service.py b/spiffworkflow-backend/src/spiffworkflow_backend/services/spec_file_service.py index 7d61b5e80..60e251500 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/services/spec_file_service.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/services/spec_file_service.py @@ -276,6 +276,10 @@ class SpecFileService(FileSystemService): reference_cache_ids = [] for record in records: reference_cache_ids.append(record.id) + + ProcessCallerService.clear_cache_for_process_ids(reference_cache_ids) + + for record in records: db.session.delete(record) @staticmethod