From 0570f4ade9135a2d340009d2091c97dfc81a2e60 Mon Sep 17 00:00:00 2001 From: Manuel Giffels Date: Thu, 15 Feb 2024 13:45:19 +0100 Subject: [PATCH] feat(schema): allow Compute4PUNCH backend options (#445) --- AUTHORS.md | 1 + reana_commons/api_client.py | 17 +++++++++++++- .../reana_job_controller.json | 9 ++++++++ reana_commons/serial.py | 22 ++++++++++++++++++- .../schemas/reana_analysis_schema.json | 18 ++++++++++++++- 5 files changed, 64 insertions(+), 3 deletions(-) diff --git a/AUTHORS.md b/AUTHORS.md index 373cd589..ac0a2949 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -16,6 +16,7 @@ The list of contributors in alphabetical order: - [Jan Okraska](https://orcid.org/0000-0002-1416-3244) - [Kenyi Hurtado-Anampa](https://orcid.org/0000-0002-9779-3566) - [Leticia Wanderley](https://orcid.org/0000-0003-4649-6630) +- [Manuel Giffels](https://orcid.org/0000-0003-0193-3032) - [Marco Donadoni](https://orcid.org/0000-0003-2922-5505) - [Marco Vidal](https://orcid.org/0000-0002-9363-4971) - [Matthew Feickert](https://orcid.org/0000-0003-4124-7862) diff --git a/reana_commons/api_client.py b/reana_commons/api_client.py index 36986c69..7e342a43 100644 --- a/reana_commons/api_client.py +++ b/reana_commons/api_client.py @@ -87,7 +87,7 @@ def _get_spec(self, spec_file): class JobControllerAPIClient(BaseAPIClient): """REANA-Job-Controller http client class.""" - def submit( + def submit( # noqa: C901 self, workflow_uuid="", image="", @@ -108,6 +108,9 @@ def submit( slurm_partition="", slurm_time="", kubernetes_job_timeout: Optional[int] = None, + c4p_cpu_cores="", + c4p_memory_limit="", + c4p_additional_requirements="", ): """Submit a job to RJC API. @@ -132,6 +135,9 @@ def submit( :param slurm_partition: Partition of a Slurm job. :param slurm_time: Maximum timelimit of a Slurm job. :param kubernetes_job_timeout: Timeout for the job in seconds. + :param c4p_cpu_cores: Amount of CPU cores requested to process C4P job + :param c4p_memory_limit: Amount of memory requested to process C4P job + :param c4p_additional_requirements: Additional requirements requested to process C4P job like GPU, etc. :return: Returns a dict with the ``job_id``. """ job_spec = { @@ -181,6 +187,15 @@ def submit( if slurm_time: job_spec["slurm_time"] = slurm_time + if c4p_cpu_cores: + job_spec["c4p_cpu_cores"] = c4p_cpu_cores + + if c4p_memory_limit: + job_spec["c4p_memory_limit"] = c4p_memory_limit + + if c4p_additional_requirements: + job_spec["c4p_additional_requirements"] = c4p_additional_requirements + try: response, http_response = self._client.jobs.create_job( job=job_spec diff --git a/reana_commons/openapi_specifications/reana_job_controller.json b/reana_commons/openapi_specifications/reana_job_controller.json index a4842434..2cc25255 100644 --- a/reana_commons/openapi_specifications/reana_job_controller.json +++ b/reana_commons/openapi_specifications/reana_job_controller.json @@ -39,6 +39,15 @@ }, "JobRequest": { "properties": { + "c4p_additional_requirements": { + "type": "string" + }, + "c4p_cpu_cores": { + "type": "string" + }, + "c4p_memory_limit": { + "type": "string" + }, "cmd": { "default": "", "type": "string" diff --git a/reana_commons/serial.py b/reana_commons/serial.py index ace49556..b5205992 100644 --- a/reana_commons/serial.py +++ b/reana_commons/serial.py @@ -50,7 +50,12 @@ "compute_backend": { "$id": "#/properties/steps/properties/compute_backend", "type": "string", - "enum": ["kubernetes", "htcondorcern", "slurmcern"], + "enum": [ + "kubernetes", + "htcondorcern", + "slurmcern", + "compute4punch", + ], }, "kerberos": { "$id": "#/properties/steps/properties/kerberos", @@ -98,6 +103,21 @@ "type": "string", "default": "", }, + "c4p_cpu_cores": { + "$id": "#/properties/steps/properties/c4p_cpu_cores", + "type": "string", + "default": "", + }, + "c4p_memory_limit": { + "$id": "#/properties/steps/properties/c4p_memory_limit", + "type": "string", + "default": "", + }, + "c4p_additional_requirements": { + "$id": "#/properties/steps/properties/c4p_additional_requirements", + "type": "string", + "default": "", + }, "commands": { "$id": "#/properties/steps/properties/commands", "type": "array", diff --git a/reana_commons/validation/schemas/reana_analysis_schema.json b/reana_commons/validation/schemas/reana_analysis_schema.json index 1a3bc422..692659ef 100644 --- a/reana_commons/validation/schemas/reana_analysis_schema.json +++ b/reana_commons/validation/schemas/reana_analysis_schema.json @@ -247,7 +247,8 @@ "enum": [ "kubernetes", "htcondorcern", - "slurmcern" + "slurmcern", + "compute4punch" ], "title": "Compute backend" }, @@ -297,6 +298,21 @@ "type": "boolean", "title": "VOMS proxy", "description": "Whether to use a VOMS proxy for the step. This would require you to upload a valid VOMS proxy as a REANA secret." + }, + "c4p_cpu_cores": { + "type": "string", + "title": "C4P CPU Cores", + "description": "Number of CPU cores requested from Compute4PUNCH for running the task." + }, + "c4p_memory_limit": { + "type": "string", + "title": "C4P Memory Limit", + "description": "Amount of memory requested from Compute4PUNCH for running the task." + }, + "c4p_additional_requirements": { + "type": "string", + "title": "C4P Additional Requirements", + "description": "Additional HTCondor requirements like RequestGPUs for running the task." } }, "required": [