From ceec90fbd26023c63c45161f2a0ac1e8f0ec6752 Mon Sep 17 00:00:00 2001 From: Johannes Koester Date: Tue, 27 Aug 2024 18:24:25 +0000 Subject: [PATCH 1/5] fix: quote sbatch logfile in order to avoid problems with whitespaces in wildcard values --- snakemake_executor_plugin_slurm/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/snakemake_executor_plugin_slurm/__init__.py b/snakemake_executor_plugin_slurm/__init__.py index 5b25540c..39ab6b0a 100644 --- a/snakemake_executor_plugin_slurm/__init__.py +++ b/snakemake_executor_plugin_slurm/__init__.py @@ -137,7 +137,7 @@ def run_job(self, job: JobExecutorInterface): f"sbatch " f"--parsable " f"--job-name {self.run_uuid} " - f"--output {slurm_logfile} " + f"--output '{slurm_logfile}' " f"--export=ALL " f"--comment {comment_str}" ) From a0cccb4408672642f6e5b339addb32a1625dc500 Mon Sep 17 00:00:00 2001 From: Johannes Koester Date: Tue, 27 Aug 2024 18:33:03 +0000 Subject: [PATCH 2/5] capture errors in scancel --- snakemake_executor_plugin_slurm/__init__.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/snakemake_executor_plugin_slurm/__init__.py b/snakemake_executor_plugin_slurm/__init__.py index 39ab6b0a..182754b6 100644 --- a/snakemake_executor_plugin_slurm/__init__.py +++ b/snakemake_executor_plugin_slurm/__init__.py @@ -408,6 +408,13 @@ def cancel_jobs(self, active_jobs: List[SubmittedJobInfo]): ) except subprocess.TimeoutExpired: self.logger.warning("Unable to cancel jobs within a minute.") + except subprocess.CalledProcessError as e: + msg = e.stderr.decode().strip() + if msg: + msg = f": {msg}" + raise WorkflowError( + f"Unable to cancel jobs with scancel (exit code {e.returncode}){msg}" + ) async def job_stati(self, command): """Obtain SLURM job status of all submitted jobs with sacct From d48c726e677908e2c50e09906e6b859cad3ff64a Mon Sep 17 00:00:00 2001 From: Johannes Koester Date: Thu, 29 Aug 2024 14:44:23 +0000 Subject: [PATCH 3/5] superfluous decode --- snakemake_executor_plugin_slurm/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/snakemake_executor_plugin_slurm/__init__.py b/snakemake_executor_plugin_slurm/__init__.py index 182754b6..0e9cf5a5 100644 --- a/snakemake_executor_plugin_slurm/__init__.py +++ b/snakemake_executor_plugin_slurm/__init__.py @@ -409,7 +409,7 @@ def cancel_jobs(self, active_jobs: List[SubmittedJobInfo]): except subprocess.TimeoutExpired: self.logger.warning("Unable to cancel jobs within a minute.") except subprocess.CalledProcessError as e: - msg = e.stderr.decode().strip() + msg = e.stderr.strip() if msg: msg = f": {msg}" raise WorkflowError( From 1ede6faeca16d056ab501da38a19f21e6412036b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20K=C3=B6ster?= Date: Fri, 30 Aug 2024 08:33:18 +0200 Subject: [PATCH 4/5] Update __init__.py --- snakemake_executor_plugin_slurm/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/snakemake_executor_plugin_slurm/__init__.py b/snakemake_executor_plugin_slurm/__init__.py index 0e9cf5a5..495ef290 100644 --- a/snakemake_executor_plugin_slurm/__init__.py +++ b/snakemake_executor_plugin_slurm/__init__.py @@ -413,7 +413,8 @@ def cancel_jobs(self, active_jobs: List[SubmittedJobInfo]): if msg: msg = f": {msg}" raise WorkflowError( - f"Unable to cancel jobs with scancel (exit code {e.returncode}){msg}" + "Unable to cancel jobs with scancel " + f"(exit code {e.returncode}){msg}" ) async def job_stati(self, command): From 6f0e3e1d830e3b28628f3992059a16f2dd0ee4f0 Mon Sep 17 00:00:00 2001 From: Christian Meesters Date: Sun, 1 Sep 2024 08:47:15 +0200 Subject: [PATCH 5/5] Update snakemake_executor_plugin_slurm/__init__.py introduced "raise Error from exception" as suggested by coderabbit - while not necessary, it can make future error handling a bit more traceable. Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- snakemake_executor_plugin_slurm/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/snakemake_executor_plugin_slurm/__init__.py b/snakemake_executor_plugin_slurm/__init__.py index 495ef290..d6c89745 100644 --- a/snakemake_executor_plugin_slurm/__init__.py +++ b/snakemake_executor_plugin_slurm/__init__.py @@ -415,7 +415,7 @@ def cancel_jobs(self, active_jobs: List[SubmittedJobInfo]): raise WorkflowError( "Unable to cancel jobs with scancel " f"(exit code {e.returncode}){msg}" - ) + ) from e async def job_stati(self, command): """Obtain SLURM job status of all submitted jobs with sacct