diff --git a/VERSION b/VERSION index 9edf2a44f4b6ac160efe826837410277ca311b80..a7c00da34f2c7bd7186111bcdebb53af008cd94c 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -4.1.7 +4.1.8 diff --git a/autosubmit/autosubmit.py b/autosubmit/autosubmit.py index 4e7e8a1066220cb8608d2f87a8ebce8b04a1666b..d54ef43eb7344753335c03f1af39f48ef30676ba 100644 --- a/autosubmit/autosubmit.py +++ b/autosubmit/autosubmit.py @@ -853,8 +853,8 @@ class Autosubmit: expids = [x.strip() for x in expids] for expid in expids: as_conf = AutosubmitConfig(expid, BasicConfig, YAMLParserFactory()) - as_conf.reload(force_load=True) as_conf.set_last_as_command(args.command) + as_conf.reload(force_load=True) if len(as_conf.experiment_data) == 0: if args.command not in ["expid", "upgrade"]: diff --git a/autosubmit/job/job.py b/autosubmit/job/job.py index bad576df257f0f7696f6546510c84029b7fc6b76..5e4d1dc2706fcd39f73bc72f318b4cc578343af4 100644 --- a/autosubmit/job/job.py +++ b/autosubmit/job/job.py @@ -1871,7 +1871,7 @@ class Job(object): self.check_warnings = as_conf.jobs_data[self.section].get("CHECK_WARNINGS", False) self.shape = as_conf.jobs_data[self.section].get("SHAPE", "") self.script = as_conf.jobs_data[self.section].get("SCRIPT", "") - self.x11 = str(as_conf.jobs_data[self.section].get("X11", False)).lower() + self.x11 = False if str(as_conf.jobs_data[self.section].get("X11", False)).lower() == "false" else True if self.checkpoint: # To activate placeholder sustitution per in the template parameters["AS_CHECKPOINT"] = self.checkpoint parameters['JOBNAME'] = self.name diff --git a/autosubmit/job/job_dict.py b/autosubmit/job/job_dict.py index d47847fdbde498324f061ebb6e02e20df8de1029..2e3722bacfaf0c75070e7c9e81caf42ebcf8f6e5 100644 --- a/autosubmit/job/job_dict.py +++ b/autosubmit/job/job_dict.py @@ -151,7 +151,7 @@ class DicJobs: if splits == "auto" and running != "chunk": raise AutosubmitCritical("SPLITS=auto is only allowed for running=chunk") - else: + elif splits != "auto": splits = int(splits) frequency = int(parameters[section].get("FREQUENCY", 1)) if running == 'once': diff --git a/autosubmit/platforms/ecplatform.py b/autosubmit/platforms/ecplatform.py index 44beb9ea69856265eaef28e5f535b366a1c3fc81..5fb9914aa889f46bc540f7e0fada8d7c2e4bcbea 100644 --- a/autosubmit/platforms/ecplatform.py +++ b/autosubmit/platforms/ecplatform.py @@ -174,8 +174,7 @@ class EcPlatform(ParamikoPlatform): as_conf is None or str(as_conf.platforms_data.get(self.name, {}).get('DISABLE_RECOVERY_THREADS', "false")).lower() == "false"): self.log_retrieval_process_active = True - - if as_conf.experiment_data["ASMISC"].get("COMMAND","").lower() == "run": + if as_conf and as_conf.misc_data.get("AS_COMMAND","").lower() == "run": self.recover_job_logs() def restore_connection(self,as_conf): @@ -213,7 +212,7 @@ class EcPlatform(ParamikoPlatform): as_conf is None or str(as_conf.platforms_data.get(self.name, {}).get('DISABLE_RECOVERY_THREADS', "false")).lower() == "false"): self.log_retrieval_process_active = True - if as_conf.experiment_data["ASMISC"].get("COMMAND", "").lower() == "run": + if as_conf and as_conf.misc_data.get("AS_COMMAND", "").lower() == "run": self.recover_job_logs() return "OK" else: diff --git a/autosubmit/platforms/headers/slurm_header.py b/autosubmit/platforms/headers/slurm_header.py index ce590465a0788fd78d984890712da0e60565f37b..a99b3997f7bcbb5c02c4877189cd828953d4fff3 100644 --- a/autosubmit/platforms/headers/slurm_header.py +++ b/autosubmit/platforms/headers/slurm_header.py @@ -116,6 +116,7 @@ class SlurmHeader(object): if job.parameters['CURRENT_PROJ'] != '': return "SBATCH -A {0}".format(job.parameters['CURRENT_PROJ']) return "" + def get_exclusive_directive(self, job, het=-1): """ Returns account directive for the specified job @@ -380,7 +381,7 @@ class SlurmHeader(object): header = header.replace("%WALLCLOCK%", job.wallclock) header = header.replace("%JOBNAME%", job.name) - if job.x11 == "true": + if job.x11: header = header.replace( '%X11%', "SBATCH --x11=batch") else: @@ -421,6 +422,7 @@ class SlurmHeader(object): # #%QUEUE_DIRECTIVE% #%PARTITION_DIRECTIVE% +#%EXCLUSIVE_DIRECTIVE% #%ACCOUNT_DIRECTIVE% #%MEMORY_DIRECTIVE% #%THREADS_PER_TASK_DIRECTIVE% @@ -445,6 +447,7 @@ class SlurmHeader(object): # #%QUEUE_DIRECTIVE% #%PARTITION_DIRECTIVE% +#%EXCLUSIVE_DIRECTIVE% #%ACCOUNT_DIRECTIVE% #%MEMORY_DIRECTIVE% #%MEMORY_PER_TASK_DIRECTIVE% diff --git a/autosubmit/platforms/locplatform.py b/autosubmit/platforms/locplatform.py index 39ba5659e40c0c798fd228c441a4dff0de7721d9..0af2d65cd0cae22eba32fbb6f21d5889ca86c310 100644 --- a/autosubmit/platforms/locplatform.py +++ b/autosubmit/platforms/locplatform.py @@ -116,7 +116,7 @@ class LocalPlatform(ParamikoPlatform): if not self.log_retrieval_process_active and ( as_conf is None or str(as_conf.platforms_data.get(self.name, {}).get('DISABLE_RECOVERY_THREADS',"false")).lower() == "false"): self.log_retrieval_process_active = True - if as_conf and as_conf.experiment_data["ASMISC"].get("COMMAND","").lower() == "run": + if as_conf and as_conf.misc_data.get("AS_COMMAND","").lower() == "run": self.recover_job_logs() diff --git a/autosubmit/platforms/paramiko_platform.py b/autosubmit/platforms/paramiko_platform.py index 7a49482c3eb13778372b2b0b54dae26a5a50c57f..7dda872dbe58ec80f347fe12d78d6aaa17f0a905 100644 --- a/autosubmit/platforms/paramiko_platform.py +++ b/autosubmit/platforms/paramiko_platform.py @@ -304,9 +304,9 @@ class ParamikoPlatform(Platform): self._ftpChannel = paramiko.SFTPClient.from_transport(self.transport,window_size=pow(4, 12) ,max_packet_size=pow(4, 12) ) self._ftpChannel.get_channel().settimeout(120) self.connected = True - if not self.log_retrieval_process_active and as_conf and str(as_conf.platforms_data.get(self.name, {}).get('DISABLE_RECOVERY_THREADS', "false")).lower() != "false": + if not self.log_retrieval_process_active and (as_conf is None or str(as_conf.platforms_data.get(self.name, {}).get('DISABLE_RECOVERY_THREADS', "false")).lower() == "false"): self.log_retrieval_process_active = True - if as_conf.misc_data["ASMISC"].get("COMMAND", "").lower() == "run": + if as_conf and as_conf.misc_data.get("AS_COMMAND", "").lower() == "run": self.recover_job_logs() except SSHException: raise @@ -934,10 +934,10 @@ class ParamikoPlatform(Platform): pass - def exec_command(self, command, bufsize=-1, timeout=None, get_pty=False,retries=3, x11=False): + def exec_command(self, command, bufsize=-1, timeout=30, get_pty=False,retries=3, x11=False): """ Execute a command on the SSH server. A new `.Channel` is opened and - the requested command is executed. The command's input and output + the requested command is execed. The command's input and output streams are returned as Python ``file``-like objects representing stdin, stdout, and stderr. @@ -958,8 +958,7 @@ class ParamikoPlatform(Platform): """ while retries > 0: try: - chan = self.transport.open_session() - if x11 == "true": + if x11: display = os.getenv('DISPLAY') if display is None or not display: display = "localhost:0" @@ -968,7 +967,7 @@ class ParamikoPlatform(Platform): chan.request_x11(single_connection=False,handler=self.x11_handler) else: chan = self.transport.open_session() - if x11 == "true": + if x11: if "timeout" in command: timeout_command = command.split("timeout ")[1].split(" ")[0] if timeout_command == 0: @@ -997,7 +996,7 @@ class ParamikoPlatform(Platform): retries = retries - 1 if retries <= 0: return False , False, False - def exec_command_x11(self, command, bufsize=-1, timeout=None, get_pty=False,retries=3, x11=False): + def exec_command_x11(self, command, bufsize=-1, timeout=0, get_pty=False,retries=3, x11=False): session = self.transport.open_session() session.request_x11(handler=self.x11_handler) session.exec_command(command + " ; sleep infinity") @@ -1064,7 +1063,7 @@ class ParamikoPlatform(Platform): stderr_readlines.append( stderr.channel.recv_stderr(len(c.in_stderr_buffer))) got_chunk = True - if x11 == "true": + if x11: if len(stderr_readlines) > 0: aux_stderr.extend(stderr_readlines) for stderr_line in stderr_readlines: @@ -1314,7 +1313,7 @@ class ParamikoPlatform(Platform): if hasattr(self.header, 'get_threads_per_task'): header = header.replace( '%THREADS_PER_TASK_DIRECTIVE%', self.header.get_threads_per_task(job)) - if job.x11 == "true": + if job.x11: header = header.replace( '%X11%', "SBATCH --x11=batch") else: @@ -1326,9 +1325,9 @@ class ParamikoPlatform(Platform): if hasattr(self.header, 'get_custom_directives'): header = header.replace( '%CUSTOM_DIRECTIVES%', self.header.get_custom_directives(job)) - if hasattr(self.header, 'get_exclusivity'): + if hasattr(self.header, 'get_exclusive_directive'): header = header.replace( - '%EXCLUSIVITY_DIRECTIVE%', self.header.get_exclusivity(job)) + '%EXCLUSIVE_DIRECTIVE%', self.header.get_exclusive_directive(job)) if hasattr(self.header, 'get_account_directive'): header = header.replace( '%ACCOUNT_DIRECTIVE%', self.header.get_account_directive(job)) diff --git a/autosubmit/platforms/sgeplatform.py b/autosubmit/platforms/sgeplatform.py index e1c166c6941511a7bc6bcd863cf2f1316adda475..9c5e813f1c96f5c6fcc21257ef630c6d70f82d31 100644 --- a/autosubmit/platforms/sgeplatform.py +++ b/autosubmit/platforms/sgeplatform.py @@ -126,7 +126,7 @@ class SgePlatform(ParamikoPlatform): as_conf is None or str(as_conf.platforms_data.get(self.name, {}).get('DISABLE_RECOVERY_THREADS', "false")).lower() == "false"): self.log_retrieval_process_active = True - if as_conf.experiment_data["ASMISC"].get("COMMAND","").lower() == "run": + if as_conf and as_conf.misc_data.get("AS_COMMAND","").lower() == "run": self.recover_job_logs() def restore_connection(self,as_conf): """ diff --git a/autosubmit/platforms/slurmplatform.py b/autosubmit/platforms/slurmplatform.py index 4ba8248d93d151c02fe839b5d3772b0c7a0172b7..970ee69166f8767eae0302f44c93c553b030dd58 100644 --- a/autosubmit/platforms/slurmplatform.py +++ b/autosubmit/platforms/slurmplatform.py @@ -544,7 +544,7 @@ class SlurmPlatform(ParamikoPlatform): if outputlines.find("failed") != -1: raise AutosubmitCritical( "Submission failed. Command Failed", 7014) - if x11 == "true": + if x11: return int(outputlines.splitlines()[0]) else: jobs_id = [] @@ -570,7 +570,7 @@ class SlurmPlatform(ParamikoPlatform): else: x11 = job.x11 - if x11 == "true": + if x11: return export + self.get_submit_cmd_x11(job.x11_options.strip(""), job_script.strip(""), job) else: try: diff --git a/requeriments.txt b/requeriments.txt index dfabf5637a36bae650a0418514492f311821ed8b..d93b5fe67523ab7cc6f8c50bdb776cf3c9984574 100644 --- a/requeriments.txt +++ b/requeriments.txt @@ -21,7 +21,7 @@ matplotlib<=3.8.3 numpy<2 ruamel.yaml==0.17.21 rocrate==0.* -autosubmitconfigparser==1.0.66 +autosubmitconfigparser==1.0.67 pathlib configparser pytest diff --git a/setup.py b/setup.py index c9c266c88a98bb6c323c789fd676daee1bbae057..7e83757fa1d7f22d83a1b9a6b871e38d26986d64 100644 --- a/setup.py +++ b/setup.py @@ -62,7 +62,7 @@ setup( 'numpy<2', 'ruamel.yaml==0.17.21', 'rocrate==0.*', - 'autosubmitconfigparser==1.0.66', + 'autosubmitconfigparser==1.0.67', 'configparser', 'pathlib', 'setproctitle'