|
20 | 20 | from .context import RuntimeContext, getdefault
|
21 | 21 | from .cuda import cuda_version_and_device_count
|
22 | 22 | from .cwlprov.provenance_profile import ProvenanceProfile
|
23 |
| -from .errors import WorkflowException |
| 23 | +from .errors import WorkflowException, WorkflowKillSwitch |
24 | 24 | from .job import JobBase
|
25 | 25 | from .loghandler import _logger
|
26 | 26 | from .mutation import MutationManager
|
@@ -251,6 +251,11 @@ def run_jobs(
|
251 | 251 | WorkflowException,
|
252 | 252 | ): # pylint: disable=try-except-raise
|
253 | 253 | raise
|
| 254 | + except WorkflowKillSwitch as err: |
| 255 | + _logger.error( |
| 256 | + f"Workflow kill switch activated by [job {err.job_id}] " |
| 257 | + f"because on-error={runtime_context.on_error}" |
| 258 | + ) |
254 | 259 | except Exception as err:
|
255 | 260 | logger.exception("Got workflow error")
|
256 | 261 | raise WorkflowException(str(err)) from err
|
@@ -323,6 +328,11 @@ def _runner(
|
323 | 328 | except WorkflowException as err:
|
324 | 329 | _logger.exception(f"Got workflow error: {err}")
|
325 | 330 | self.exceptions.append(err)
|
| 331 | + except WorkflowKillSwitch as err: |
| 332 | + _logger.error( |
| 333 | + f"Workflow kill switch activated by [job {err.job_id}] " |
| 334 | + f"because on-error={runtime_context.on_error}" |
| 335 | + ) |
326 | 336 | except Exception as err: # pylint: disable=broad-except
|
327 | 337 | _logger.exception(f"Got workflow error: {err}")
|
328 | 338 | self.exceptions.append(WorkflowException(str(err)))
|
@@ -457,9 +467,8 @@ def run_jobs(
|
457 | 467 | while self.taskqueue.in_flight > 0:
|
458 | 468 | self.wait_for_next_completion(runtime_context)
|
459 | 469 | self.run_job(None, runtime_context)
|
460 |
| - |
461 |
| - runtime_context.workflow_eval_lock.release() |
462 | 470 | finally:
|
| 471 | + runtime_context.workflow_eval_lock.release() |
463 | 472 | self.taskqueue.drain()
|
464 | 473 | self.taskqueue.join()
|
465 | 474 |
|
|
0 commit comments