From 56ef6a4e434d82d8cfb9916bcfa84a0219bc2e03 Mon Sep 17 00:00:00 2001 From: Marco Donadoni Date: Fri, 26 Jan 2024 10:56:30 +0100 Subject: [PATCH] fix(progress): correctly handle running and stopped jobs (#258) Closes reanahub/reana-workflow-controller#546 --- AUTHORS.rst | 1 + reana_workflow_engine_yadage/config.py | 4 ++++ reana_workflow_engine_yadage/externalbackend.py | 17 ++++++++++------- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/AUTHORS.rst b/AUTHORS.rst index 2be7a8e..9436e8b 100644 --- a/AUTHORS.rst +++ b/AUTHORS.rst @@ -12,6 +12,7 @@ The list of contributors in alphabetical order: - `Dinos Kousidis `_ - `Jan Okraska `_ - `Lukas Heinrich `_ +- `Marco Donadoni `_ - `Marco Vidal `_ - `Rokas Maciulaitis `_ - `Sinclert PĂ©rez `_ diff --git a/reana_workflow_engine_yadage/config.py b/reana_workflow_engine_yadage/config.py index c7f4685..99c2c9c 100644 --- a/reana_workflow_engine_yadage/config.py +++ b/reana_workflow_engine_yadage/config.py @@ -55,3 +55,7 @@ class JobStatus(str, Enum): failed = "failed" stopped = "stopped" queued = "queued" + + +JOB_TERMINAL_STATUSES = [JobStatus.finished, JobStatus.failed, JobStatus.stopped] +"""Statuses that a job can be in at the end of its execution.""" diff --git a/reana_workflow_engine_yadage/externalbackend.py b/reana_workflow_engine_yadage/externalbackend.py index f68f2e2..a0a44e5 100644 --- a/reana_workflow_engine_yadage/externalbackend.py +++ b/reana_workflow_engine_yadage/externalbackend.py @@ -14,7 +14,13 @@ from packtivity.syncbackends import build_job, finalize_inputs, packconfig, publish from reana_commons.api_client import JobControllerAPIClient as RJC_API_Client -from .config import LOGGING_MODULE, MOUNT_CVMFS, JobStatus, WORKFLOW_KERBEROS +from .config import ( + JOB_TERMINAL_STATUSES, + LOGGING_MODULE, + MOUNT_CVMFS, + JobStatus, + WORKFLOW_KERBEROS, +) log = logging.getLogger(LOGGING_MODULE) @@ -156,11 +162,8 @@ def _refresh_job_status(self, job_id: str) -> None: self.jobs_statuses[job_id] = self._get_job_status_from_controller(job_id) def _should_refresh_job_status(self, job_id: str) -> bool: - if job_id in self.jobs_statuses: - status = self.jobs_statuses[job_id] - return status == JobStatus.started - else: - return True + status = self.jobs_statuses.get(job_id) + return status not in JOB_TERMINAL_STATUSES def _get_state(self, resultproxy: ReanaExternalProxy) -> str: """Get the packtivity state.""" @@ -171,7 +174,7 @@ def _get_state(self, resultproxy: ReanaExternalProxy) -> str: def ready(self, resultproxy: ReanaExternalProxy) -> bool: """Check if a packtivity is finished.""" - return self._get_state(resultproxy) != JobStatus.started + return self._get_state(resultproxy) in JOB_TERMINAL_STATUSES def successful(self, resultproxy: ReanaExternalProxy) -> bool: """Check if the packtivity was successful."""