From f23ed600b3a23a33c890ac7a02adc7b313de7ee9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20Gim=C3=A9nez=20de=20Castro?= Date: Thu, 24 Oct 2024 08:28:52 +0200 Subject: [PATCH] cherry-pick 2d07a51c from mandres for scratch_project_dir --- VERSION | 2 +- autosubmit/autosubmit.py | 2 +- autosubmit/job/job.py | 1 + autosubmit/platforms/ecplatform.py | 8 ++++---- autosubmit/platforms/headers/pjm_header.py | 8 ++++---- autosubmit/platforms/headers/slurm_header.py | 6 ++++-- autosubmit/platforms/lsfplatform.py | 4 ++-- autosubmit/platforms/paramiko_platform.py | 2 +- autosubmit/platforms/paramiko_submitter.py | 4 +++- autosubmit/platforms/pbsplatform.py | 4 ++-- autosubmit/platforms/pjmplatform.py | 3 ++- autosubmit/platforms/platform.py | 3 ++- autosubmit/platforms/psplatform.py | 20 +++++++++++++++++++- autosubmit/platforms/sgeplatform.py | 4 ++-- autosubmit/platforms/slurmplatform.py | 2 +- 15 files changed, 49 insertions(+), 24 deletions(-) diff --git a/VERSION b/VERSION index 6e0567827..37ad48598 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.15.19 \ No newline at end of file +3.15.19-scratch_dir_patch diff --git a/autosubmit/autosubmit.py b/autosubmit/autosubmit.py index bcb237535..49e68d0d8 100644 --- a/autosubmit/autosubmit.py +++ b/autosubmit/autosubmit.py @@ -2145,7 +2145,7 @@ class Autosubmit: platform.host, platform.name) else: platform_issues += "\n[{0}] has configuration issues.\n Check that the connection is passwd-less.(ssh {1}@{4})\n Check the parameters that build the root_path are correct:{{scratch_dir/project/user}} = {{{3}/{2}/{1}}}".format( - platform.name, platform.user, platform.project, platform.scratch, platform.host) + platform.name, platform.user, platform.project_dir, platform.scratch, platform.host) issues += platform_issues # Checks if bashrc is provinding output that could mess with Autosubmit remote pooling, if so, warns the user but continues as Autosubmit should be able to strip the output platform.get_bashrc_output() diff --git a/autosubmit/job/job.py b/autosubmit/job/job.py index 1011dbb0b..179f40148 100644 --- a/autosubmit/job/job.py +++ b/autosubmit/job/job.py @@ -1179,6 +1179,7 @@ class Job(object): parameters['CURRENT_HYPERTHREADING'] = job_platform.hyperthreading parameters['CURRENT_TYPE'] = job_platform.type parameters['CURRENT_SCRATCH_DIR'] = job_platform.scratch + parameters['CURRENT_PROJ_DIR'] = job_platform.project_dir parameters['CURRENT_ROOTDIR'] = job_platform.root_dir parameters['CURRENT_LOGDIR'] = job_platform.get_files_path() parameters['ROOTDIR'] = os.path.join( diff --git a/autosubmit/platforms/ecplatform.py b/autosubmit/platforms/ecplatform.py index 5fa756879..a30903439 100644 --- a/autosubmit/platforms/ecplatform.py +++ b/autosubmit/platforms/ecplatform.py @@ -80,7 +80,7 @@ class EcPlatform(ParamikoPlatform): """ Updates commands for platforms """ - self.root_dir = os.path.join(self.scratch, self.project, self.user, self.expid) + self.root_dir = os.path.join(self.scratch, self.project_dir, self.user, self.expid) self.remote_log_dir = os.path.join(self.root_dir, "LOG_" + self.expid) self.cancel_cmd = "ecaccess-job-delete" self._checkjob_cmd = "ecaccess-job-list " @@ -92,11 +92,11 @@ class EcPlatform(ParamikoPlatform): self.put_cmd = "ecaccess-file-put" self.get_cmd = "ecaccess-file-get" self.del_cmd = "ecaccess-file-delete" - self.mkdir_cmd = ("ecaccess-file-mkdir " + self.host + ":" + self.scratch + "/" + self.project + "/" + + self.mkdir_cmd = ("ecaccess-file-mkdir " + self.host + ":" + self.scratch + "/" + self.project_dir + "/" + self.user + "/" + self.expid + "; " + "ecaccess-file-mkdir " + self.host + ":" + self.remote_log_dir) - self.check_remote_permissions_cmd = "ecaccess-file-mkdir " + self.host+":"+os.path.join(self.scratch,self.project,self.user,"_permission_checker_azxbyc") - self.check_remote_permissions_remove_cmd = "ecaccess-file-rmdir " + self.host+":"+os.path.join(self.scratch,self.project,self.user,"_permission_checker_azxbyc") + self.check_remote_permissions_cmd = "ecaccess-file-mkdir " + os.path.join(self.scratch,self.project_dir,self.user,"_permission_checker_azxbyc") + self.check_remote_permissions_remove_cmd = "ecaccess-file-rmdir " + os.path.join(self.scratch,self.project_dir,self.user,"_permission_checker_azxbyc") def get_checkhost_cmd(self): return self._checkhost_cmd diff --git a/autosubmit/platforms/headers/pjm_header.py b/autosubmit/platforms/headers/pjm_header.py index c37ec4e6e..cccc2c23f 100644 --- a/autosubmit/platforms/headers/pjm_header.py +++ b/autosubmit/platforms/headers/pjm_header.py @@ -179,8 +179,8 @@ class PJMHeader(object): #%SHAPE_DIRECTIVE% #%NODES_DIRECTIVE% -#PJM -o %CURRENT_SCRATCH_DIR%/%CURRENT_PROJ%/%CURRENT_USER%/%EXPID%/LOG_%EXPID%/%OUT_LOG_DIRECTIVE% -#PJM -e %CURRENT_SCRATCH_DIR%/%CURRENT_PROJ%/%CURRENT_USER%/%EXPID%/LOG_%EXPID%/%ERR_LOG_DIRECTIVE% +#PJM -o %CURRENT_SCRATCH_DIR%/%CURRENT_PROJ_DIR%/%CURRENT_USER%/%EXPID%/LOG_%EXPID%/%OUT_LOG_DIRECTIVE% +#PJM -e %CURRENT_SCRATCH_DIR%/%CURRENT_PROJ_DIR%/%CURRENT_USER%/%EXPID%/LOG_%EXPID%/%ERR_LOG_DIRECTIVE% #%X11% # ############################################################################### @@ -202,8 +202,8 @@ class PJMHeader(object): #%MEMORY_DIRECTIVE% #%MEMORY_PER_TASK_DIRECTIVE% #%SHAPE_DIRECTIVE% -#PJM -o %CURRENT_SCRATCH_DIR%/%CURRENT_PROJ%/%CURRENT_USER%/%EXPID%/LOG_%EXPID%/%OUT_LOG_DIRECTIVE% -#PJM -e %CURRENT_SCRATCH_DIR%/%CURRENT_PROJ%/%CURRENT_USER%/%EXPID%/LOG_%EXPID%/%ERR_LOG_DIRECTIVE% +#PJM -o %CURRENT_SCRATCH_DIR%/%CURRENT_PROJ_DIR%/%CURRENT_USER%/%DEFAULT.EXPID%/LOG_%DEFAULT.EXPID%/%OUT_LOG_DIRECTIVE% +#PJM -e %CURRENT_SCRATCH_DIR%/%CURRENT_PROJ_DIR%/%CURRENT_USER%/%DEFAULT.EXPID%/LOG_%DEFAULT.EXPID%/%ERR_LOG_DIRECTIVE% %CUSTOM_DIRECTIVES% # ############################################################################### diff --git a/autosubmit/platforms/headers/slurm_header.py b/autosubmit/platforms/headers/slurm_header.py index 80e3d6a71..863bd92b6 100644 --- a/autosubmit/platforms/headers/slurm_header.py +++ b/autosubmit/platforms/headers/slurm_header.py @@ -167,6 +167,8 @@ class SlurmHeader(object): #SBATCH -J %JOBNAME% #SBATCH --output=%CURRENT_SCRATCH_DIR%/%CURRENT_PROJ%/%CURRENT_USER%/%EXPID%/LOG_%EXPID%/%OUT_LOG_DIRECTIVE% #SBATCH --error=%CURRENT_SCRATCH_DIR%/%CURRENT_PROJ%/%CURRENT_USER%/%EXPID%/LOG_%EXPID%/%ERR_LOG_DIRECTIVE% +#SBATCH --output=%CURRENT_SCRATCH_DIR%/%CURRENT_PROJ_DIR%/%CURRENT_USER%/%DEFAULT.EXPID%/LOG_%DEFAULT.EXPID%/%OUT_LOG_DIRECTIVE% +#SBATCH --error=%CURRENT_SCRATCH_DIR%/%CURRENT_PROJ_DIR%/%CURRENT_USER%/%DEFAULT.EXPID%/LOG_%DEFAULT.EXPID%/%ERR_LOG_DIRECTIVE% %CUSTOM_DIRECTIVES% #%X11% # @@ -188,8 +190,8 @@ class SlurmHeader(object): #%TASKS_PER_NODE_DIRECTIVE% #SBATCH -t %WALLCLOCK%:00 #SBATCH -J %JOBNAME% -#SBATCH --output=%CURRENT_SCRATCH_DIR%/%CURRENT_PROJ%/%CURRENT_USER%/%EXPID%/LOG_%EXPID%/%OUT_LOG_DIRECTIVE% -#SBATCH --error=%CURRENT_SCRATCH_DIR%/%CURRENT_PROJ%/%CURRENT_USER%/%EXPID%/LOG_%EXPID%/%ERR_LOG_DIRECTIVE% +#SBATCH --output=%CURRENT_SCRATCH_DIR%/%CURRENT_PROJ_DIR%/%CURRENT_USER%/%DEFAULT.EXPID%/LOG_%DEFAULT.EXPID%/%OUT_LOG_DIRECTIVE% +#SBATCH --error=%CURRENT_SCRATCH_DIR%/%CURRENT_PROJ_DIR%/%CURRENT_USER%/%DEFAULT.EXPID%/LOG_%DEFAULT.EXPID%/%ERR_LOG_DIRECTIVE% %CUSTOM_DIRECTIVES% #%X11% # diff --git a/autosubmit/platforms/lsfplatform.py b/autosubmit/platforms/lsfplatform.py index 4ba8f8c64..7fa55f9d6 100644 --- a/autosubmit/platforms/lsfplatform.py +++ b/autosubmit/platforms/lsfplatform.py @@ -48,7 +48,7 @@ class LsfPlatform(ParamikoPlatform): """ Updates commands for platforms """ - self.root_dir = os.path.join(self.scratch, self.project, self.user, self.expid) + self.root_dir = os.path.join(self.scratch, self.project_dir, self.user, self.expid) self.remote_log_dir = os.path.join(self.root_dir, "LOG_" + self.expid) self.cancel_cmd = "bkill" self._checkjob_cmd = "bjobs " @@ -138,4 +138,4 @@ class LsfPlatform(ParamikoPlatform): # :return: True # :rtype: bool # """ - # self.connected = True \ No newline at end of file + # self.connected = True diff --git a/autosubmit/platforms/paramiko_platform.py b/autosubmit/platforms/paramiko_platform.py index 58ddf64bc..47107205f 100644 --- a/autosubmit/platforms/paramiko_platform.py +++ b/autosubmit/platforms/paramiko_platform.py @@ -1271,7 +1271,7 @@ class ParamikoPlatform(Platform): def check_remote_permissions(self): try: - path = os.path.join(self.scratch, self.project, self.user, "permission_checker_azxbyc") + path = os.path.join(self.scratch, self.project_dir, self.user, "permission_checker_azxbyc") try: self._ftpChannel.rmdir(path) except: diff --git a/autosubmit/platforms/paramiko_submitter.py b/autosubmit/platforms/paramiko_submitter.py index 0ad03d50b..f4217b60e 100644 --- a/autosubmit/platforms/paramiko_submitter.py +++ b/autosubmit/platforms/paramiko_submitter.py @@ -181,7 +181,9 @@ class ParamikoSubmitter(Submitter): section, 'EXCLUSIVITY', '').lower() remote_platform.user = parser.get_option(section, 'USER', None) remote_platform.scratch = parser.get_option( - section, 'SCRATCH_DIR', None) + section, 'SCRATCH_DIR', "") + remote_platform.project_dir = parser.get_option( + section, 'SCRATCH_PROJECT_DIR', remote_platform.project) remote_platform.temp_dir = parser.get_option( section, 'TEMP_DIR', None) remote_platform._default_queue = parser.get_option( diff --git a/autosubmit/platforms/pbsplatform.py b/autosubmit/platforms/pbsplatform.py index 089856395..4004b4681 100644 --- a/autosubmit/platforms/pbsplatform.py +++ b/autosubmit/platforms/pbsplatform.py @@ -63,7 +63,7 @@ class PBSPlatform(ParamikoPlatform): """ Updates commands for platforms """ - self.root_dir = os.path.join(self.scratch, self.project, self.user, self.expid) + self.root_dir = os.path.join(self.scratch, self.project_dir, self.user, self.expid) self.remote_log_dir = os.path.join(self.root_dir, "LOG_" + self.expid) self.cancel_cmd = "ssh " + self.host + " qdel" self._checkhost_cmd = "ssh " + self.host + " echo 1" @@ -129,4 +129,4 @@ class PBSPlatform(ParamikoPlatform): # :return: True # :rtype: bool # """ - # self.connected = True \ No newline at end of file + # self.connected = True diff --git a/autosubmit/platforms/pjmplatform.py b/autosubmit/platforms/pjmplatform.py index 34865e8a9..bcb0980c1 100644 --- a/autosubmit/platforms/pjmplatform.py +++ b/autosubmit/platforms/pjmplatform.py @@ -243,7 +243,7 @@ class PJMPlatform(ParamikoPlatform): Updates commands for platforms """ self.root_dir = os.path.join( - self.scratch, self.project, self.user, self.expid) + self.scratch, self.project_dir, self.user, self.expid) self.remote_log_dir = os.path.join(self.root_dir, "LOG_" + self.expid) self.cancel_cmd = "pjdel " self._checkhost_cmd = "echo 1" @@ -514,3 +514,4 @@ class PJMPlatform(ParamikoPlatform): file_exist = False # won't exist retries = 999 # no more retries return file_exist + diff --git a/autosubmit/platforms/platform.py b/autosubmit/platforms/platform.py index e8f9dd723..f70b9cc60 100644 --- a/autosubmit/platforms/platform.py +++ b/autosubmit/platforms/platform.py @@ -37,6 +37,7 @@ class Platform(object): self.exclusivity = '' self.type = '' self.scratch = '' + self.project_dir = '' self.temp_dir = '' self.root_dir = '' self.service = None @@ -489,4 +490,4 @@ class Platform(object): """ Sends a Submit file Script, execute it in the platform and retrieves the Jobs_ID of all jobs at once. """ - raise NotImplementedError \ No newline at end of file + raise NotImplementedError diff --git a/autosubmit/platforms/psplatform.py b/autosubmit/platforms/psplatform.py index e2c3ede88..72e152302 100644 --- a/autosubmit/platforms/psplatform.py +++ b/autosubmit/platforms/psplatform.py @@ -46,13 +46,15 @@ class PsPlatform(ParamikoPlatform): """ Updates commands for platforms """ - self.root_dir = os.path.join(self.scratch, self.project, self.user, self.expid) + self.root_dir = os.path.join(self.scratch, self.project_dir, self.user, self.expid) self.remote_log_dir = os.path.join(self.root_dir, "LOG_" + self.expid) self.cancel_cmd = "kill -SIGINT" self._checkhost_cmd = "echo 1" self.put_cmd = "scp" self.get_cmd = "scp" self.mkdir_cmd = "mkdir -p " + self.remote_log_dir + self.remove_checker = "rm -rf " + os.path.join(self.scratch, self.project_dir,self.user,"ps_permission_checker_azxbyc") + self.mkdir_checker = "mkdir -p " + os.path.join(self.scratch, self.project_dir,self.user,"ps_permission_checker_azxbyc") def get_checkhost_cmd(self): return self._checkhost_cmd @@ -85,3 +87,19 @@ class PsPlatform(ParamikoPlatform): def get_checkjob_cmd(self, job_id): return self.get_pscall(job_id) + + def check_Alljobs(self, job_list, as_conf, retries=5): + for job,prev_status in job_list: + self.check_job(job) + def check_remote_permissions(self): + try: + try: + self.send_command(self.remove_checker) + except Exception as e: + pass + self.send_command(self.mkdir_checker) + pass + self.send_command(self.remove_checker) + return True + except Exception as e: + return False diff --git a/autosubmit/platforms/sgeplatform.py b/autosubmit/platforms/sgeplatform.py index f1b1c2bb1..8e8e43fb7 100644 --- a/autosubmit/platforms/sgeplatform.py +++ b/autosubmit/platforms/sgeplatform.py @@ -49,7 +49,7 @@ class SgePlatform(ParamikoPlatform): """ Updates commands for platforms """ - self.root_dir = os.path.join(self.scratch, self.project, self.user, self.expid) + self.root_dir = os.path.join(self.scratch, self.project_dir, self.user, self.expid) self.remote_log_dir = os.path.join(self.root_dir, "LOG_" + self.expid) self.cancel_cmd = "qdel" self._checkhost_cmd = "echo 1" @@ -113,4 +113,4 @@ class SgePlatform(ParamikoPlatform): :return: True :rtype: bool """ - self.connected = True \ No newline at end of file + self.connected = True diff --git a/autosubmit/platforms/slurmplatform.py b/autosubmit/platforms/slurmplatform.py index ca4ae4e52..9258fdb2d 100644 --- a/autosubmit/platforms/slurmplatform.py +++ b/autosubmit/platforms/slurmplatform.py @@ -108,7 +108,7 @@ class SlurmPlatform(ParamikoPlatform): Updates commands for platforms """ self.root_dir = os.path.join( - self.scratch, self.project, self.user, self.expid) + self.scratch, self.project_dir, self.user, self.expid) self.remote_log_dir = os.path.join(self.root_dir, "LOG_" + self.expid) self.cancel_cmd = "scancel" self._checkhost_cmd = "echo 1" -- GitLab