From 79a920f9cda1ffba9fe93f73dfb5f86a0e7b3b2d Mon Sep 17 00:00:00 2001
From: Stefano Alberto Russo <stefano.russo@gmail.com>
Date: Thu, 14 Jan 2021 19:41:47 +0100
Subject: [PATCH] Added support for Slurm job options and setting their default
 values in the Computing conf.

---
 .../code/rosetta/core_app/computing_managers.py   | 15 ++++++++-------
 .../management/commands/core_app_populate.py      |  2 +-
 services/webapp/code/rosetta/core_app/models.py   |  8 ++++++++
 .../rosetta/core_app/templates/create_task.html   |  6 +++---
 4 files changed, 20 insertions(+), 11 deletions(-)

diff --git a/services/webapp/code/rosetta/core_app/computing_managers.py b/services/webapp/code/rosetta/core_app/computing_managers.py
index 1ec6012..46bc4d2 100644
--- a/services/webapp/code/rosetta/core_app/computing_managers.py
+++ b/services/webapp/code/rosetta/core_app/computing_managers.py
@@ -314,23 +314,24 @@ class SlurmComputingManager(ComputingManager):
         # Get webapp conn string
         from.utils import get_webapp_conn_string
         webapp_conn_string = get_webapp_conn_string()
+
+        # Initialize sbatch args (force 1 task for now)
+        sbatch_args = '-N1 '
             
         # Get task computing parameters and set sbatch args
-        sbatch_args = ''
         if task.computing_options:
             task_partition = task.computing_options.get('partition', None)
             task_cpus = task.computing_options.get('cpus', None)
             task_memory = task.computing_options.get('memory', None)
 
             # Set sbatch args
-            sbatch_args = ''
             if task_partition:
                 sbatch_args += '-p {} '.format(task_partition)
-            #if task_cpus:
-            #    sbatch_args += '-c {} '.format()
-            #if task_memory:
-            #    sbatch_args += '-m {} '.format()
-        
+            if task_cpus:
+                sbatch_args += '-c {} '.format(task_cpus)
+            if task_memory:
+                sbatch_args += '--mem {} '.format(task_memory)
+
         # Set output and error files
         sbatch_args += ' --output=\$HOME/{}.log --error=\$HOME/{}.log '.format(task.uuid, task.uuid)
 
diff --git a/services/webapp/code/rosetta/core_app/management/commands/core_app_populate.py b/services/webapp/code/rosetta/core_app/management/commands/core_app_populate.py
index d73c0d7..4113ce9 100644
--- a/services/webapp/code/rosetta/core_app/management/commands/core_app_populate.py
+++ b/services/webapp/code/rosetta/core_app/management/commands/core_app_populate.py
@@ -226,7 +226,7 @@ class Command(BaseCommand):
     
             # Create demo slurm sys computing conf
             ComputingSysConf.objects.create(computing = demo_slurm_computing,
-                                            data      = {'master': 'slurmclustermaster-main'})
+                                            data      = {'master': 'slurmclustermaster-main', 'default_partition': 'partition1'})
 
             # Create demo slurm user computing conf
             ComputingUserConf.objects.create(user      = testuser,
diff --git a/services/webapp/code/rosetta/core_app/models.py b/services/webapp/code/rosetta/core_app/models.py
index cb19c07..5bb1791 100644
--- a/services/webapp/code/rosetta/core_app/models.py
+++ b/services/webapp/code/rosetta/core_app/models.py
@@ -211,6 +211,14 @@ class Computing(models.Model):
                 return None
         return param_value
 
+    @property
+    def conf_params(self):
+        class ConfParams():
+            def __init__(self, computing):
+                self.computing = computing
+            def __getitem__(self, key):
+                return self.computing.get_conf_param(key)
+        return ConfParams(self)
 
     @property
     def manager(self):
diff --git a/services/webapp/code/rosetta/core_app/templates/create_task.html b/services/webapp/code/rosetta/core_app/templates/create_task.html
index 71b94c9..c22487a 100644
--- a/services/webapp/code/rosetta/core_app/templates/create_task.html
+++ b/services/webapp/code/rosetta/core_app/templates/create_task.html
@@ -185,9 +185,9 @@
             <td><b>Computing options</b></td>
             <td>
             <table>
-             <tr><td>Partition</td><td><input type="text" name="computing_partition" value="" placeholder="" size="20" /></td></tr>
-             <tr><td>Cpus</td><td><input type="text" name="computing_cpus" value="" placeholder="" size="5" /></td></tr>
-             <tr><td>Memory</td><td><input type="text" name="computing_memory" value="" placeholder="" size="5" /></td></tr>
+             <tr><td>Partition</td><td><input type="text" name="computing_partition" value="{{ data.task_computing.conf_params.default_partition }}" placeholder="" size="20" /></td></tr>
+             <tr><td>Cpus</td><td><input type="text" name="computing_cpus" value="{{ data.task_computing.conf_params.default_cpus }}" placeholder="" size="5" /></td></tr>
+             <tr><td>Memory</td><td><input type="text" name="computing_memory" value="{{ data.task_computing.conf_params.default_memory }}" placeholder="" size="5" /></td></tr>
              </table>
             </td>
            </tr>
-- 
GitLab