diff --git a/VERSION b/VERSION index 6e0567827e382facfdb35d7a97c80f1cad723bce..37ad48598c8971cc3289533592755ce4b3144d46 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 bcb23753599c696916418480bd22cfa0968e1e52..49e68d0d8f2ae4bbab9e37276158bc81544cdf1c 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 1011dbb0bff51b14b05b7c7f498ca59c1bacbc0d..179f40148d5d13ad19e841ec9ab3cdde321bb145 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 5fa75687917ac1e2b2a5bdc71e1f8819966aaa6c..a30903439c2163bc26861c6a1ecc0a9fc5a72e07 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 c37ec4e6edeea8bef0978d184d9a65c54c23377a..cccc2c23ff4c95dc6a1afc0d96cde14c619a25e8 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 80e3d6a71964bed00209d51543bf4084d1222936..863bd92b6b16b92005286e9b8c9d2e153e67c8f1 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 4ba8f8c64a3105639a58d3467f5221aa42014c55..7fa55f9d62936e2cf60de9018d3d7aa9d88e1f13 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 58ddf64bcdbb16e9937f36d1216f171ba7c94e4d..47107205f5a936ebb7ebf4ff554d5678758afdf5 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 0ad03d50beeade734db8de4ff3da16b4db970627..f4217b60e20195033d8f64aeb0fcfb2b7448caa6 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 0898563953f466dc14a5154d461c4f5f2148016b..4004b4681d5f91aa23521b24cd362016df9e8dea 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 34865e8a92973263354ab95e4346d4cc39baf7be..bcb0980c11930d5d79acaed1c5f072d2e9f7c872 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 e8f9dd723a8556ee9f2c692d88d7e1c717e342bc..f70b9cc60146183143419e68dfc907d23844eaf7 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 e2c3ede88475a482995ce7b13fe9a1ce8aa46e5f..72e15230244ce304f9e1d57c1680bec72205453d 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 f1b1c2bb10978ecf50402a96b00fd4aa67e4d8d6..8e8e43fb78a6e2ee23a62e0a49309078ddcf5507 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 ca4ae4e52bf569a287806e2e4d45c5d64093eed0..9258fdb2df560739ea3fda91ce75345d96e5e376 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"