From edd92e024fc151b5e9bb071b982701e9bce79cfe Mon Sep 17 00:00:00 2001 From: Sam Gamble Date: Thu, 28 Mar 2024 15:58:09 +0000 Subject: [PATCH] Revert "Fixes for task Cancellation Handling (#1004)" This reverts commit fdfc22657fea997cde2f33ddda53056e68378d8f. --- .../distributed_tasks.py | 2 +- src/model_execution_worker/utils.py | 2 +- src/server/oasisapi/analyses/models.py | 5 +-- src/server/oasisapi/analyses/v1_api/tasks.py | 44 +++++++++---------- src/server/oasisapi/analyses/v2_api/tasks.py | 4 +- 5 files changed, 25 insertions(+), 32 deletions(-) diff --git a/src/model_execution_worker/distributed_tasks.py b/src/model_execution_worker/distributed_tasks.py index b5624c263..9c9012c2d 100644 --- a/src/model_execution_worker/distributed_tasks.py +++ b/src/model_execution_worker/distributed_tasks.py @@ -693,7 +693,7 @@ def write_input_files(self, params, run_data_uuid=None, analysis_id=None, initia # clear out user-data, # these files should not be sorted in the generated inputs tar if params['user_data_dir'] is not None: - shutil.rmtree(params['user_data_dir'], ignore_errors=True) + shutil.rmtree(params['user_data_dir']) return { 'lookup_error_location': filestore.put(os.path.join(params['target_dir'], 'keys-errors.csv')), diff --git a/src/model_execution_worker/utils.py b/src/model_execution_worker/utils.py index fadefa673..3afac88d5 100644 --- a/src/model_execution_worker/utils.py +++ b/src/model_execution_worker/utils.py @@ -104,7 +104,7 @@ def __enter__(self): def __exit__(self, exc_type, exc_value, traceback): if not self.persist and os.path.isdir(self.name): - shutil.rmtree(self.name, ignore_errors=True) + shutil.rmtree(self.name) def get_oasislmf_config_path(settings, model_id=None): diff --git a/src/server/oasisapi/analyses/models.py b/src/server/oasisapi/analyses/models.py index 0089aed2d..89d6fc4a8 100644 --- a/src/server/oasisapi/analyses/models.py +++ b/src/server/oasisapi/analyses/models.py @@ -575,9 +575,8 @@ def generate_and_run(self, initiator): self.save() def cancel_subtasks(self): - if self.run_mode == self.run_mode_choices.V2: - cancel_tasks = self.v2_cancel_subtasks_signature - task_id = cancel_tasks.apply_async(args=[self.pk], priority=1).id + cancel_tasks = self.v2_cancel_subtasks_signature + task_id = cancel_tasks.apply_async(args=[self.pk], priority=1).id def generate_inputs(self, initiator, run_mode_override=None): valid_choices = [ diff --git a/src/server/oasisapi/analyses/v1_api/tasks.py b/src/server/oasisapi/analyses/v1_api/tasks.py index 8b9220176..37ceb3f08 100644 --- a/src/server/oasisapi/analyses/v1_api/tasks.py +++ b/src/server/oasisapi/analyses/v1_api/tasks.py @@ -456,19 +456,17 @@ def record_run_analysis_failure(analysis_pk, initiator_pk, traceback): analysis = Analysis.objects.get(pk=analysis_pk) analysis.status = Analysis.status_choices.RUN_ERROR analysis.task_finished = timezone.now() + analysis.save() - if traceback: - random_filename = '{}.txt'.format(uuid.uuid4().hex) - with TemporaryFile() as tmp_file: - tmp_file.write(traceback.encode('utf-8')) - analysis.run_traceback_file = RelatedFile.objects.create( - file=File(tmp_file, name=random_filename), - filename=f'analysis_{analysis_pk}_run_traceback.txt', - content_type='text/plain', - creator=get_user_model().objects.get(pk=initiator_pk), - ) - else: - logging.error('Could not extract traceback') + random_filename = '{}.txt'.format(uuid.uuid4().hex) + with TemporaryFile() as tmp_file: + tmp_file.write(traceback.encode('utf-8')) + analysis.run_traceback_file = RelatedFile.objects.create( + file=File(tmp_file, name=random_filename), + filename=f'analysis_{analysis_pk}_run_traceback.txt', + content_type='text/plain', + creator=get_user_model().objects.get(pk=initiator_pk), + ) # remove the current command log file if analysis.run_log_file: @@ -490,19 +488,17 @@ def record_generate_input_failure(analysis_pk, initiator_pk, traceback): analysis = Analysis.objects.get(pk=analysis_pk) analysis.status = Analysis.status_choices.INPUTS_GENERATION_ERROR analysis.task_finished = timezone.now() + analysis.save() - if traceback: - random_filename = '{}.txt'.format(uuid.uuid4().hex) - with TemporaryFile() as tmp_file: - tmp_file.write(traceback.encode('utf-8')) - analysis.input_generation_traceback_file = RelatedFile.objects.create( - file=File(tmp_file, name=random_filename), - filename=f'analysis_{analysis_pk}_generation_traceback.txt', - content_type='text/plain', - creator=get_user_model().objects.get(pk=initiator_pk), - ) - else: - logging.error('Could not extract traceback') + random_filename = '{}.txt'.format(uuid.uuid4().hex) + with TemporaryFile() as tmp_file: + tmp_file.write(traceback.encode('utf-8')) + analysis.input_generation_traceback_file = RelatedFile.objects.create( + file=File(tmp_file, name=random_filename), + filename=f'analysis_{analysis_pk}_generation_traceback.txt', + content_type='text/plain', + creator=get_user_model().objects.get(pk=initiator_pk), + ) analysis.save() except Exception as e: diff --git a/src/server/oasisapi/analyses/v2_api/tasks.py b/src/server/oasisapi/analyses/v2_api/tasks.py index 03c8c57fe..016174134 100644 --- a/src/server/oasisapi/analyses/v2_api/tasks.py +++ b/src/server/oasisapi/analyses/v2_api/tasks.py @@ -684,9 +684,7 @@ def handle_task_failure( from ..models import Analysis analysis = Analysis.objects.get(pk=analysis_id) - if analysis.status not in [analysis.status_choices.INPUTS_GENERATION_CANCELLED, - analysis.status_choices.RUN_CANCELLED]: - analysis.status = failure_status + analysis.status = failure_status analysis.task_finished = timezone.now() random_filename = '{}.txt'.format(uuid.uuid4().hex)