From 7ed6ec74e0a067382f638f8430044af3543a5ae0 Mon Sep 17 00:00:00 2001 From: dbeltran Date: Thu, 22 Apr 2021 13:35:16 +0200 Subject: [PATCH 01/22] Multiple Wrappers first commit --- autosubmit/autosubmit.py | 3 +- autosubmit/config/config_common.py | 80 +++++++++++++++++++----------- autosubmit/job/job_packager.py | 56 +++++++++++++-------- 3 files changed, 87 insertions(+), 52 deletions(-) diff --git a/autosubmit/autosubmit.py b/autosubmit/autosubmit.py index 6a02159db..cdb6ff47b 100644 --- a/autosubmit/autosubmit.py +++ b/autosubmit/autosubmit.py @@ -1226,8 +1226,7 @@ class Autosubmit: if unparsed_two_step_start != "": job_list.parse_two_step_start(unparsed_two_step_start) while job_list.get_active(): - Autosubmit.submit_ready_jobs( - as_conf, job_list, platforms_to_test, packages_persistence, True, only_wrappers, hold=False) + Autosubmit.submit_ready_jobs(as_conf, job_list, platforms_to_test, packages_persistence, True, only_wrappers, hold=False) job_list.update_list(as_conf, False) diff --git a/autosubmit/config/config_common.py b/autosubmit/config/config_common.py index 1525b7821..af5530161 100644 --- a/autosubmit/config/config_common.py +++ b/autosubmit/config/config_common.py @@ -533,8 +533,14 @@ class AutosubmitConfig(object): if not self.is_valid_storage_type(): self.wrong_config["Autosubmit"] += [['storage', "TYPE parameter not found"]] - if self.get_wrapper_type() != 'None': + if self.get_wrapper_type().lower() == 'multi': + list_of_wrappers = self.get_wrapper_multi() # list + for wrapper_section_name in self.get_wrapper_multi(): + self.check_wrapper_conf(wrapper_section_name) + elif self.get_wrapper_type() != 'None': self.check_wrapper_conf() + + if self.get_notifications() == 'true': for mail in self.get_mails_to(): if not self.is_valid_mail_address(mail): @@ -788,20 +794,20 @@ class AutosubmitConfig(object): "FILE_PROJECT_CONF parameter is invalid"]] return False - def check_wrapper_conf(self): - if not self.is_valid_jobs_in_wrapper(): - self.wrong_config["Wrapper"] += [['wrapper', + def check_wrapper_conf(self,wrapper_section_name="wrapper"): + if not self.is_valid_jobs_in_wrapper(wrapper_section_name): + self.wrong_config["Wrapper"] += [[wrapper_section_name, "JOBS_IN_WRAPPER contains non-defined jobs. parameter is invalid"]] - if 'horizontal' in self.get_wrapper_type(): + if 'horizontal' in self.get_wrapper_type(wrapper_section_name): if not self._platforms_parser.check_exists(self.get_platform(), 'PROCESSORS_PER_NODE'): self.wrong_config["Wrapper"] += [ - ['wrapper', "PROCESSORS_PER_NODE no exist in the horizontal-wrapper platform"]] + [wrapper_section_name, "PROCESSORS_PER_NODE no exist in the horizontal-wrapper platform"]] if not self._platforms_parser.check_exists(self.get_platform(), 'MAX_PROCESSORS'): - self.wrong_config["Wrapper"] += [['wrapper', + self.wrong_config["Wrapper"] += [[wrapper_section_name, "MAX_PROCESSORS no exist in the horizontal-wrapper platform"]] - if 'vertical' in self.get_wrapper_type(): + if 'vertical' in self.get_wrapper_type(wrapper_section_name): if not self._platforms_parser.check_exists(self.get_platform(), 'MAX_WALLCLOCK'): - self.wrong_config["Wrapper"] += [['wrapper', + self.wrong_config["Wrapper"] += [[wrapper_section_name, "MAX_WALLCLOCK no exist in the vertical-wrapper platform"]] if "Wrapper" not in self.wrong_config: Log.result('wrappers OK') @@ -1404,86 +1410,100 @@ class AutosubmitConfig(object): else: return False - def get_wrapper_type(self): + def get_wrapper_type(self, wrapper_section_name="wrapper"): """ Returns what kind of wrapper (VERTICAL, MIXED-VERTICAL, HORIZONTAL, HYBRID, NONE) the user has configured in the autosubmit's config :return: wrapper type (or none) :rtype: string """ - return self._conf_parser.get_option('wrapper', 'TYPE', 'None').lower() + return self._conf_parser.get_option(wrapper_section_name, 'TYPE', 'None').lower() - def get_wrapper_policy(self): + def get_wrapper_multi(self): """ - Returns what kind of wrapper (VERTICAL, MIXED-VERTICAL, HORIZONTAL, HYBRID, NONE) the user has configured in the autosubmit's config + return the section name of the wrappers + + :return: wrapper section list + :rtype: string + """ + list_of_wrappers = self._conf_parser.get_option("wrapper", 'WRAPPER_LIST', []) + if "," in list_of_wrappers: + list_of_wrappers = list_of_wrappers.split(',') + else: + list_of_wrappers = [] + return list_of_wrappers + + def get_wrapper_policy(self,wrapper_section_name="wrapper"): + """ + Returns what kind of policy (flexible, strict, mixed ) the user has configured in the autosubmit's config :return: wrapper type (or none) :rtype: string """ - return self._conf_parser.get_option('wrapper', 'POLICY', 'flexible').lower() + return self._conf_parser.get_option(wrapper_section_name, 'POLICY', 'flexible').lower() - def get_wrapper_jobs(self): + def get_wrapper_jobs(self,wrapper_section_name="wrapper"): """ Returns the jobs that should be wrapped, configured in the autosubmit's config :return: expression (or none) :rtype: string """ - return self._conf_parser.get_option('wrapper', 'JOBS_IN_WRAPPER', 'None') + return self._conf_parser.get_option(wrapper_section_name, 'JOBS_IN_WRAPPER', 'None') - def get_wrapper_queue(self): + def get_wrapper_queue(self,wrapper_section_name="wrapper"): """ Returns the wrapper queue if not defined, will be the one of the first job wrapped :return: expression (or none) :rtype: string """ - return self._conf_parser.get_option('wrapper', 'QUEUE', 'None') + return self._conf_parser.get_option(wrapper_section_name, 'QUEUE', 'None') - def get_min_wrapped_jobs(self): + def get_min_wrapped_jobs(self,wrapper_section_name="wrapper"): """ Returns the minim number of jobs that can be wrapped together as configured in autosubmit's config file :return: minim number of jobs (or total jobs) :rtype: int """ - return int(self._conf_parser.get_option('wrapper', 'MIN_WRAPPED', 2)) + return int(self._conf_parser.get_option(wrapper_section_name, 'MIN_WRAPPED', 2)) - def get_max_wrapped_jobs(self): + def get_max_wrapped_jobs(self,wrapper_section_name="wrapper"): """ Returns the maximum number of jobs that can be wrapped together as configured in autosubmit's config file :return: maximum number of jobs (or total jobs) :rtype: int """ - return int(self._conf_parser.get_option('wrapper', 'MAX_WRAPPED', self.get_total_jobs())) + return int(self._conf_parser.get_option(wrapper_section_name, 'MAX_WRAPPED', self.get_total_jobs())) - def get_wrapper_method(self): + def get_wrapper_method(self,wrapper_section_name="wrapper"): """ Returns the method of make the wrapper :return: method :rtype: string """ - return self._conf_parser.get_option('wrapper', 'METHOD', 'ASThread') + return self._conf_parser.get_option(wrapper_section_name, 'METHOD', 'ASThread') - def get_wrapper_check_time(self): + def get_wrapper_check_time(self,wrapper_section_name="wrapper"): """ Returns time to check the status of jobs in the wrapper :return: wrapper check time :rtype: int """ - return int(self._conf_parser.get_option('wrapper', 'CHECK_TIME_WRAPPER', self.get_safetysleeptime())) + return int(self._conf_parser.get_option(wrapper_section_name, 'CHECK_TIME_WRAPPER', self.get_safetysleeptime())) - def get_wrapper_machinefiles(self): + def get_wrapper_machinefiles(self,wrapper_section_name="wrapper"): """ Returns the strategy for creating the machinefiles in wrapper jobs :return: machinefiles function to use :rtype: string """ - return self._conf_parser.get_option('wrapper', 'MACHINEFILES', '') + return self._conf_parser.get_option(wrapper_section_name, 'MACHINEFILES', '') def get_jobs_sections(self): """ @@ -1545,8 +1565,8 @@ class AutosubmitConfig(object): storage_type = self.get_storage_type() return storage_type in ['pkl', 'db'] - def is_valid_jobs_in_wrapper(self): - expression = self.get_wrapper_jobs() + def is_valid_jobs_in_wrapper(self,wrapper_section_name="wrapper"): + expression = self.get_wrapper_jobs(wrapper_section_name="wrapper") if expression != 'None': parser = self._jobs_parser sections = parser.sections() diff --git a/autosubmit/job/job_packager.py b/autosubmit/job/job_packager.py index c97c0b176..e94a76265 100644 --- a/autosubmit/job/job_packager.py +++ b/autosubmit/job/job_packager.py @@ -72,11 +72,22 @@ class JobPackager(object): self.max_jobs = min(self._max_wait_jobs_to_submit, self._max_jobs_to_submit) # These are defined in the [wrapper] section of autosubmit_,conf - self.wrapper_type = self._as_config.get_wrapper_type() - self.wrapper_policy = self._as_config.get_wrapper_policy() - self.wrapper_method = self._as_config.get_wrapper_method().lower() + if self._as_config.get_wrapper_type == "multi": + self.wrapper_type = [] + self.wrapper_policy = [] + self.wrapper_method = [] + for wrapper_section in self._as_config.get_wrapper_multi(): + self.wrapper_type.append(self._as_config.get_wrapper_type()) + self.wrapper_policy.append(self._as_config.get_wrapper_policy()) + self.wrapper_method.append(self._as_config.get_wrapper_method().lower()) + self.jobs_in_wrapper.append(self._as_config.get_wrapper_jobs()) + else: + self.wrapper_type = [self._as_config.get_wrapper_type()] + self.wrapper_policy = [self._as_config.get_wrapper_policy()] + self.wrapper_method = [self._as_config.get_wrapper_method().lower()] + self.jobs_in_wrapper = [ self._as_config.get_wrapper_jobs() ] # True or False - self.jobs_in_wrapper = self._as_config.get_wrapper_jobs() + Log.debug( "Number of jobs available: {0}", self._max_wait_jobs_to_submit) if self.hold: @@ -198,8 +209,7 @@ class JobPackager(object): jobs_to_submit_seq = [ failed_job for failed_job in jobs_to_submit_tmp if failed_job.fail_count > 0] - jobs_to_submit_by_section = self._divide_list_by_section( - jobs_to_submit) + jobs_to_submit_by_section = self._divide_list_by_section(jobs_to_submit) for job in jobs_to_submit_seq: # Failed jobs at least one time job.packed = False @@ -213,9 +223,14 @@ class JobPackager(object): wrapped = False # Only if platform allows wrappers, wrapper type has been correctly defined, and job names for wrappers have been correctly defined # ('None' is a default value) or the correct section is included in the corresponding sections in [wrappers] - if self._platform.allow_wrappers and self.wrapper_type in ['horizontal', 'vertical', 'vertical-mixed', - 'vertical-horizontal', 'horizontal-vertical'] \ - and (self.jobs_in_wrapper == 'None' or section in self.jobs_in_wrapper): + wrapper_defined = False + index = 0 + for wrapper_section in self.jobs_in_wrapper: + if section in wrapper_section: + wrapper_defined = True + break + index=index+1 + if wrapper_defined and self._platform.allow_wrappers and self.wrapper_type[index] in ['horizontal', 'vertical', 'vertical-mixed','vertical-horizontal', 'horizontal-vertical'] : # Trying to find the value in jobs_parser, if not, default to an autosubmit_.conf value (Looks first in [wrapper] section) max_wrapped_jobs = int(self._as_config.jobs_parser.get_option( section, "MAX_WRAPPED", self._as_config.get_max_wrapped_jobs())) @@ -382,18 +397,19 @@ class JobPackager(object): :rtype: Dictionary Key: Section Name, Value: List(Job Object) """ # .jobs_in_wrapper defined in .conf, see constructor. - sections_split = self.jobs_in_wrapper.split() - - jobs_section = dict() + sections_split_by_wrapper = [] + jobs_section_by_wrapper = [] for job in jobs_list: - # This iterator will always return None if there is no '&' defined in the section name - section = next( - (s for s in sections_split if job.section in s and '&' in s), None) - if section is None: - section = job.section - if section not in jobs_section: - jobs_section[section] = list() - jobs_section[section].append(job) + jobs_section = dict() + for sections_split in sections_split_by_wrapper: + # This iterator will always return None if there is no '&' defined in the section name + section = next( + (s for s in sections_split if job.section in s and '&' in s), None) + if section is None: + section = job.section + if section not in jobs_section: + jobs_section[section] = list() + jobs_section[section].append(job) return jobs_section def _build_horizontal_packages(self, section_list, max_wrapped_jobs, section, max_wrapper_job_by_section): -- GitLab From e6d2726bab18a1ef1023110344df5c5596c502a9 Mon Sep 17 00:00:00 2001 From: dbeltran Date: Thu, 22 Apr 2021 14:14:24 +0200 Subject: [PATCH 02/22] Multiple Wrappers, able to create a wrapper --- autosubmit/job/job_packager.py | 56 ++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 27 deletions(-) diff --git a/autosubmit/job/job_packager.py b/autosubmit/job/job_packager.py index e94a76265..246e4e9f2 100644 --- a/autosubmit/job/job_packager.py +++ b/autosubmit/job/job_packager.py @@ -76,16 +76,19 @@ class JobPackager(object): self.wrapper_type = [] self.wrapper_policy = [] self.wrapper_method = [] + self.wrapper_section_names = [] for wrapper_section in self._as_config.get_wrapper_multi(): - self.wrapper_type.append(self._as_config.get_wrapper_type()) - self.wrapper_policy.append(self._as_config.get_wrapper_policy()) - self.wrapper_method.append(self._as_config.get_wrapper_method().lower()) - self.jobs_in_wrapper.append(self._as_config.get_wrapper_jobs()) + self.wrapper_type += [self._as_config.get_wrapper_type()] + self.wrapper_policy += [self._as_config.get_wrapper_policy()] + self.wrapper_method += [self._as_config.get_wrapper_method().lower()] + self.jobs_in_wrapper += [self._as_config.get_wrapper_jobs()] + self.wrapper_section_names += [wrapper_section] else: self.wrapper_type = [self._as_config.get_wrapper_type()] self.wrapper_policy = [self._as_config.get_wrapper_policy()] self.wrapper_method = [self._as_config.get_wrapper_method().lower()] self.jobs_in_wrapper = [ self._as_config.get_wrapper_jobs() ] + self.wrapper_section_names = ["wrapper"] # True or False Log.debug( @@ -144,7 +147,7 @@ class JobPackager(object): """ Returns the list of the built packages to be submitted - :return: List of packages depending on type of package, JobPackageVertical Object for 'vertical-mixed' or 'vertical'. \n + :return: List of packages depending on type of package, JobPackageVertical Object for 'vertical-mixed' or 'vertical'. :rtype: List() of JobPackageVertical """ packages_to_submit = list() @@ -232,8 +235,7 @@ class JobPackager(object): index=index+1 if wrapper_defined and self._platform.allow_wrappers and self.wrapper_type[index] in ['horizontal', 'vertical', 'vertical-mixed','vertical-horizontal', 'horizontal-vertical'] : # Trying to find the value in jobs_parser, if not, default to an autosubmit_.conf value (Looks first in [wrapper] section) - max_wrapped_jobs = int(self._as_config.jobs_parser.get_option( - section, "MAX_WRAPPED", self._as_config.get_max_wrapped_jobs())) + max_wrapped_jobs = int(self._as_config.jobs_parser.get_option(section, "MAX_WRAPPED", self._as_config.get_max_wrapped_jobs(self.wrapper_section_names[index]))) if '&' not in section: if self._as_config.jobs_parser.has_option(section, 'DEPENDENCIES'): dependencies_keys = self._as_config.jobs_parser.get( @@ -241,7 +243,6 @@ class JobPackager(object): else: dependencies_keys = [] max_wrapper_job_by_section[section] = max_wrapped_jobs - else: multiple_sections = section.split('&') dependencies_keys = [] @@ -263,20 +264,20 @@ class JobPackager(object): if number < max_wrapped_jobs: hard_limit_wrapper = number min_wrapped_jobs = min(self._as_config.jobs_parser.get_option( - section, "MIN_WRAPPED", self._as_config.get_min_wrapped_jobs()), hard_limit_wrapper) + section, "MIN_WRAPPED", self._as_config.get_min_wrapped_jobs(self.wrapper_section_names[index])), hard_limit_wrapper) if len(self._jobs_list.jobs_to_run_first) > 0:# Allows to prepare an experiment with TWO_STEP_START and strict policy min_wrapped_jobs = 2 packages_to_submit = [] - if self.wrapper_type in ['vertical', 'vertical-mixed']: + if self.wrapper_type[index] in ['vertical', 'vertical-mixed']: wrapped = True built_packages_tmp = self._build_vertical_packages(jobs_to_submit_by_section[section], max_wrapped_jobs, max_wrapper_job_by_section) - elif self.wrapper_type == 'horizontal': + elif self.wrapper_type[index] == 'horizontal': wrapped = True built_packages_tmp = self._build_horizontal_packages(jobs_to_submit_by_section[section], max_wrapped_jobs, section, max_wrapper_job_by_section) - elif self.wrapper_type in ['vertical-horizontal', 'horizontal-vertical']: + elif self.wrapper_type[index] in ['vertical-horizontal', 'horizontal-vertical']: wrapped = True built_packages_tmp = list() built_packages_tmp.append(self._build_hybrid_package( @@ -297,7 +298,7 @@ class JobPackager(object): if job.fail_count > 0: failed_innerjobs = True break - if failed_innerjobs and str(self.wrapper_policy) == "mixed": + if failed_innerjobs and str(self.wrapper_policy[index]) == "mixed": for job in p.jobs: if job.fail_count == 0: continue @@ -328,12 +329,12 @@ class JobPackager(object): independent_inner_job and parent.status == Status.COMPLETED] if len(tmp) != len(job.parents): deadlock = False - if deadlock and self.wrapper_policy == "strict": + if deadlock and self.wrapper_policy[index] == "strict": Log.debug( "Wrapper policy is set to strict, there is a deadlock so autosubmit will sleep a while") for job in p.jobs: job.packed = False - elif deadlock and self.wrapper_policy == "mixed": + elif deadlock and self.wrapper_policy[index] == "mixed": Log.debug( "Wrapper policy is set to mixed, there is a deadlock") for job in p.jobs: @@ -347,7 +348,7 @@ class JobPackager(object): else: package = JobPackageSimple([job]) packages_to_submit.append(package) - elif deadlock and self.wrapper_policy != "strict" and self.wrapper_policy != "mixed": + elif deadlock and self.wrapper_policy[index] != "strict" and self.wrapper_policy[index] != "mixed": Log.debug( "Wrapper policy is set to flexible and there is a deadlock, As will submit the jobs sequentally") for job in p.jobs: @@ -397,19 +398,20 @@ class JobPackager(object): :rtype: Dictionary Key: Section Name, Value: List(Job Object) """ # .jobs_in_wrapper defined in .conf, see constructor. - sections_split_by_wrapper = [] - jobs_section_by_wrapper = [] + sections_split= [] + for number_of_wrapper_section in range(0 , len(self.jobs_in_wrapper) ): + sections_split += self.jobs_in_wrapper[number_of_wrapper_section].split() + for job in jobs_list: jobs_section = dict() - for sections_split in sections_split_by_wrapper: - # This iterator will always return None if there is no '&' defined in the section name - section = next( - (s for s in sections_split if job.section in s and '&' in s), None) - if section is None: - section = job.section - if section not in jobs_section: - jobs_section[section] = list() - jobs_section[section].append(job) + # This iterator will always return None if there is no '&' defined in the section name + section = next( + (s for s in sections_split if job.section in s and '&' in s), None) + if section is None: + section = job.section + if section not in jobs_section: + jobs_section[section] = list() + jobs_section[section].append(job) return jobs_section def _build_horizontal_packages(self, section_list, max_wrapped_jobs, section, max_wrapper_job_by_section): -- GitLab From 630dc3b52cfbe1e4ea30c30504ebb3c72460f82c Mon Sep 17 00:00:00 2001 From: dbeltran Date: Mon, 26 Apr 2021 13:37:42 +0200 Subject: [PATCH 03/22] Working multi-wrapper with -cw flag --- autosubmit/config/config_common.py | 2 +- autosubmit/job/job_packager.py | 63 ++++++++++++++---------------- 2 files changed, 31 insertions(+), 34 deletions(-) diff --git a/autosubmit/config/config_common.py b/autosubmit/config/config_common.py index af5530161..1a2b070c3 100644 --- a/autosubmit/config/config_common.py +++ b/autosubmit/config/config_common.py @@ -1412,7 +1412,7 @@ class AutosubmitConfig(object): def get_wrapper_type(self, wrapper_section_name="wrapper"): """ - Returns what kind of wrapper (VERTICAL, MIXED-VERTICAL, HORIZONTAL, HYBRID, NONE) the user has configured in the autosubmit's config + Returns what kind of wrapper (VERTICAL, MIXED-VERTICAL, HORIZONTAL, HYBRID, MULTI NONE) the user has configured in the autosubmit's config :return: wrapper type (or none) :rtype: string diff --git a/autosubmit/job/job_packager.py b/autosubmit/job/job_packager.py index 246e4e9f2..847dead26 100644 --- a/autosubmit/job/job_packager.py +++ b/autosubmit/job/job_packager.py @@ -72,23 +72,22 @@ class JobPackager(object): self.max_jobs = min(self._max_wait_jobs_to_submit, self._max_jobs_to_submit) # These are defined in the [wrapper] section of autosubmit_,conf - if self._as_config.get_wrapper_type == "multi": - self.wrapper_type = [] - self.wrapper_policy = [] - self.wrapper_method = [] - self.wrapper_section_names = [] + self.wrapper_type = dict() + self.wrapper_policy = dict() + self.wrapper_method = dict() + self.jobs_in_wrapper = dict() + self.wrapper_type["wrapper"] = self._as_config.get_wrapper_type() + self.wrapper_policy["wrapper"] = self._as_config.get_wrapper_policy() + self.wrapper_method["wrapper"] = self._as_config.get_wrapper_method().lower() + self.jobs_in_wrapper["wrapper"] = self._as_config.get_wrapper_jobs() + if self._as_config.get_wrapper_type() == "multi": for wrapper_section in self._as_config.get_wrapper_multi(): - self.wrapper_type += [self._as_config.get_wrapper_type()] - self.wrapper_policy += [self._as_config.get_wrapper_policy()] - self.wrapper_method += [self._as_config.get_wrapper_method().lower()] - self.jobs_in_wrapper += [self._as_config.get_wrapper_jobs()] - self.wrapper_section_names += [wrapper_section] - else: - self.wrapper_type = [self._as_config.get_wrapper_type()] - self.wrapper_policy = [self._as_config.get_wrapper_policy()] - self.wrapper_method = [self._as_config.get_wrapper_method().lower()] - self.jobs_in_wrapper = [ self._as_config.get_wrapper_jobs() ] - self.wrapper_section_names = ["wrapper"] + self.wrapper_type[wrapper_section] = self._as_config.get_wrapper_type(wrapper_section) + self.wrapper_policy[wrapper_section] = self._as_config.get_wrapper_policy(wrapper_section) + self.wrapper_method[wrapper_section] = self._as_config.get_wrapper_method(wrapper_section).lower() + self.jobs_in_wrapper[wrapper_section] = self._as_config.get_wrapper_jobs(wrapper_section) + + # True or False Log.debug( @@ -227,15 +226,13 @@ class JobPackager(object): # Only if platform allows wrappers, wrapper type has been correctly defined, and job names for wrappers have been correctly defined # ('None' is a default value) or the correct section is included in the corresponding sections in [wrappers] wrapper_defined = False - index = 0 for wrapper_section in self.jobs_in_wrapper: - if section in wrapper_section: + if section in self.jobs_in_wrapper[wrapper_section]: wrapper_defined = True break - index=index+1 - if wrapper_defined and self._platform.allow_wrappers and self.wrapper_type[index] in ['horizontal', 'vertical', 'vertical-mixed','vertical-horizontal', 'horizontal-vertical'] : + if wrapper_defined and self._platform.allow_wrappers and self.wrapper_type[wrapper_section] in ['horizontal', 'vertical', 'vertical-mixed','vertical-horizontal', 'horizontal-vertical'] : # Trying to find the value in jobs_parser, if not, default to an autosubmit_.conf value (Looks first in [wrapper] section) - max_wrapped_jobs = int(self._as_config.jobs_parser.get_option(section, "MAX_WRAPPED", self._as_config.get_max_wrapped_jobs(self.wrapper_section_names[index]))) + max_wrapped_jobs = int(self._as_config.jobs_parser.get_option(section, "MAX_WRAPPED", self._as_config.get_max_wrapped_jobs(wrapper_section))) if '&' not in section: if self._as_config.jobs_parser.has_option(section, 'DEPENDENCIES'): dependencies_keys = self._as_config.jobs_parser.get( @@ -264,20 +261,20 @@ class JobPackager(object): if number < max_wrapped_jobs: hard_limit_wrapper = number min_wrapped_jobs = min(self._as_config.jobs_parser.get_option( - section, "MIN_WRAPPED", self._as_config.get_min_wrapped_jobs(self.wrapper_section_names[index])), hard_limit_wrapper) + section, "MIN_WRAPPED", self._as_config.get_min_wrapped_jobs(wrapper_section)), hard_limit_wrapper) if len(self._jobs_list.jobs_to_run_first) > 0:# Allows to prepare an experiment with TWO_STEP_START and strict policy min_wrapped_jobs = 2 packages_to_submit = [] - if self.wrapper_type[index] in ['vertical', 'vertical-mixed']: + if self.wrapper_type[wrapper_section] in ['vertical', 'vertical-mixed']: wrapped = True built_packages_tmp = self._build_vertical_packages(jobs_to_submit_by_section[section], max_wrapped_jobs, max_wrapper_job_by_section) - elif self.wrapper_type[index] == 'horizontal': + elif self.wrapper_type[wrapper_section] == 'horizontal': wrapped = True built_packages_tmp = self._build_horizontal_packages(jobs_to_submit_by_section[section], max_wrapped_jobs, section, max_wrapper_job_by_section) - elif self.wrapper_type[index] in ['vertical-horizontal', 'horizontal-vertical']: + elif self.wrapper_type[wrapper_section] in ['vertical-horizontal', 'horizontal-vertical']: wrapped = True built_packages_tmp = list() built_packages_tmp.append(self._build_hybrid_package( @@ -298,7 +295,7 @@ class JobPackager(object): if job.fail_count > 0: failed_innerjobs = True break - if failed_innerjobs and str(self.wrapper_policy[index]) == "mixed": + if failed_innerjobs and str(self.wrapper_policy[wrapper_section]) == "mixed": for job in p.jobs: if job.fail_count == 0: continue @@ -329,12 +326,12 @@ class JobPackager(object): independent_inner_job and parent.status == Status.COMPLETED] if len(tmp) != len(job.parents): deadlock = False - if deadlock and self.wrapper_policy[index] == "strict": + if deadlock and self.wrapper_policy[wrapper_section] == "strict": Log.debug( "Wrapper policy is set to strict, there is a deadlock so autosubmit will sleep a while") for job in p.jobs: job.packed = False - elif deadlock and self.wrapper_policy[index] == "mixed": + elif deadlock and self.wrapper_policy[wrapper_section] == "mixed": Log.debug( "Wrapper policy is set to mixed, there is a deadlock") for job in p.jobs: @@ -348,7 +345,7 @@ class JobPackager(object): else: package = JobPackageSimple([job]) packages_to_submit.append(package) - elif deadlock and self.wrapper_policy[index] != "strict" and self.wrapper_policy[index] != "mixed": + elif deadlock and self.wrapper_policy[wrapper_section] != "strict" and self.wrapper_policy[wrapper_section] != "mixed": Log.debug( "Wrapper policy is set to flexible and there is a deadlock, As will submit the jobs sequentally") for job in p.jobs: @@ -398,10 +395,10 @@ class JobPackager(object): :rtype: Dictionary Key: Section Name, Value: List(Job Object) """ # .jobs_in_wrapper defined in .conf, see constructor. - sections_split= [] - for number_of_wrapper_section in range(0 , len(self.jobs_in_wrapper) ): - sections_split += self.jobs_in_wrapper[number_of_wrapper_section].split() - + sections_split = set() + for wrapper_section in self.jobs_in_wrapper: + sections_split.update(set(self.jobs_in_wrapper[wrapper_section].split(","))) + sections_split = list(sections_split) for job in jobs_list: jobs_section = dict() # This iterator will always return None if there is no '&' defined in the section name -- GitLab From a5f737cadc6a56ea621acc3f343ceaedc00a8f7b Mon Sep 17 00:00:00 2001 From: dbeltran Date: Fri, 30 Apr 2021 15:51:07 +0200 Subject: [PATCH 04/22] Deleted Vertical-mixed wrapper, vertical now is able to mix jobs. --- autosubmit/autosubmit.py | 15 +++++++++++++-- autosubmit/job/job_list.py | 15 +++++++++------ autosubmit/job/job_packager.py | 22 +++++++++------------- test/unit/test_wrappers.py | 12 ++++++------ 4 files changed, 37 insertions(+), 27 deletions(-) diff --git a/autosubmit/autosubmit.py b/autosubmit/autosubmit.py index cdb6ff47b..5114ddec8 100644 --- a/autosubmit/autosubmit.py +++ b/autosubmit/autosubmit.py @@ -3654,10 +3654,14 @@ class Autosubmit: date_format = 'H' if date.minute > 1: date_format = 'M' + wrapper_jobs = dict() + if as_conf.get_wrapper_type() == "multi": + for wrapper_section in as_conf.get_wrapper_multi(): + wrapper_jobs[wrapper_section] = as_conf.get_wrapper_jobs(wrapper_section) job_list.generate(date_list, member_list, num_chunks, chunk_ini, parameters, date_format, as_conf.get_retrials(), as_conf.get_default_job_type(), - as_conf.get_wrapper_type(), as_conf.get_wrapper_jobs(), notransitive=notransitive, update_structure=True, run_only_members=run_only_members) + as_conf.get_wrapper_type(), wrapper_jobs, notransitive=notransitive, update_structure=True, run_only_members=run_only_members) if rerun == "true": chunk_list = Autosubmit._create_json( @@ -4871,9 +4875,16 @@ class Autosubmit: date_format = 'H' if date.minute > 1: date_format = 'M' + wrapper_jobs = dict() + wrapper_jobs["wrapper"] = as_conf.get_wrapper_jobs() + if as_conf.get_wrapper_type() == "multi": + for wrapper_section in as_conf.get_wrapper_multi(): + wrapper_jobs[wrapper_section] = as_conf.get_wrapper_jobs(wrapper_section) + + job_list.generate(date_list, as_conf.get_member_list(), as_conf.get_num_chunks(), as_conf.get_chunk_ini(), as_conf.load_parameters(), date_format, as_conf.get_retrials(), - as_conf.get_default_job_type(), as_conf.get_wrapper_type(), as_conf.get_wrapper_jobs(), + as_conf.get_default_job_type(), as_conf.get_wrapper_type(), wrapper_jobs, new=False, notransitive=notransitive, run_only_members=run_only_members) if rerun == "true": diff --git a/autosubmit/job/job_list.py b/autosubmit/job/job_list.py index ea3a9fa95..b3a26035a 100644 --- a/autosubmit/job/job_list.py +++ b/autosubmit/job/job_list.py @@ -133,7 +133,7 @@ class JobList(object): # print(job.parents) def generate(self, date_list, member_list, num_chunks, chunk_ini, parameters, date_format, default_retrials, - default_job_type, wrapper_type=None, wrapper_jobs=None, new=True, notransitive=False, update_structure=False, run_only_members=[]): + default_job_type, wrapper_type=None, wrapper_jobs=dict(), new=True, notransitive=False, update_structure=False, run_only_members=[]): """ Creates all jobs needed for the current workflow @@ -211,9 +211,12 @@ class JobList(object): job.children.add(jobc) # Perhaps this should be done by default independent of the wrapper_type supplied - if wrapper_type == 'vertical-mixed': - self._ordered_jobs_by_date_member = self._create_sorted_dict_jobs( - wrapper_jobs) + for wrapper_section in wrapper_jobs: + if wrapper_jobs[wrapper_section] != 'None': + self._ordered_jobs_by_date_member[wrapper_section] = self._create_sorted_dict_jobs(wrapper_jobs[wrapper_section]) + else: + self._ordered_jobs_by_date_member[wrapper_section] = {} + @staticmethod def _add_dependencies(date_list, member_list, chunk_list, dic_jobs, jobs_parser, graph, option="DEPENDENCIES"): @@ -685,14 +688,14 @@ class JobList(object): date_format = 'M' return date_format - def get_ordered_jobs_by_date_member(self): + def get_ordered_jobs_by_date_member(self,section): """ Get the dictionary of jobs ordered according to wrapper's expression divided by date and member :return: jobs ordered divided by date and member :rtype: dict """ - return self._ordered_jobs_by_date_member + return self._ordered_jobs_by_date_member[section] def get_completed(self, platform=None, wrapper=False): """ diff --git a/autosubmit/job/job_packager.py b/autosubmit/job/job_packager.py index 847dead26..978b51f07 100644 --- a/autosubmit/job/job_packager.py +++ b/autosubmit/job/job_packager.py @@ -229,8 +229,9 @@ class JobPackager(object): for wrapper_section in self.jobs_in_wrapper: if section in self.jobs_in_wrapper[wrapper_section]: wrapper_defined = True + self.current_wrapper_section = wrapper_section break - if wrapper_defined and self._platform.allow_wrappers and self.wrapper_type[wrapper_section] in ['horizontal', 'vertical', 'vertical-mixed','vertical-horizontal', 'horizontal-vertical'] : + if wrapper_defined and self._platform.allow_wrappers and self.wrapper_type[wrapper_section] in ['horizontal', 'vertical','vertical-horizontal', 'horizontal-vertical'] : # Trying to find the value in jobs_parser, if not, default to an autosubmit_.conf value (Looks first in [wrapper] section) max_wrapped_jobs = int(self._as_config.jobs_parser.get_option(section, "MAX_WRAPPED", self._as_config.get_max_wrapped_jobs(wrapper_section))) if '&' not in section: @@ -265,7 +266,7 @@ class JobPackager(object): if len(self._jobs_list.jobs_to_run_first) > 0:# Allows to prepare an experiment with TWO_STEP_START and strict policy min_wrapped_jobs = 2 packages_to_submit = [] - if self.wrapper_type[wrapper_section] in ['vertical', 'vertical-mixed']: + if self.wrapper_type[wrapper_section] == 'vertical': wrapped = True built_packages_tmp = self._build_vertical_packages(jobs_to_submit_by_section[section], max_wrapped_jobs, max_wrapper_job_by_section) @@ -397,7 +398,7 @@ class JobPackager(object): # .jobs_in_wrapper defined in .conf, see constructor. sections_split = set() for wrapper_section in self.jobs_in_wrapper: - sections_split.update(set(self.jobs_in_wrapper[wrapper_section].split(","))) + sections_split.update(set(self.jobs_in_wrapper[wrapper_section].split())) sections_split = list(sections_split) for job in jobs_list: jobs_section = dict() @@ -442,6 +443,8 @@ class JobPackager(object): :type max_wrapped_jobs: Integer. \n :param min_wrapped_jobs: Number of maximum jobs that can be wrapped (Can be user defined), per section. \n :type min_wrapped_jobs: Integer. \n + :param wrapper_section: Current Section + :type string :return: List of Wrapper Packages, Dictionary that details dependencies. \n :rtype: List() of JobPackageVertical(), Dictionary Key: String, Value: (Dictionary Key: Variable Name, Value: String/Int) """ @@ -450,16 +453,9 @@ class JobPackager(object): if self.max_jobs > 0: if job.packed is False: job.packed = True - if self.wrapper_type == 'vertical-mixed': - dict_jobs = self._jobs_list.get_ordered_jobs_by_date_member() - job_vertical_packager = JobPackagerVerticalMixed(dict_jobs, job, [job], job.wallclock, self.max_jobs, - max_wrapped_jobs, self._platform.max_wallclock, max_wrapper_job_by_section) - else: - job_vertical_packager = JobPackagerVerticalSimple([job], job.wallclock, self.max_jobs, - max_wrapped_jobs, self._platform.max_wallclock, max_wrapper_job_by_section) - - jobs_list = job_vertical_packager.build_vertical_package( - job) + dict_jobs = self._jobs_list.get_ordered_jobs_by_date_member(self.current_wrapper_section) + job_vertical_packager = JobPackagerVerticalMixed(dict_jobs, job, [job], job.wallclock, self.max_jobs,max_wrapped_jobs, self._platform.max_wallclock, max_wrapper_job_by_section) + jobs_list = job_vertical_packager.build_vertical_package(job) if job.status is Status.READY: packages.append(JobPackageVertical( diff --git a/test/unit/test_wrappers.py b/test/unit/test_wrappers.py index dbd868d94..f3d719139 100644 --- a/test/unit/test_wrappers.py +++ b/test/unit/test_wrappers.py @@ -527,7 +527,7 @@ class TestWrappers(TestCase): self.job_packager.max_jobs = max_jobs self.job_packager._platform.max_wallclock = max_wallclock - self.job_packager.wrapper_type = 'vertical-mixed' + self.job_packager.wrapper_type = 'vertical' self.job_packager.jobs_in_wrapper = wrapper_expression max_wrapped_job_by_section = {} max_wrapped_job_by_section["s1"] = max_wrapped_jobs @@ -597,7 +597,7 @@ class TestWrappers(TestCase): self.job_packager.max_jobs = max_jobs self.job_packager._platform.max_wallclock = max_wallclock - self.job_packager.wrapper_type = 'vertical-mixed' + self.job_packager.wrapper_type = 'vertical' self.job_packager.jobs_in_wrapper = wrapper_expression max_wrapper_job_by_section = {} max_wrapper_job_by_section["s1"] = max_wrapped_jobs @@ -666,7 +666,7 @@ class TestWrappers(TestCase): self.job_packager.max_jobs = max_jobs self.job_packager._platform.max_wallclock = max_wallclock - self.job_packager.wrapper_type = 'vertical-mixed' + self.job_packager.wrapper_type = 'vertical' self.job_packager.jobs_in_wrapper = wrapper_expression max_wrapped_job_by_section = {} max_wrapped_job_by_section["s1"] = max_wrapped_jobs @@ -746,7 +746,7 @@ class TestWrappers(TestCase): self.job_packager.max_jobs = max_jobs self.job_packager._platform.max_wallclock = max_wallclock - self.job_packager.wrapper_type = 'vertical-mixed' + self.job_packager.wrapper_type = 'vertical' self.job_packager.jobs_in_wrapper = wrapper_expression max_wrapped_job_by_section = {} max_wrapped_job_by_section["s1"] = max_wrapped_jobs @@ -818,7 +818,7 @@ class TestWrappers(TestCase): self.job_packager.max_jobs = max_jobs self.job_packager._platform.max_wallclock = max_wallclock - self.job_packager.wrapper_type = 'vertical-mixed' + self.job_packager.wrapper_type = 'vertical' self.job_packager.jobs_in_wrapper = wrapper_expression max_wrapped_job_by_section = {} max_wrapped_job_by_section["s1"] = max_wrapped_jobs @@ -906,7 +906,7 @@ class TestWrappers(TestCase): self.job_packager.max_jobs = max_jobs self.job_packager._platform.max_wallclock = max_wallclock - self.job_packager.wrapper_type = 'vertical-mixed' + self.job_packager.wrapper_type = 'vertical' self.job_packager.jobs_in_wrapper = wrapper_expression max_wrapped_job_by_section = {} max_wrapped_job_by_section["s1"] = max_wrapped_jobs -- GitLab From f2e18740a5e057dc96942ccacd9903689e94dbe0 Mon Sep 17 00:00:00 2001 From: dbeltran Date: Mon, 3 May 2021 13:31:21 +0200 Subject: [PATCH 05/22] Added multi wrapper documentation with an example --- CHANGELOG | 37 +++++++++++++---- VERSION | 2 +- docs/source/usage/run_modes/wrappers.rst | 43 ++++++++++++++++---- docs/source/workflows/multiple_wrappers.png | Bin 0 -> 308786 bytes 4 files changed, 64 insertions(+), 18 deletions(-) create mode 100644 docs/source/workflows/multiple_wrappers.png diff --git a/CHANGELOG b/CHANGELOG index f79c3861f..0172e063b 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,12 +1,31 @@ -3.13.0b - This has been the Autosubmit development versions for many months, so it provides a lot of improvements, -specially in terms of efficiency and stability. It also brings a full refactor of the wrappers module. - Multi-threaded wrappers were introduced in this version. - It provides the possibility to specify multiple hosts for the same platform (in a list) so it is more robust against connection issues / login failures. - In general, big experiments, with many startdates/members or featuring very big wrappers run much more efficiently with 3.12.1b. - A completely new implementation of remote dependencies (PreSubmission) were introduced in this version. It helps to speed up the jobs in a Slurm platform by sending the next 10 Waiting jobs in advance to the queues. - Workflows have more flexibility by the inclusion of a new way to define dependencies for specific chunks. - Changes were made to the algorithm that handles the maximum active jobs by platform. From this version, wrapped jobs count as a single job for Autosubmit, and the maximum number of inner jobs can be defined with new wrapper parameters. - There is a new log (.err, .out, COMPLETED, STAT files) recover system, that performs re-tries (in background threads) of the log files transfer from the remote platforms in case of failure. +3.14.0b - + +MultiThreads option is avaliable + + +3.13.0 - This has been the Autosubmit development versions for many months, so it provides a lot of improvements, specially in terms of efficiency and stability. It also brings a full refactor of the wrappers module. + +Multi-threaded wrappers were introduced in this version. +It provides the possibility to specify multiple hosts for the same platform (in a list) so it is more robust against connection issues / login failures. +In general, big experiments, with many startdates/members or featuring very big wrappers run much more efficiently with 3.13.0. +A completely new implementation of remote dependencies (PreSubmission) were introduced in this version. It helps to speed up the jobs in a Slurm platform by sending the next 10 Waiting jobs in advance to the queues. +Workflows have more flexibility by the inclusion of a new way to define dependencies for specific chunks. +Changes were made to the algorithm that handles the maximum active jobs by platform. From this version, wrapped jobs count as a single job for Autosubmit, and the maximum number of inner jobs can be defined with new wrapper parameters. +There is a new log (.err, .out, COMPLETED, STAT files) recover system, that performs re-tries (in background threads) of the log files transfer from the remote platforms in case of failure. +The user can specify a datetime or time when the experiment should start by sending the -st flag (plus the right format) using the autosubmit run command. +The user can specify an experiment dependency by sending the -sa (plus the right expid format) using the autosubmit run command. The experiment will start when the experiment specified in the -sa flag finishes. +When the user quits Autosubmit by using the CTRL+C keys, Autosubmit will make sure all threads are finished correctly before closing. +Job lifecycle information is stored in an external database that will allow the user to see the historical information of the execution of the jobs in her experiment. This information is gathered in a way that does not interfere with the normal workflow, even if the information gathering fails or any of its components. Furthermore, threading is implemented to prevent unnecessary delays. + +Specific members can now be configured to run by using the autosubmit run together with the -rm command. By setting this flag, Autosubmit will only run jobs belonging to the supplied members. Jobs that were running before this command was sent, will be monitored and properly completed. +The git clone operation now implements a backup procedure that will prevent loss of information in case of wrong configuration or network error. +There is an improvement of the security, now all commands that could change the workflow are locked by an owner-only mechanism. Ej: create,refresh and run. +Added autosubmit dbfix expid command that allows users to fix the database malformed error. +Custom shebang (header of the script templates) so it is possible to use Python or R templates with a specific Python/R version dependency, for example. +Workflow updates: A difference of 3.12.0 version, in this one, only Create and run commands can regenerate the configuration, workflow and structure information. In case of run, only will be updated if a change is detected before the starting of the main run loop. +Improves into failure tolerance, in this version AS will try to prevent as many errors as possible at the beginning of the run and other delicate operations, instead of detecting them while in running time. +Allows prioritizing a list of jobs to be run before the rest of the workflow. Via the use of the Two_step_start variable set in expdef.conf +Allows skipping jobs under the same section if their last on queuing member/chunks is higher than other on queuing/waiting/ready 3.12.0 - Shortly, this will be the Autosubmit default. Therefore, it is the recommended software to run any kind of experiments unless there is a necessity only covered by the development versions. diff --git a/VERSION b/VERSION index b1bf616de..ad59f742d 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.13.0b +3.14.0b diff --git a/docs/source/usage/run_modes/wrappers.rst b/docs/source/usage/run_modes/wrappers.rst index 4c7173ecb..608d4ea5c 100644 --- a/docs/source/usage/run_modes/wrappers.rst +++ b/docs/source/usage/run_modes/wrappers.rst @@ -7,9 +7,9 @@ In order to understand the goal of this feature, please take a look at: https:// At the moment there are 4 types of wrappers that can be used depending on the experiment's workflow: * Vertical -* Vertical mixed * Horizontal * Hybrid (horizontal-vertical and vertical-horizontal approaches) +* Multiple wrappers - Same experiment When using the wrapper, it is useful to be able to visualize which packages are being created. So, when executing *autosubmit monitor cxxx*, a dashed box indicates the jobs that are wrapped together in the same job package. @@ -93,17 +93,17 @@ In order to be able to use the vertical wrapper, in ``platforms_cxxx.conf`` set Remember to add to each job the corresponding WALLCLOCK time. -Vertical-mixed wrapper -======================= +Vertical with multiple sections +=============================== -This is a version of the vertical wrapper that allows jobs of different types to be wrapped together. +This is a mode of the vertical wrapper that allows jobs of different types to be wrapped together. Note that the solution considers the order of the sections defined in the ``jobs_cxxx.conf`` file, so the order of the sections given in **JOBS_IN_WRAPPER** is irrelevant. Additionally, jobs are grouped within the corresponding date, member and chunk hierarchy. .. code-block:: ini [wrapper] - TYPE = vertical-mixed + TYPE = vertical JOBS_IN_WRAPPER = SIM&SIM2 # REQUIRED .. figure:: ../workflows/vertical-mixed.png @@ -146,7 +146,7 @@ In order to be able to use the horizontal wrapper, in ``platforms_cxxx.conf`` se :alt: horizontally wrapped jobs Shared-memory Experiments -********************** +************************* There is also the possibility of setting the option **METHOD** to SRUN in the wrapper directive (**ONLY** for vertical and vertical-horizontal wrappers). @@ -205,6 +205,30 @@ Vertical-horizontal :align: center :alt: hybrid wrapper +Multiple wrappers at once +========================= +This is an special mode that allows you to use multiple **independent** wrappers on the same experiment. By using an special variable that allows to define subwrapper sections + +.. code-block:: ini + + [Wrapper] + TYPE = multi # REQUIRED + WRAPPER_LIST = wrapper_0,wrapper_1 + + [wrapper_0] + TYPE = vertical + JOBS_IN_WRAPPER = SIM + + [wrapper_1] + TYPE = vertical + JOBS_IN_WRAPPER = DA&REDUCE + +.. figure:: ../workflows/multiple_wrappers.png + :name: + :width: 100% + :align: center + :alt: multi wrapper + Summary ========================== @@ -213,10 +237,13 @@ In `autosubmit_cxxx.conf`: .. code-block:: ini # Basic Configuration of wrapper - #TYPE = {vertical,vertical-mixed,horizontal,horizontal-vertical,vertical-horizontal} # REQUIRED + #TYPE = {vertical,horizontal,horizontal-vertical,vertical-horizontal} # REQUIRED # JOBS_IN_WRAPPER = Sections that should be wrapped together ex SIM + # METHOD : Select between MACHINESFILES or Shared-Memory. # MIN_WRAPPED set the minim number of jobs that should be included in the wrapper. DEFAULT = 2 # MAX_WRAPPED set the maxim number of jobs that should be included in the wrapper. DEFAULT = TOTALJOBS + # Policy : Select the behaviour of the inner jobs Strict/Flexible/Mixed + [wrapper] TYPE = Vertical #REQUIRED @@ -225,7 +252,7 @@ In `autosubmit_cxxx.conf`: MIN_WRAPPED = 2 MAX_WRAPPED = 9999 # OPTIONAL. Integer value, overrides TOTALJOBS CHECK_TIME_WRAPPER = # OPTIONAL. Time in seconds, overrides SAFETYSLEEPTIME - + Policy = flexible # OPTIONAL In `platforms_cxxx.conf`: .. code-block:: ini diff --git a/docs/source/workflows/multiple_wrappers.png b/docs/source/workflows/multiple_wrappers.png new file mode 100644 index 0000000000000000000000000000000000000000..d214d7bd446a1edc5f778dcb1a37122394401c61 GIT binary patch literal 308786 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
%=@!{SV>kDdy^B%DF+I^P@f#1l?gG?J=7#rq5;? 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 literal 0 HcmV?d00001 -- GitLab From 306daeba5389980821ccc70af8d41d172ea46263 Mon Sep 17 00:00:00 2001 From: dbeltran Date: Tue, 4 May 2021 12:12:01 +0200 Subject: [PATCH 06/22] Fix vertical-horizontal --- autosubmit/job/job_packager.py | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/autosubmit/job/job_packager.py b/autosubmit/job/job_packager.py index 978b51f07..3c4d33a3c 100644 --- a/autosubmit/job/job_packager.py +++ b/autosubmit/job/job_packager.py @@ -41,6 +41,7 @@ class JobPackager(object): """ def __init__(self, as_config, platform, jobs_list, hold=False): + #self.current_wrapper_section = "wrapper" self._as_config = as_config self._platform = platform self._jobs_list = jobs_list @@ -226,12 +227,13 @@ class JobPackager(object): # Only if platform allows wrappers, wrapper type has been correctly defined, and job names for wrappers have been correctly defined # ('None' is a default value) or the correct section is included in the corresponding sections in [wrappers] wrapper_defined = False + for wrapper_section in self.jobs_in_wrapper: if section in self.jobs_in_wrapper[wrapper_section]: wrapper_defined = True self.current_wrapper_section = wrapper_section break - if wrapper_defined and self._platform.allow_wrappers and self.wrapper_type[wrapper_section] in ['horizontal', 'vertical','vertical-horizontal', 'horizontal-vertical'] : + if wrapper_defined and self._platform.allow_wrappers and self.wrapper_type[self.current_wrapper_section] in ['horizontal', 'vertical','vertical-horizontal', 'horizontal-vertical'] : # Trying to find the value in jobs_parser, if not, default to an autosubmit_.conf value (Looks first in [wrapper] section) max_wrapped_jobs = int(self._as_config.jobs_parser.get_option(section, "MAX_WRAPPED", self._as_config.get_max_wrapped_jobs(wrapper_section))) if '&' not in section: @@ -257,7 +259,7 @@ class JobPackager(object): for k in dependencies_keys: if "-" in k: k_divided = k.split("-") - if k_divided[0] not in self.jobs_in_wrapper: + if k_divided[0] not in self.jobs_in_wrapper[self.current_wrapper_section]: number = int(k_divided[1].strip(" ")) if number < max_wrapped_jobs: hard_limit_wrapper = number @@ -282,14 +284,6 @@ class JobPackager(object): jobs_to_submit_by_section[section], max_wrapped_jobs, section, max_wrapper_job_by_section)) if wrapped: for p in built_packages_tmp: - #if len(self._jobs_list.jobs_to_run_first) > 0: # related to TWO_STEP_START new variable , defined in expdef - # temp_jobs = list() - # for packed_job in p.jobs: - # if packed_job in self._jobs_list.jobs_to_run_first: - # temp_jobs.append(packed_job) - # else: - # packed_job.packed = False - # p.jobs = temp_jobs failed_innerjobs = False # Check failed jobs first for job in p.jobs: @@ -397,8 +391,8 @@ class JobPackager(object): """ # .jobs_in_wrapper defined in .conf, see constructor. sections_split = set() - for wrapper_section in self.jobs_in_wrapper: - sections_split.update(set(self.jobs_in_wrapper[wrapper_section].split())) + for jobs_in_wrapper_section in self.jobs_in_wrapper: + sections_split.update(set(self.jobs_in_wrapper[jobs_in_wrapper_section].split())) sections_split = list(sections_split) for job in jobs_list: jobs_section = dict() @@ -476,7 +470,7 @@ class JobPackager(object): ## Create the horizontal ## horizontal_packager = JobPackagerHorizontal(jobs_list, self._platform.max_processors, max_wrapped_jobs, self.max_jobs, self._platform.processors_per_node, max_wrapper_job_by_section=max_wrapper_job_by_section) - if self.wrapper_type == 'vertical-horizontal': + if self.wrapper_type[self.current_wrapper_section] == 'vertical-horizontal': return self._build_vertical_horizontal_package(horizontal_packager, jobs_resources) else: return self._build_horizontal_vertical_package(horizontal_packager, section, jobs_resources) -- GitLab From 033c5013327e23d50b37f8d447e0470148e70836 Mon Sep 17 00:00:00 2001 From: dbeltran Date: Tue, 4 May 2021 12:29:54 +0200 Subject: [PATCH 07/22] Fix vertical-horizontal --- autosubmit/job/job_packager.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/autosubmit/job/job_packager.py b/autosubmit/job/job_packager.py index 3c4d33a3c..cfd493e4e 100644 --- a/autosubmit/job/job_packager.py +++ b/autosubmit/job/job_packager.py @@ -235,7 +235,7 @@ class JobPackager(object): break if wrapper_defined and self._platform.allow_wrappers and self.wrapper_type[self.current_wrapper_section] in ['horizontal', 'vertical','vertical-horizontal', 'horizontal-vertical'] : # Trying to find the value in jobs_parser, if not, default to an autosubmit_.conf value (Looks first in [wrapper] section) - max_wrapped_jobs = int(self._as_config.jobs_parser.get_option(section, "MAX_WRAPPED", self._as_config.get_max_wrapped_jobs(wrapper_section))) + max_wrapped_jobs = int(self._as_config.jobs_parser.get_option(section, "MAX_WRAPPED", self._as_config.get_max_wrapped_jobs(self.current_wrapper_section ))) if '&' not in section: if self._as_config.jobs_parser.has_option(section, 'DEPENDENCIES'): dependencies_keys = self._as_config.jobs_parser.get( @@ -277,7 +277,7 @@ class JobPackager(object): built_packages_tmp = self._build_horizontal_packages(jobs_to_submit_by_section[section], max_wrapped_jobs, section, max_wrapper_job_by_section) - elif self.wrapper_type[wrapper_section] in ['vertical-horizontal', 'horizontal-vertical']: + elif self.wrapper_type[self.current_wrapper_section] in ['vertical-horizontal', 'horizontal-vertical']: wrapped = True built_packages_tmp = list() built_packages_tmp.append(self._build_hybrid_package( -- GitLab From e95893369725ef82716fdc6d8fa55890fe23ddb9 Mon Sep 17 00:00:00 2001 From: dbeltran Date: Tue, 4 May 2021 13:06:14 +0200 Subject: [PATCH 08/22] Fix vertical-horizontal (this time for true) --- autosubmit/job/job_packager.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/autosubmit/job/job_packager.py b/autosubmit/job/job_packager.py index cfd493e4e..530570053 100644 --- a/autosubmit/job/job_packager.py +++ b/autosubmit/job/job_packager.py @@ -394,8 +394,9 @@ class JobPackager(object): for jobs_in_wrapper_section in self.jobs_in_wrapper: sections_split.update(set(self.jobs_in_wrapper[jobs_in_wrapper_section].split())) sections_split = list(sections_split) + jobs_section = dict() for job in jobs_list: - jobs_section = dict() + # This iterator will always return None if there is no '&' defined in the section name section = next( (s for s in sections_split if job.section in s and '&' in s), None) @@ -406,6 +407,7 @@ class JobPackager(object): jobs_section[section].append(job) return jobs_section + def _build_horizontal_packages(self, section_list, max_wrapped_jobs, section, max_wrapper_job_by_section): packages = [] horizontal_packager = JobPackagerHorizontal(section_list, self._platform.max_processors, max_wrapped_jobs, -- GitLab From 36e528d2654399ba4ba1ffc27367e1bdcd5edfe9 Mon Sep 17 00:00:00 2001 From: dbeltran Date: Tue, 4 May 2021 15:24:45 +0200 Subject: [PATCH 09/22] Fixed a bug related with method --- autosubmit/job/job_packager.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/autosubmit/job/job_packager.py b/autosubmit/job/job_packager.py index 530570053..22f94bfd5 100644 --- a/autosubmit/job/job_packager.py +++ b/autosubmit/job/job_packager.py @@ -290,7 +290,7 @@ class JobPackager(object): if job.fail_count > 0: failed_innerjobs = True break - if failed_innerjobs and str(self.wrapper_policy[wrapper_section]) == "mixed": + if failed_innerjobs and str(self.wrapper_policy[self.current_wrapper_section]) == "mixed": for job in p.jobs: if job.fail_count == 0: continue @@ -411,7 +411,7 @@ class JobPackager(object): def _build_horizontal_packages(self, section_list, max_wrapped_jobs, section, max_wrapper_job_by_section): packages = [] horizontal_packager = JobPackagerHorizontal(section_list, self._platform.max_processors, max_wrapped_jobs, - self.max_jobs, self._platform.processors_per_node, self.wrapper_method, max_wrapper_job_by_section=max_wrapper_job_by_section) + self.max_jobs, self._platform.processors_per_node, self.wrapper_method[self.current_wrapper_section], max_wrapper_job_by_section=max_wrapper_job_by_section) package_jobs = horizontal_packager.build_horizontal_package() @@ -424,7 +424,7 @@ class JobPackager(object): jobs_resources = horizontal_packager.components_dict jobs_resources['MACHINEFILES'] = machinefile_function current_package = JobPackageHorizontal( - package_jobs, jobs_resources=jobs_resources, method=self.wrapper_method, configuration=self._as_config) + package_jobs, jobs_resources=jobs_resources, method=self.wrapper_method[self.current_wrapper_section], configuration=self._as_config) packages.append(current_package) return packages @@ -527,7 +527,7 @@ class JobPackager(object): for job in current_package[level]: job.level = level return JobPackageVerticalHorizontal(current_package, total_processors, total_wallclock, - jobs_resources=jobs_resources, method=self.wrapper_method, configuration=self._as_config) + jobs_resources=jobs_resources, method=self.wrapper_method[self.current_wrapper_section], configuration=self._as_config) class JobPackagerVertical(object): -- GitLab From 03778553582d2a7c4d3a0a3d2e84e3004a71be06 Mon Sep 17 00:00:00 2001 From: dbeltran Date: Fri, 7 May 2021 11:04:47 +0200 Subject: [PATCH 10/22] I/O_ISSUES --- autosubmit/autosubmit.py | 163 ++++++++++++---------- autosubmit/config/config_common.py | 90 ++++++++---- autosubmit/database/db_common.py | 46 ------ autosubmit/job/job_list.py | 15 +- autosubmit/job/job_packager.py | 99 +++++++------ autosubmit/platforms/paramiko_platform.py | 7 +- 6 files changed, 214 insertions(+), 206 deletions(-) diff --git a/autosubmit/autosubmit.py b/autosubmit/autosubmit.py index 81c26e175..ac352d5b0 100644 --- a/autosubmit/autosubmit.py +++ b/autosubmit/autosubmit.py @@ -29,7 +29,7 @@ from notifications.mail_notifier import MailNotifier from bscearth.utils.date import date2str from monitor.monitor import Monitor from database.db_common import get_autosubmit_version, check_experiment_exists -from database.db_common import delete_experiment, update_experiment_descrip_version +from database.db_common import delete_experiment from experiment.experiment_common import copy_experiment from experiment.experiment_common import new_experiment from database.db_common import create_db @@ -485,12 +485,6 @@ class Autosubmit: 'pklfix', description='restore the backup of your pkl') subparser.add_argument('expid', help='experiment identifier') - # Update Description - subparser = subparsers.add_parser( - 'updatedescrip', description="Updates the experiment's description.") - subparser.add_argument('expid', help='experiment identifier') - subparser.add_argument('description', help='New description.') - # Test subparser = subparsers.add_parser( 'test', description='test experiment') @@ -633,11 +627,9 @@ class Autosubmit: return Autosubmit.database_fix(args.expid) elif args.command == 'pklfix': return Autosubmit.pkl_fix(args.expid) - elif args.command == 'updatedescrip': - return Autosubmit.update_description(args.expid, args.description) @staticmethod - def _init_logs(args, console_level='INFO', log_level='DEBUG', expid='None'): + def _init_logs(args, console_level='INFO', log_level='DEBUG', expid='None'): Log.set_console_level(console_level) expid_less = ["expid", "testcase", "install", "-v", "readme", "changelog", "configure", "unarchive"] @@ -1237,8 +1229,7 @@ class Autosubmit: if unparsed_two_step_start != "": job_list.parse_two_step_start(unparsed_two_step_start) while job_list.get_active(): - Autosubmit.submit_ready_jobs( - as_conf, job_list, platforms_to_test, packages_persistence, True, only_wrappers, hold=False) + Autosubmit.submit_ready_jobs(as_conf, job_list, platforms_to_test, packages_persistence, True, only_wrappers, hold=False) job_list.update_list(as_conf, False) @staticmethod @@ -1260,6 +1251,7 @@ class Autosubmit: "The current host is not allowed to run Autosubmit", 7004) as_conf = AutosubmitConfig(expid, BasicConfig, ConfigParserFactory()) + as_conf.check_conf_files(True) Log.info( @@ -1389,6 +1381,9 @@ class Autosubmit: try: job_list = Autosubmit.load_job_list( expid, as_conf, notransitive=notransitive) + except IOError as e: + raise AutosubmitError( + "Job_list not found", 6016, e.message) except BaseException as e: raise AutosubmitCritical( "Corrupted job_list, backup couldn't be restored", 7040, e.message) @@ -1419,6 +1414,9 @@ class Autosubmit: try: packages_persistence = JobPackagePersistence(os.path.join( BasicConfig.LOCAL_ROOT_DIR, expid, "pkl"), "job_packages_" + expid) + except IOError as e: + raise AutosubmitError( + "job_packages not found", 6016, e.message) except BaseException as e: raise AutosubmitCritical( "Corrupted job_packages, python 2.7 and sqlite doesn't allow to restore these packages", 7040, e.message) @@ -1427,6 +1425,9 @@ class Autosubmit: expid, "pkl", "job_packages_" + expid + ".db"), 0644) try: packages = packages_persistence.load() + except IOError as e: + raise AutosubmitError( + "job_packages not found", 6016, e.message) except BaseException as e: raise AutosubmitCritical( "Corrupted job_packages, python 2.7 and sqlite doesn't allow to restore these packages(will work on autosubmit4)", @@ -1476,16 +1477,17 @@ class Autosubmit: unparsed_two_step_start = as_conf.get_parse_two_step_start() if unparsed_two_step_start != "": job_list.parse_two_step_start(unparsed_two_step_start) - ######################### - # AUTOSUBMIT - MAIN LOOP - ######################### - # Main loop. Finishing when all jobs have been submitted + main_loop_retrials = 480 # Hard limit of tries 480 tries at 30seconds sleep each try # establish the connection to all platforms Autosubmit.restore_platforms(platforms_to_test) save = True Log.debug("Running main loop") + ######################### + # AUTOSUBMIT - MAIN LOOP + ######################### + # Main loop. Finishing when all jobs have been submitted while job_list.get_active(): try: if Autosubmit.exit: @@ -1668,53 +1670,60 @@ class Autosubmit: if Autosubmit.exit: job_list.save() time.sleep(safetysleeptime) - except AutosubmitError as e: # If an error is detected, restore all connections and job_list + except AutosubmitError as e: # If an error is detected, restore all connections and job_list Log.error("Trace: {0}", e.trace) Log.error("{1} [eCode={0}]", e.code, e.message) Log.info("Waiting 30 seconds before continue") # Save job_list if not is a failed submitted job recovery = True - try: - failed_jobs = job_list.get_failed() - failed_jobs += job_list.get_ready() - failed_names = {} - for job in failed_jobs: - if job.fail_count > 0: - failed_names[job.name] = job.fail_count - job_list = Autosubmit.load_job_list( - expid, as_conf, notransitive=notransitive) - Autosubmit._load_parameters( - as_conf, job_list, submitter.platforms) - for job in job_list.get_job_list(): - if job in failed_names: - job.fail_count = failed_names[job.name] - if job.platform_name is None: - job.platform_name = hpcarch - job.platform = submitter.platforms[job.platform_name.lower( - )] - - packages_persistence = JobPackagePersistence(os.path.join( - BasicConfig.LOCAL_ROOT_DIR, expid, "pkl"), "job_packages_" + expid) - packages = packages_persistence.load() - for (exp_id, package_name, job_name) in packages: - if package_name not in job_list.packages_dict: - job_list.packages_dict[package_name] = [] - job_list.packages_dict[package_name].append( - job_list.get_job_by_name(job_name)) - for package_name, jobs in job_list.packages_dict.items(): - from job.job import WrapperJob - for inner_job in jobs: - inner_job.packed = True - wrapper_job = WrapperJob(package_name, jobs[0].id, Status.SUBMITTED, 0, jobs, - None, - None, jobs[0].platform, as_conf, jobs[0].hold) - job_list.job_package_map[jobs[0].id] = wrapper_job - save = job_list.update_list(as_conf) - job_list.save() - except BaseException as e: - raise AutosubmitCritical("Job_list couldn't be restored due I/O error to be solved on 3.14.", 7040, - e.message) + IO_issues = True + while IO_issues: + try: + failed_jobs = job_list.get_failed() + failed_jobs += job_list.get_ready() + failed_names = {} + for job in failed_jobs: + if job.fail_count > 0: + failed_names[job.name] = job.fail_count + job_list = Autosubmit.load_job_list(expid, as_conf, notransitive=notransitive) + if len(job_list._job_list) == 0: + sleep(5) + raise IOError + Autosubmit._load_parameters(as_conf, job_list, submitter.platforms) + for job in job_list.get_job_list(): + if job in failed_names: + job.fail_count = failed_names[job.name] + if job.platform_name is None: + job.platform_name = hpcarch + job.platform = submitter.platforms[job.platform_name.lower( + )] + + packages_persistence = JobPackagePersistence(os.path.join( + BasicConfig.LOCAL_ROOT_DIR, expid, "pkl"), "job_packages_" + expid) + packages = packages_persistence.load() + for (exp_id, package_name, job_name) in packages: + if package_name not in job_list.packages_dict: + job_list.packages_dict[package_name] = [] + job_list.packages_dict[package_name].append( + job_list.get_job_by_name(job_name)) + for package_name, jobs in job_list.packages_dict.items(): + from job.job import WrapperJob + for inner_job in jobs: + inner_job.packed = True + wrapper_job = WrapperJob(package_name, jobs[0].id, Status.SUBMITTED, 0, jobs, + None, + None, jobs[0].platform, as_conf, jobs[0].hold) + job_list.job_package_map[jobs[0].id] = wrapper_job + save = job_list.update_list(as_conf) + job_list.save() + + IO_issues = False + except IOError as e: + IO_issues = True + except BaseException as e: + AutosubmitCritical("Unknown error during the recovery of the job_list",7056,e) + # Restore platforms and try again, to avoid endless loop with failed configuration, a hard limit is set. reconnected = False while not reconnected and main_loop_retrials > 0: @@ -1783,6 +1792,8 @@ class Autosubmit: raise AutosubmitCritical(message, 7000) except AutosubmitCritical as e: raise AutosubmitCritical(e.message, e.code, e.trace) + except IOError as e: + raise AutosubmitError(e.message,e.code,e.trace) except BaseException as e: raise @@ -1921,6 +1932,9 @@ class Autosubmit: raise AutosubmitCritical( "Submission failed, check job,queue and partition specified of job_sections of {0}".format( error_msg[:-1]), 7014, e.message) + except IOError as e: + raise AutosubmitError( + "IO issues ", 6016, e.message) except BaseException as e: raise AutosubmitError( "Submission failed, this can be due a failure on the platform", 6015, e.message) @@ -2727,6 +2741,9 @@ class Autosubmit: Log.result( "Empty dirs on {0} have been successfully deleted".format(p.temp_dir)) + except IOError as e: + raise AutosubmitError( + "I/O Issues", 6016, e.message) except BaseException as e: error = True Log.printlog("The files/dirs on {0} cannot be copied to {1}.\nTRACE:{2}".format( @@ -3360,26 +3377,9 @@ class Autosubmit: Log.info("Changing {0} experiment version from {1} to {2}", expid, as_conf.get_version(), Autosubmit.autosubmit_version) - update_experiment_descrip_version( - expid, version=Autosubmit.autosubmit_version) as_conf.set_version(Autosubmit.autosubmit_version) return True - @staticmethod - def update_description(expid, new_description): - Log.info("Checking if experiment exists...") - check_experiment_exists(expid) - Log.info("Experiment found.") - Log.info("Setting {0} description to '{1}'".format( - expid, new_description)) - result = update_experiment_descrip_version( - expid, description=new_description) - if result: - Log.info("Update completed successfully.") - else: - Log.critical("Update failed.") - return True - @staticmethod def pkl_fix(expid): """ @@ -3776,10 +3776,14 @@ class Autosubmit: date_format = 'H' if date.minute > 1: date_format = 'M' + wrapper_jobs = dict() + if as_conf.get_wrapper_type() == "multi": + for wrapper_section in as_conf.get_wrapper_multi(): + wrapper_jobs[wrapper_section] = as_conf.get_wrapper_jobs(wrapper_section) job_list.generate(date_list, member_list, num_chunks, chunk_ini, parameters, date_format, as_conf.get_retrials(), as_conf.get_default_job_type(), - as_conf.get_wrapper_type(), as_conf.get_wrapper_jobs(), notransitive=notransitive, update_structure=True, run_only_members=run_only_members) + as_conf.get_wrapper_type(), wrapper_jobs, notransitive=notransitive, update_structure=True, run_only_members=run_only_members) if rerun == "true": chunk_list = Autosubmit._create_json( @@ -4993,9 +4997,16 @@ class Autosubmit: date_format = 'H' if date.minute > 1: date_format = 'M' + wrapper_jobs = dict() + wrapper_jobs["wrapper"] = as_conf.get_wrapper_jobs() + if as_conf.get_wrapper_type() == "multi": + for wrapper_section in as_conf.get_wrapper_multi(): + wrapper_jobs[wrapper_section] = as_conf.get_wrapper_jobs(wrapper_section) + + job_list.generate(date_list, as_conf.get_member_list(), as_conf.get_num_chunks(), as_conf.get_chunk_ini(), as_conf.load_parameters(), date_format, as_conf.get_retrials(), - as_conf.get_default_job_type(), as_conf.get_wrapper_type(), as_conf.get_wrapper_jobs(), + as_conf.get_default_job_type(), as_conf.get_wrapper_type(), wrapper_jobs, new=False, notransitive=notransitive, run_only_members=run_only_members) if rerun == "true": diff --git a/autosubmit/config/config_common.py b/autosubmit/config/config_common.py index 03947174b..5b42c15c3 100644 --- a/autosubmit/config/config_common.py +++ b/autosubmit/config/config_common.py @@ -464,12 +464,16 @@ class AutosubmitConfig(object): :return: True if everything is correct, False if it finds any error :rtype: bool """ + Log.info('\nChecking configuration files...') self.ignore_file_path = running_time self.ignore_undefined_platforms = running_time try: self.reload() + except IOError as e: + raise AutosubmitError( + "I/O Issues con config files", 6016, e.message) except (AutosubmitCritical, AutosubmitError) as e: raise except BaseException as e: @@ -533,8 +537,14 @@ class AutosubmitConfig(object): if not self.is_valid_storage_type(): self.wrong_config["Autosubmit"] += [['storage', "TYPE parameter not found"]] - if self.get_wrapper_type() != 'None': + if self.get_wrapper_type().lower() == 'multi': + list_of_wrappers = self.get_wrapper_multi() # list + for wrapper_section_name in self.get_wrapper_multi(): + self.check_wrapper_conf(wrapper_section_name) + elif self.get_wrapper_type() != 'None': self.check_wrapper_conf() + + if self.get_notifications() == 'true': for mail in self.get_mails_to(): if not self.is_valid_mail_address(mail): @@ -788,20 +798,20 @@ class AutosubmitConfig(object): "FILE_PROJECT_CONF parameter is invalid"]] return False - def check_wrapper_conf(self): - if not self.is_valid_jobs_in_wrapper(): - self.wrong_config["Wrapper"] += [['wrapper', + def check_wrapper_conf(self,wrapper_section_name="wrapper"): + if not self.is_valid_jobs_in_wrapper(wrapper_section_name): + self.wrong_config["Wrapper"] += [[wrapper_section_name, "JOBS_IN_WRAPPER contains non-defined jobs. parameter is invalid"]] - if 'horizontal' in self.get_wrapper_type(): + if 'horizontal' in self.get_wrapper_type(wrapper_section_name): if not self._platforms_parser.check_exists(self.get_platform(), 'PROCESSORS_PER_NODE'): self.wrong_config["Wrapper"] += [ - ['wrapper', "PROCESSORS_PER_NODE no exist in the horizontal-wrapper platform"]] + [wrapper_section_name, "PROCESSORS_PER_NODE no exist in the horizontal-wrapper platform"]] if not self._platforms_parser.check_exists(self.get_platform(), 'MAX_PROCESSORS'): - self.wrong_config["Wrapper"] += [['wrapper', + self.wrong_config["Wrapper"] += [[wrapper_section_name, "MAX_PROCESSORS no exist in the horizontal-wrapper platform"]] - if 'vertical' in self.get_wrapper_type(): + if 'vertical' in self.get_wrapper_type(wrapper_section_name): if not self._platforms_parser.check_exists(self.get_platform(), 'MAX_WALLCLOCK'): - self.wrong_config["Wrapper"] += [['wrapper', + self.wrong_config["Wrapper"] += [[wrapper_section_name, "MAX_WALLCLOCK no exist in the vertical-wrapper platform"]] if "Wrapper" not in self.wrong_config: Log.result('wrappers OK') @@ -820,6 +830,8 @@ class AutosubmitConfig(object): self.parser_factory, self._jobs_parser_file) self._exp_parser = AutosubmitConfig.get_parser( self.parser_factory, self._exp_parser_file) + except IOError as e: + raise AutosubmitError("IO issues during the parsing of configuration files",6014,e.message) except Exception as e: raise AutosubmitCritical( "{0} \n Repeated parameter, check if you have any uncommented value that should be commented".format(str(e)), 7014) @@ -1406,86 +1418,100 @@ class AutosubmitConfig(object): else: return False - def get_wrapper_type(self): + def get_wrapper_type(self, wrapper_section_name="wrapper"): """ - Returns what kind of wrapper (VERTICAL, MIXED-VERTICAL, HORIZONTAL, HYBRID, NONE) the user has configured in the autosubmit's config + Returns what kind of wrapper (VERTICAL, MIXED-VERTICAL, HORIZONTAL, HYBRID, MULTI NONE) the user has configured in the autosubmit's config :return: wrapper type (or none) :rtype: string """ - return self._conf_parser.get_option('wrapper', 'TYPE', 'None').lower() + return self._conf_parser.get_option(wrapper_section_name, 'TYPE', 'None').lower() + + def get_wrapper_multi(self): + """ + return the section name of the wrappers + + :return: wrapper section list + :rtype: string + """ + list_of_wrappers = self._conf_parser.get_option("wrapper", 'WRAPPER_LIST', []) + if "," in list_of_wrappers: + list_of_wrappers = list_of_wrappers.split(',') + else: + list_of_wrappers = [] + return list_of_wrappers - def get_wrapper_policy(self): + def get_wrapper_policy(self,wrapper_section_name="wrapper"): """ - Returns what kind of wrapper (VERTICAL, MIXED-VERTICAL, HORIZONTAL, HYBRID, NONE) the user has configured in the autosubmit's config + Returns what kind of policy (flexible, strict, mixed ) the user has configured in the autosubmit's config :return: wrapper type (or none) :rtype: string """ - return self._conf_parser.get_option('wrapper', 'POLICY', 'flexible').lower() + return self._conf_parser.get_option(wrapper_section_name, 'POLICY', 'flexible').lower() - def get_wrapper_jobs(self): + def get_wrapper_jobs(self,wrapper_section_name="wrapper"): """ Returns the jobs that should be wrapped, configured in the autosubmit's config :return: expression (or none) :rtype: string """ - return self._conf_parser.get_option('wrapper', 'JOBS_IN_WRAPPER', 'None') + return self._conf_parser.get_option(wrapper_section_name, 'JOBS_IN_WRAPPER', 'None') - def get_wrapper_queue(self): + def get_wrapper_queue(self,wrapper_section_name="wrapper"): """ Returns the wrapper queue if not defined, will be the one of the first job wrapped :return: expression (or none) :rtype: string """ - return self._conf_parser.get_option('wrapper', 'QUEUE', 'None') + return self._conf_parser.get_option(wrapper_section_name, 'QUEUE', 'None') - def get_min_wrapped_jobs(self): + def get_min_wrapped_jobs(self,wrapper_section_name="wrapper"): """ Returns the minim number of jobs that can be wrapped together as configured in autosubmit's config file :return: minim number of jobs (or total jobs) :rtype: int """ - return int(self._conf_parser.get_option('wrapper', 'MIN_WRAPPED', 2)) + return int(self._conf_parser.get_option(wrapper_section_name, 'MIN_WRAPPED', 2)) - def get_max_wrapped_jobs(self): + def get_max_wrapped_jobs(self,wrapper_section_name="wrapper"): """ Returns the maximum number of jobs that can be wrapped together as configured in autosubmit's config file :return: maximum number of jobs (or total jobs) :rtype: int """ - return int(self._conf_parser.get_option('wrapper', 'MAX_WRAPPED', self.get_total_jobs())) + return int(self._conf_parser.get_option(wrapper_section_name, 'MAX_WRAPPED', self.get_total_jobs())) - def get_wrapper_method(self): + def get_wrapper_method(self,wrapper_section_name="wrapper"): """ Returns the method of make the wrapper :return: method :rtype: string """ - return self._conf_parser.get_option('wrapper', 'METHOD', 'ASThread') + return self._conf_parser.get_option(wrapper_section_name, 'METHOD', 'ASThread') - def get_wrapper_check_time(self): + def get_wrapper_check_time(self,wrapper_section_name="wrapper"): """ Returns time to check the status of jobs in the wrapper :return: wrapper check time :rtype: int """ - return int(self._conf_parser.get_option('wrapper', 'CHECK_TIME_WRAPPER', self.get_safetysleeptime())) + return int(self._conf_parser.get_option(wrapper_section_name, 'CHECK_TIME_WRAPPER', self.get_safetysleeptime())) - def get_wrapper_machinefiles(self): + def get_wrapper_machinefiles(self,wrapper_section_name="wrapper"): """ Returns the strategy for creating the machinefiles in wrapper jobs :return: machinefiles function to use :rtype: string """ - return self._conf_parser.get_option('wrapper', 'MACHINEFILES', '') + return self._conf_parser.get_option(wrapper_section_name, 'MACHINEFILES', '') def get_jobs_sections(self): """ @@ -1547,8 +1573,8 @@ class AutosubmitConfig(object): storage_type = self.get_storage_type() return storage_type in ['pkl', 'db'] - def is_valid_jobs_in_wrapper(self): - expression = self.get_wrapper_jobs() + def is_valid_jobs_in_wrapper(self,wrapper_section_name="wrapper"): + expression = self.get_wrapper_jobs(wrapper_section_name="wrapper") if expression != 'None': parser = self._jobs_parser sections = parser.sections() @@ -1596,6 +1622,8 @@ class AutosubmitConfig(object): try: with open(file_path) as f: parser.read(file_path) + except IOError as exp: + raise except Exception as exp: raise Exception( "{}\n This file and the correctness of its content are necessary.".format(str(exp))) diff --git a/autosubmit/database/db_common.py b/autosubmit/database/db_common.py index dd00ed255..efe5aef7c 100644 --- a/autosubmit/database/db_common.py +++ b/autosubmit/database/db_common.py @@ -194,52 +194,6 @@ def check_experiment_exists(name, error_on_inexistence=True): return True -def update_experiment_descrip_version(name, description=None, version=None): - """ - Updates the experiment's description and/or version - - :param name: experiment name (expid) - :rtype name: str - :param description: experiment new description - :rtype description: str - :param version: experiment autosubmit version - :rtype version: str - :return: If description has been update, True; otherwise, False. - :rtype: bool - """ - if not check_db(): - return False - try: - (conn, cursor) = open_conn() - except DbException as e: - raise AutosubmitCritical( - "Could not establish a connection to the database.", 7001, str(e)) - conn.isolation_level = None - - # Changing default unicode - conn.text_factory = str - # Conditional update - if description is not None and version is not None: - cursor.execute('update experiment set description=:description, autosubmit_version=:version where name=:name', { - 'description': description, 'version': version, 'name': name}) - elif description is not None and version is None: - cursor.execute('update experiment set description=:description where name=:name', { - 'description': description, 'name': name}) - elif version is not None and description is None: - cursor.execute('update experiment set autosubmit_version=:version where name=:name', { - 'version': version, 'name': name}) - else: - raise AutosubmitCritical( - "Not enough data to update {}.".format(name), 7005) - row = cursor.rowcount - close_conn(conn, cursor) - if row == 0: - raise AutosubmitCritical( - "Update on experiment {} failed.".format(name), 7005) - return False - return True - - def get_autosubmit_version(expid): """ Get the minimun autosubmit version needed for the experiment diff --git a/autosubmit/job/job_list.py b/autosubmit/job/job_list.py index ea3a9fa95..b3a26035a 100644 --- a/autosubmit/job/job_list.py +++ b/autosubmit/job/job_list.py @@ -133,7 +133,7 @@ class JobList(object): # print(job.parents) def generate(self, date_list, member_list, num_chunks, chunk_ini, parameters, date_format, default_retrials, - default_job_type, wrapper_type=None, wrapper_jobs=None, new=True, notransitive=False, update_structure=False, run_only_members=[]): + default_job_type, wrapper_type=None, wrapper_jobs=dict(), new=True, notransitive=False, update_structure=False, run_only_members=[]): """ Creates all jobs needed for the current workflow @@ -211,9 +211,12 @@ class JobList(object): job.children.add(jobc) # Perhaps this should be done by default independent of the wrapper_type supplied - if wrapper_type == 'vertical-mixed': - self._ordered_jobs_by_date_member = self._create_sorted_dict_jobs( - wrapper_jobs) + for wrapper_section in wrapper_jobs: + if wrapper_jobs[wrapper_section] != 'None': + self._ordered_jobs_by_date_member[wrapper_section] = self._create_sorted_dict_jobs(wrapper_jobs[wrapper_section]) + else: + self._ordered_jobs_by_date_member[wrapper_section] = {} + @staticmethod def _add_dependencies(date_list, member_list, chunk_list, dic_jobs, jobs_parser, graph, option="DEPENDENCIES"): @@ -685,14 +688,14 @@ class JobList(object): date_format = 'M' return date_format - def get_ordered_jobs_by_date_member(self): + def get_ordered_jobs_by_date_member(self,section): """ Get the dictionary of jobs ordered according to wrapper's expression divided by date and member :return: jobs ordered divided by date and member :rtype: dict """ - return self._ordered_jobs_by_date_member + return self._ordered_jobs_by_date_member[section] def get_completed(self, platform=None, wrapper=False): """ diff --git a/autosubmit/job/job_packager.py b/autosubmit/job/job_packager.py index c97c0b176..22f94bfd5 100644 --- a/autosubmit/job/job_packager.py +++ b/autosubmit/job/job_packager.py @@ -41,6 +41,7 @@ class JobPackager(object): """ def __init__(self, as_config, platform, jobs_list, hold=False): + #self.current_wrapper_section = "wrapper" self._as_config = as_config self._platform = platform self._jobs_list = jobs_list @@ -72,11 +73,24 @@ class JobPackager(object): self.max_jobs = min(self._max_wait_jobs_to_submit, self._max_jobs_to_submit) # These are defined in the [wrapper] section of autosubmit_,conf - self.wrapper_type = self._as_config.get_wrapper_type() - self.wrapper_policy = self._as_config.get_wrapper_policy() - self.wrapper_method = self._as_config.get_wrapper_method().lower() + self.wrapper_type = dict() + self.wrapper_policy = dict() + self.wrapper_method = dict() + self.jobs_in_wrapper = dict() + self.wrapper_type["wrapper"] = self._as_config.get_wrapper_type() + self.wrapper_policy["wrapper"] = self._as_config.get_wrapper_policy() + self.wrapper_method["wrapper"] = self._as_config.get_wrapper_method().lower() + self.jobs_in_wrapper["wrapper"] = self._as_config.get_wrapper_jobs() + if self._as_config.get_wrapper_type() == "multi": + for wrapper_section in self._as_config.get_wrapper_multi(): + self.wrapper_type[wrapper_section] = self._as_config.get_wrapper_type(wrapper_section) + self.wrapper_policy[wrapper_section] = self._as_config.get_wrapper_policy(wrapper_section) + self.wrapper_method[wrapper_section] = self._as_config.get_wrapper_method(wrapper_section).lower() + self.jobs_in_wrapper[wrapper_section] = self._as_config.get_wrapper_jobs(wrapper_section) + + # True or False - self.jobs_in_wrapper = self._as_config.get_wrapper_jobs() + Log.debug( "Number of jobs available: {0}", self._max_wait_jobs_to_submit) if self.hold: @@ -133,7 +147,7 @@ class JobPackager(object): """ Returns the list of the built packages to be submitted - :return: List of packages depending on type of package, JobPackageVertical Object for 'vertical-mixed' or 'vertical'. \n + :return: List of packages depending on type of package, JobPackageVertical Object for 'vertical-mixed' or 'vertical'. :rtype: List() of JobPackageVertical """ packages_to_submit = list() @@ -198,8 +212,7 @@ class JobPackager(object): jobs_to_submit_seq = [ failed_job for failed_job in jobs_to_submit_tmp if failed_job.fail_count > 0] - jobs_to_submit_by_section = self._divide_list_by_section( - jobs_to_submit) + jobs_to_submit_by_section = self._divide_list_by_section(jobs_to_submit) for job in jobs_to_submit_seq: # Failed jobs at least one time job.packed = False @@ -213,12 +226,16 @@ class JobPackager(object): wrapped = False # Only if platform allows wrappers, wrapper type has been correctly defined, and job names for wrappers have been correctly defined # ('None' is a default value) or the correct section is included in the corresponding sections in [wrappers] - if self._platform.allow_wrappers and self.wrapper_type in ['horizontal', 'vertical', 'vertical-mixed', - 'vertical-horizontal', 'horizontal-vertical'] \ - and (self.jobs_in_wrapper == 'None' or section in self.jobs_in_wrapper): + wrapper_defined = False + + for wrapper_section in self.jobs_in_wrapper: + if section in self.jobs_in_wrapper[wrapper_section]: + wrapper_defined = True + self.current_wrapper_section = wrapper_section + break + if wrapper_defined and self._platform.allow_wrappers and self.wrapper_type[self.current_wrapper_section] in ['horizontal', 'vertical','vertical-horizontal', 'horizontal-vertical'] : # Trying to find the value in jobs_parser, if not, default to an autosubmit_.conf value (Looks first in [wrapper] section) - max_wrapped_jobs = int(self._as_config.jobs_parser.get_option( - section, "MAX_WRAPPED", self._as_config.get_max_wrapped_jobs())) + max_wrapped_jobs = int(self._as_config.jobs_parser.get_option(section, "MAX_WRAPPED", self._as_config.get_max_wrapped_jobs(self.current_wrapper_section ))) if '&' not in section: if self._as_config.jobs_parser.has_option(section, 'DEPENDENCIES'): dependencies_keys = self._as_config.jobs_parser.get( @@ -226,7 +243,6 @@ class JobPackager(object): else: dependencies_keys = [] max_wrapper_job_by_section[section] = max_wrapped_jobs - else: multiple_sections = section.split('&') dependencies_keys = [] @@ -243,46 +259,38 @@ class JobPackager(object): for k in dependencies_keys: if "-" in k: k_divided = k.split("-") - if k_divided[0] not in self.jobs_in_wrapper: + if k_divided[0] not in self.jobs_in_wrapper[self.current_wrapper_section]: number = int(k_divided[1].strip(" ")) if number < max_wrapped_jobs: hard_limit_wrapper = number min_wrapped_jobs = min(self._as_config.jobs_parser.get_option( - section, "MIN_WRAPPED", self._as_config.get_min_wrapped_jobs()), hard_limit_wrapper) + section, "MIN_WRAPPED", self._as_config.get_min_wrapped_jobs(wrapper_section)), hard_limit_wrapper) if len(self._jobs_list.jobs_to_run_first) > 0:# Allows to prepare an experiment with TWO_STEP_START and strict policy min_wrapped_jobs = 2 packages_to_submit = [] - if self.wrapper_type in ['vertical', 'vertical-mixed']: + if self.wrapper_type[wrapper_section] == 'vertical': wrapped = True built_packages_tmp = self._build_vertical_packages(jobs_to_submit_by_section[section], max_wrapped_jobs, max_wrapper_job_by_section) - elif self.wrapper_type == 'horizontal': + elif self.wrapper_type[wrapper_section] == 'horizontal': wrapped = True built_packages_tmp = self._build_horizontal_packages(jobs_to_submit_by_section[section], max_wrapped_jobs, section, max_wrapper_job_by_section) - elif self.wrapper_type in ['vertical-horizontal', 'horizontal-vertical']: + elif self.wrapper_type[self.current_wrapper_section] in ['vertical-horizontal', 'horizontal-vertical']: wrapped = True built_packages_tmp = list() built_packages_tmp.append(self._build_hybrid_package( jobs_to_submit_by_section[section], max_wrapped_jobs, section, max_wrapper_job_by_section)) if wrapped: for p in built_packages_tmp: - #if len(self._jobs_list.jobs_to_run_first) > 0: # related to TWO_STEP_START new variable , defined in expdef - # temp_jobs = list() - # for packed_job in p.jobs: - # if packed_job in self._jobs_list.jobs_to_run_first: - # temp_jobs.append(packed_job) - # else: - # packed_job.packed = False - # p.jobs = temp_jobs failed_innerjobs = False # Check failed jobs first for job in p.jobs: if job.fail_count > 0: failed_innerjobs = True break - if failed_innerjobs and str(self.wrapper_policy) == "mixed": + if failed_innerjobs and str(self.wrapper_policy[self.current_wrapper_section]) == "mixed": for job in p.jobs: if job.fail_count == 0: continue @@ -313,12 +321,12 @@ class JobPackager(object): independent_inner_job and parent.status == Status.COMPLETED] if len(tmp) != len(job.parents): deadlock = False - if deadlock and self.wrapper_policy == "strict": + if deadlock and self.wrapper_policy[wrapper_section] == "strict": Log.debug( "Wrapper policy is set to strict, there is a deadlock so autosubmit will sleep a while") for job in p.jobs: job.packed = False - elif deadlock and self.wrapper_policy == "mixed": + elif deadlock and self.wrapper_policy[wrapper_section] == "mixed": Log.debug( "Wrapper policy is set to mixed, there is a deadlock") for job in p.jobs: @@ -332,7 +340,7 @@ class JobPackager(object): else: package = JobPackageSimple([job]) packages_to_submit.append(package) - elif deadlock and self.wrapper_policy != "strict" and self.wrapper_policy != "mixed": + elif deadlock and self.wrapper_policy[wrapper_section] != "strict" and self.wrapper_policy[wrapper_section] != "mixed": Log.debug( "Wrapper policy is set to flexible and there is a deadlock, As will submit the jobs sequentally") for job in p.jobs: @@ -382,10 +390,13 @@ class JobPackager(object): :rtype: Dictionary Key: Section Name, Value: List(Job Object) """ # .jobs_in_wrapper defined in .conf, see constructor. - sections_split = self.jobs_in_wrapper.split() - + sections_split = set() + for jobs_in_wrapper_section in self.jobs_in_wrapper: + sections_split.update(set(self.jobs_in_wrapper[jobs_in_wrapper_section].split())) + sections_split = list(sections_split) jobs_section = dict() for job in jobs_list: + # This iterator will always return None if there is no '&' defined in the section name section = next( (s for s in sections_split if job.section in s and '&' in s), None) @@ -396,10 +407,11 @@ class JobPackager(object): jobs_section[section].append(job) return jobs_section + def _build_horizontal_packages(self, section_list, max_wrapped_jobs, section, max_wrapper_job_by_section): packages = [] horizontal_packager = JobPackagerHorizontal(section_list, self._platform.max_processors, max_wrapped_jobs, - self.max_jobs, self._platform.processors_per_node, self.wrapper_method, max_wrapper_job_by_section=max_wrapper_job_by_section) + self.max_jobs, self._platform.processors_per_node, self.wrapper_method[self.current_wrapper_section], max_wrapper_job_by_section=max_wrapper_job_by_section) package_jobs = horizontal_packager.build_horizontal_package() @@ -412,7 +424,7 @@ class JobPackager(object): jobs_resources = horizontal_packager.components_dict jobs_resources['MACHINEFILES'] = machinefile_function current_package = JobPackageHorizontal( - package_jobs, jobs_resources=jobs_resources, method=self.wrapper_method, configuration=self._as_config) + package_jobs, jobs_resources=jobs_resources, method=self.wrapper_method[self.current_wrapper_section], configuration=self._as_config) packages.append(current_package) return packages @@ -427,6 +439,8 @@ class JobPackager(object): :type max_wrapped_jobs: Integer. \n :param min_wrapped_jobs: Number of maximum jobs that can be wrapped (Can be user defined), per section. \n :type min_wrapped_jobs: Integer. \n + :param wrapper_section: Current Section + :type string :return: List of Wrapper Packages, Dictionary that details dependencies. \n :rtype: List() of JobPackageVertical(), Dictionary Key: String, Value: (Dictionary Key: Variable Name, Value: String/Int) """ @@ -435,16 +449,9 @@ class JobPackager(object): if self.max_jobs > 0: if job.packed is False: job.packed = True - if self.wrapper_type == 'vertical-mixed': - dict_jobs = self._jobs_list.get_ordered_jobs_by_date_member() - job_vertical_packager = JobPackagerVerticalMixed(dict_jobs, job, [job], job.wallclock, self.max_jobs, - max_wrapped_jobs, self._platform.max_wallclock, max_wrapper_job_by_section) - else: - job_vertical_packager = JobPackagerVerticalSimple([job], job.wallclock, self.max_jobs, - max_wrapped_jobs, self._platform.max_wallclock, max_wrapper_job_by_section) - - jobs_list = job_vertical_packager.build_vertical_package( - job) + dict_jobs = self._jobs_list.get_ordered_jobs_by_date_member(self.current_wrapper_section) + job_vertical_packager = JobPackagerVerticalMixed(dict_jobs, job, [job], job.wallclock, self.max_jobs,max_wrapped_jobs, self._platform.max_wallclock, max_wrapper_job_by_section) + jobs_list = job_vertical_packager.build_vertical_package(job) if job.status is Status.READY: packages.append(JobPackageVertical( @@ -465,7 +472,7 @@ class JobPackager(object): ## Create the horizontal ## horizontal_packager = JobPackagerHorizontal(jobs_list, self._platform.max_processors, max_wrapped_jobs, self.max_jobs, self._platform.processors_per_node, max_wrapper_job_by_section=max_wrapper_job_by_section) - if self.wrapper_type == 'vertical-horizontal': + if self.wrapper_type[self.current_wrapper_section] == 'vertical-horizontal': return self._build_vertical_horizontal_package(horizontal_packager, jobs_resources) else: return self._build_horizontal_vertical_package(horizontal_packager, section, jobs_resources) @@ -520,7 +527,7 @@ class JobPackager(object): for job in current_package[level]: job.level = level return JobPackageVerticalHorizontal(current_package, total_processors, total_wallclock, - jobs_resources=jobs_resources, method=self.wrapper_method, configuration=self._as_config) + jobs_resources=jobs_resources, method=self.wrapper_method[self.current_wrapper_section], configuration=self._as_config) class JobPackagerVertical(object): diff --git a/autosubmit/platforms/paramiko_platform.py b/autosubmit/platforms/paramiko_platform.py index 34090fb51..c811b2f46 100644 --- a/autosubmit/platforms/paramiko_platform.py +++ b/autosubmit/platforms/paramiko_platform.py @@ -86,7 +86,7 @@ class ParamikoPlatform(Platform): except EOFError as e: raise AutosubmitError("[{0}] not alive. Host: {1}".format( self.name, self.host), 6002, e.message) - except (AutosubmitError,AutosubmitCritical): + except (AutosubmitError,AutosubmitCritical,IOError): raise except BaseException as e: raise AutosubmitError("[{0}] connection failed for host: {1}".format(self.name, self.host), 6002, e.message) @@ -164,6 +164,9 @@ class ParamikoPlatform(Platform): self.transport.connect(username=self.user) self._ftpChannel = self._ssh.open_sftp() self.connected = True + except IOError as e: + raise AutosubmitError( + "File can't be located due an slow connection", 6016, e.message) except BaseException as e: self.connected = False if "Authentication failed." in e.message: @@ -653,6 +656,8 @@ class ParamikoPlatform(Platform): raise except AutosubmitError as e: raise + except IOError as e: + raise AutosubmitError(e.message,6016) except BaseException as e: raise AutosubmitError('Command {0} in {1} warning: {2}'.format( command, self.host, '\n'.join(stderr_readlines)), 6005, e.message) -- GitLab From 87e47dd4b06850cfa3866aac2b1f983ae80c79ce Mon Sep 17 00:00:00 2001 From: dbeltran Date: Fri, 7 May 2021 11:48:01 +0200 Subject: [PATCH 11/22] IO ISSUES --- bin/autosubmit | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/bin/autosubmit b/bin/autosubmit index d0e8d169c..1c0a70549 100755 --- a/bin/autosubmit +++ b/bin/autosubmit @@ -22,7 +22,7 @@ import os import sys import traceback -from log.log import Log, AutosubmitCritical +from log.log import Log, AutosubmitCritical , AutosubmitError scriptdir = os.path.abspath(os.path.dirname(sys.argv[0])) assert sys.path[0] == scriptdir @@ -37,15 +37,21 @@ def main(): try: Autosubmit.parse_args() os._exit(0) + except AutosubmitError as e: + if e.trace is not None and len(e.trace) > 0: + Log.error("Trace: {0}", e.trace) + Log.critical("{1} [eCode={0}]", e.code, e.message) + Log.info("More info at https://autosubmit.readthedocs.io/en/latest/faq.html") + os._exit(1) except AutosubmitCritical as e: - if e.trace is not None: + if e.trace is not None and len(e.trace) > 0: Log.error("Trace: {0}", e.trace) Log.critical("{1} [eCode={0}]", e.code, e.message) Log.info("More info at https://autosubmit.readthedocs.io/en/latest/faq.html") os._exit(1) except Exception as e: - Log.error("Trace: {0}", str(e)) - if "temporarily unavailable" in str(e): + Log.error("Trace: {0}", str(e.message)) + if "temporarily unavailable" in str(e.message): Log.critical( "Another instance of autosubmit is running on this experiment. If this is not the case, delete autosubmit.lock", 7000) else: @@ -55,4 +61,4 @@ def main(): if __name__ == "__main__": - main() + main() \ No newline at end of file -- GitLab From 9c802230a9522e0d684fc4c491f921999f3e75e2 Mon Sep 17 00:00:00 2001 From: dbeltran Date: Fri, 7 May 2021 16:42:03 +0200 Subject: [PATCH 12/22] Fixed an issue with solo wrappers --- autosubmit/autosubmit.py | 2 ++ autosubmit/job/job_list.py | 4 +++- autosubmit/job/job_packager.py | 2 ++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/autosubmit/autosubmit.py b/autosubmit/autosubmit.py index ac352d5b0..d59067f12 100644 --- a/autosubmit/autosubmit.py +++ b/autosubmit/autosubmit.py @@ -3780,6 +3780,8 @@ class Autosubmit: if as_conf.get_wrapper_type() == "multi": for wrapper_section in as_conf.get_wrapper_multi(): wrapper_jobs[wrapper_section] = as_conf.get_wrapper_jobs(wrapper_section) + wrapper_jobs["wrapper"] = as_conf.get_wrapper_jobs("wrapper") + job_list.generate(date_list, member_list, num_chunks, chunk_ini, parameters, date_format, as_conf.get_retrials(), as_conf.get_default_job_type(), diff --git a/autosubmit/job/job_list.py b/autosubmit/job/job_list.py index b3a26035a..9a6a5b364 100644 --- a/autosubmit/job/job_list.py +++ b/autosubmit/job/job_list.py @@ -216,6 +216,7 @@ class JobList(object): self._ordered_jobs_by_date_member[wrapper_section] = self._create_sorted_dict_jobs(wrapper_jobs[wrapper_section]) else: self._ordered_jobs_by_date_member[wrapper_section] = {} + pass @staticmethod @@ -695,7 +696,8 @@ class JobList(object): :return: jobs ordered divided by date and member :rtype: dict """ - return self._ordered_jobs_by_date_member[section] + if len(self._ordered_jobs_by_date_member) > 0: + return self._ordered_jobs_by_date_member[section] def get_completed(self, platform=None, wrapper=False): """ diff --git a/autosubmit/job/job_packager.py b/autosubmit/job/job_packager.py index 22f94bfd5..af6aaed58 100644 --- a/autosubmit/job/job_packager.py +++ b/autosubmit/job/job_packager.py @@ -89,6 +89,7 @@ class JobPackager(object): self.jobs_in_wrapper[wrapper_section] = self._as_config.get_wrapper_jobs(wrapper_section) + # True or False Log.debug( @@ -449,6 +450,7 @@ class JobPackager(object): if self.max_jobs > 0: if job.packed is False: job.packed = True + dict_jobs = self._jobs_list.get_ordered_jobs_by_date_member(self.current_wrapper_section) job_vertical_packager = JobPackagerVerticalMixed(dict_jobs, job, [job], job.wallclock, self.max_jobs,max_wrapped_jobs, self._platform.max_wallclock, max_wrapper_job_by_section) jobs_list = job_vertical_packager.build_vertical_package(job) -- GitLab From 4c09117baebb96977a1cb1fb5bf95a62c42c6cd7 Mon Sep 17 00:00:00 2001 From: dbeltran Date: Mon, 10 May 2021 13:05:11 +0200 Subject: [PATCH 13/22] JOB PACKAGES TEST PIPELINE FIX --- autosubmit/job/job_packager.py | 13 +++--- test/unit/..db | Bin 0 -> 8192 bytes test/unit/test_wrappers.py | 73 +++++++++++++++++++-------------- 3 files changed, 50 insertions(+), 36 deletions(-) create mode 100644 test/unit/..db diff --git a/autosubmit/job/job_packager.py b/autosubmit/job/job_packager.py index af6aaed58..9f95e65a1 100644 --- a/autosubmit/job/job_packager.py +++ b/autosubmit/job/job_packager.py @@ -41,11 +41,16 @@ class JobPackager(object): """ def __init__(self, as_config, platform, jobs_list, hold=False): - #self.current_wrapper_section = "wrapper" + self.current_wrapper_section = "wrapper" self._as_config = as_config self._platform = platform self._jobs_list = jobs_list self.hold = hold + # These are defined in the [wrapper] section of autosubmit_,conf + self.wrapper_type = dict() + self.wrapper_policy = dict() + self.wrapper_method = dict() + self.jobs_in_wrapper = dict() # Submitted + Queuing Jobs for specific Platform queuing_jobs = jobs_list.get_queuing(platform) # We now consider the running jobs count @@ -72,11 +77,7 @@ class JobPackager(object): self._max_jobs_to_submit = self._max_jobs_to_submit if self._max_jobs_to_submit > 0 else 0 self.max_jobs = min(self._max_wait_jobs_to_submit, self._max_jobs_to_submit) - # These are defined in the [wrapper] section of autosubmit_,conf - self.wrapper_type = dict() - self.wrapper_policy = dict() - self.wrapper_method = dict() - self.jobs_in_wrapper = dict() + self.wrapper_type["wrapper"] = self._as_config.get_wrapper_type() self.wrapper_policy["wrapper"] = self._as_config.get_wrapper_policy() self.wrapper_method["wrapper"] = self._as_config.get_wrapper_method().lower() diff --git a/test/unit/..db b/test/unit/..db new file mode 100644 index 0000000000000000000000000000000000000000..08d5b92dca520b433bccbe2986ec5ad7c67bc3f2 GIT binary patch literal 8192 zcmeI$y$ZrG5C`x}BO-{zMI3ZUHwEd^7qCjVF52#;#R!FdNL%|-F20s8;B1PPZaNG9 zBOiC+rr(zH4_;C$c`nK Date: Mon, 10 May 2021 13:16:12 +0200 Subject: [PATCH 14/22] JOB PACKAGES TEST PIPELINE FIX --- test/unit/test_wrappers.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/unit/test_wrappers.py b/test/unit/test_wrappers.py index bafd311a5..b4ee151a8 100644 --- a/test/unit/test_wrappers.py +++ b/test/unit/test_wrappers.py @@ -461,6 +461,10 @@ class TestWrappers(TestCase): d1_m1_1_s3 = self.job_list.get_job_by_name('expid_d1_m1_1_s3') d1_m2_1_s3 = self.job_list.get_job_by_name('expid_d1_m2_1_s3') + self.job_list._ordered_jobs_by_date_member["wrapper"]["d1"] = dict() + self.job_list._ordered_jobs_by_date_member["wrapper"]["d1"]["m1"] = [d1_m1_1_s3] + + self.job_list._ordered_jobs_by_date_member["wrapper"]["d1"]["m2"] = [d1_m2_1_s3] section_list = [d1_m1_1_s3, d1_m2_1_s3] -- GitLab From d807ab59762d51a47f0f04527d36c90eb79f689d Mon Sep 17 00:00:00 2001 From: dbeltran Date: Mon, 10 May 2021 15:50:46 +0200 Subject: [PATCH 15/22] JOB PACKAGES TEST PIPELINE FIX --- autosubmit/job/job_list.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/autosubmit/job/job_list.py b/autosubmit/job/job_list.py index 9a6a5b364..3cdb29426 100644 --- a/autosubmit/job/job_list.py +++ b/autosubmit/job/job_list.py @@ -127,10 +127,6 @@ class JobList(object): old_job_list_names = [job.name for job in old_job_list] self._job_list = [job for job in old_job_list if len( job.parents) == 0 or len(set(old_job_list_names).intersection(set([jobp.name for jobp in job.parents]))) == len(job.parents)] - # for job in self._job_list: - # print("{0} {1}".format( - # job.name, Status.VALUE_TO_KEY[job.status])) - # print(job.parents) def generate(self, date_list, member_list, num_chunks, chunk_ini, parameters, date_format, default_retrials, default_job_type, wrapper_type=None, wrapper_jobs=dict(), new=True, notransitive=False, update_structure=False, run_only_members=[]): -- GitLab From 6f54ff9b3e0ff1365b897236624c1b9daf8268b6 Mon Sep 17 00:00:00 2001 From: dbeltran Date: Fri, 14 May 2021 10:35:59 +0200 Subject: [PATCH 16/22] Fixes job_packages when using under multimode --- autosubmit/autosubmit.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/autosubmit/autosubmit.py b/autosubmit/autosubmit.py index d59067f12..6f68e3c5c 100644 --- a/autosubmit/autosubmit.py +++ b/autosubmit/autosubmit.py @@ -1702,6 +1702,10 @@ class Autosubmit: packages_persistence = JobPackagePersistence(os.path.join( BasicConfig.LOCAL_ROOT_DIR, expid, "pkl"), "job_packages_" + expid) packages = packages_persistence.load() + if len(job_list.job_packages_dict) > 0: + if len(packages) == 0: + sleep(5) + raise IOError for (exp_id, package_name, job_name) in packages: if package_name not in job_list.packages_dict: job_list.packages_dict[package_name] = [] -- GitLab From b0d4fc0bcf89ca907562fd24bb0dbb293fcfa2bd Mon Sep 17 00:00:00 2001 From: dbeltran Date: Fri, 14 May 2021 11:39:58 +0200 Subject: [PATCH 17/22] Found an stupid bug regarding submission, this will make that the submission process take less Autosubmit loop to be completed. --- autosubmit/job/job_packager.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/autosubmit/job/job_packager.py b/autosubmit/job/job_packager.py index 9f95e65a1..031011256 100644 --- a/autosubmit/job/job_packager.py +++ b/autosubmit/job/job_packager.py @@ -224,6 +224,7 @@ class JobPackager(object): package = JobPackageSimple([job]) packages_to_submit.append(package) + for section in jobs_to_submit_by_section: wrapped = False # Only if platform allows wrappers, wrapper type has been correctly defined, and job names for wrappers have been correctly defined @@ -269,7 +270,7 @@ class JobPackager(object): section, "MIN_WRAPPED", self._as_config.get_min_wrapped_jobs(wrapper_section)), hard_limit_wrapper) if len(self._jobs_list.jobs_to_run_first) > 0:# Allows to prepare an experiment with TWO_STEP_START and strict policy min_wrapped_jobs = 2 - packages_to_submit = [] + if self.wrapper_type[wrapper_section] == 'vertical': wrapped = True built_packages_tmp = self._build_vertical_packages(jobs_to_submit_by_section[section], -- GitLab From c59014f1acc63293f0809053542dc879ac981555 Mon Sep 17 00:00:00 2001 From: dbeltran Date: Mon, 17 May 2021 12:39:24 +0200 Subject: [PATCH 18/22] Added Generate Function to be used under -cw since I find many bugs regarding an specific job_list created along vertical(mixed) packages --- autosubmit/autosubmit.py | 49 ++++++++++++++++++++++++++-------- autosubmit/job/job_list.py | 37 ++++++++++++++++++++----- autosubmit/job/job_packager.py | 1 - 3 files changed, 68 insertions(+), 19 deletions(-) diff --git a/autosubmit/autosubmit.py b/autosubmit/autosubmit.py index 6f68e3c5c..018c1a734 100644 --- a/autosubmit/autosubmit.py +++ b/autosubmit/autosubmit.py @@ -1200,27 +1200,50 @@ class Autosubmit: :return: Nothing\n :rtype: \n """ - + Log.warning("Generating the auxiliar job_list used for the -CW flag.") job_list._job_list = jobs_filtered - # Current choice is Paramiko Submitter + parameters = as_conf.load_parameters() + date_list = as_conf.get_date_list() + if len(date_list) != len(set(date_list)): + raise AutosubmitCritical( + 'There are repeated start dates!', 7014) + num_chunks = as_conf.get_num_chunks() + chunk_ini = as_conf.get_chunk_ini() + member_list = as_conf.get_member_list() + run_only_members = as_conf.get_member_list(run_only=True) + date_format = '' + if as_conf.get_chunk_size_unit() is 'hour': + date_format = 'H' + for date in date_list: + if date.hour > 1: + date_format = 'H' + if date.minute > 1: + date_format = 'M' + wrapper_jobs = dict() + if as_conf.get_wrapper_type() == "multi": + for wrapper_section in as_conf.get_wrapper_multi(): + wrapper_jobs[wrapper_section] = as_conf.get_wrapper_jobs(wrapper_section) + wrapper_jobs["wrapper"] = as_conf.get_wrapper_jobs("wrapper") + + job_list.generate(date_list, member_list, num_chunks, chunk_ini, parameters, date_format, + as_conf.get_retrials(), + as_conf.get_default_job_type(), + as_conf.get_wrapper_type(), wrapper_jobs, + update_structure=True, run_only_members=run_only_members,show_log=True) + Log.warning("Aux Job_list was generated successfully") submitter = Autosubmit._get_submitter(as_conf) - # Load platforms saves a dictionary Key: Platform Name, Value: Corresponding Platform Object submitter.load_platforms(as_conf) - # The value is retrieved from DEFAULT.HPCARCH hpcarch = as_conf.get_platform() Autosubmit._load_parameters(as_conf, job_list, submitter.platforms) platforms_to_test = set() for job in job_list.get_job_list(): if job.platform_name is None: job.platform_name = hpcarch - # Assign platform objects to each job - # noinspection PyTypeChecker job.platform = submitter.platforms[job.platform_name.lower()] - # Add object to set - # noinspection PyTypeChecker platforms_to_test.add(job.platform) - # case setstatus + job_list.check_scripts(as_conf) + job_list.update_list(as_conf, False) # Loading parameters again Autosubmit._load_parameters(as_conf, job_list, submitter.platforms) @@ -1228,8 +1251,11 @@ class Autosubmit: unparsed_two_step_start = as_conf.get_parse_two_step_start() if unparsed_two_step_start != "": job_list.parse_two_step_start(unparsed_two_step_start) + while job_list.get_active(): Autosubmit.submit_ready_jobs(as_conf, job_list, platforms_to_test, packages_persistence, True, only_wrappers, hold=False) + #for job in job_list.get_uncompleted_and_not_waiting(): + # job.status = Status.COMPLETED job_list.update_list(as_conf, False) @staticmethod @@ -2144,8 +2170,7 @@ class Autosubmit: job_list_wrappers = copy.deepcopy(job_list) jobs_wr_aux = copy.deepcopy(jobs) jobs_wr = [] - [jobs_wr.append(job) for job in jobs_wr_aux if ( - job.status == Status.READY or job.status == Status.WAITING)] + [jobs_wr.append(job) for job in jobs_wr_aux ] for job in jobs_wr: for child in job.children: if child not in jobs_wr: @@ -2157,6 +2182,8 @@ class Autosubmit: for job in jobs_wr: job.children = job.children - referenced_jobs_to_remove job.parents = job.parents - referenced_jobs_to_remove + + Autosubmit.generate_scripts_andor_wrappers(as_conf, job_list_wrappers, jobs_wr, packages_persistence, True) diff --git a/autosubmit/job/job_list.py b/autosubmit/job/job_list.py index 3cdb29426..880c61bfd 100644 --- a/autosubmit/job/job_list.py +++ b/autosubmit/job/job_list.py @@ -129,7 +129,7 @@ class JobList(object): job.parents) == 0 or len(set(old_job_list_names).intersection(set([jobp.name for jobp in job.parents]))) == len(job.parents)] def generate(self, date_list, member_list, num_chunks, chunk_ini, parameters, date_format, default_retrials, - default_job_type, wrapper_type=None, wrapper_jobs=dict(), new=True, notransitive=False, update_structure=False, run_only_members=[]): + default_job_type, wrapper_type=None, wrapper_jobs=dict(), new=True, notransitive=False, update_structure=False, run_only_members=[],show_log=True): """ Creates all jobs needed for the current workflow @@ -169,8 +169,8 @@ class JobList(object): chunk_list, date_format, default_retrials) self._dic_jobs = dic_jobs priority = 0 - - Log.info("Creating jobs...") + if show_log: + Log.info("Creating jobs...") jobs_data = dict() # jobs_data includes the name of the .our and .err files of the job in LOG_expid if not new: @@ -180,11 +180,13 @@ class JobList(object): jobs_data = {str(row[0]): row for row in self.backup_load()} self._create_jobs(dic_jobs, jobs_parser, priority, default_job_type, jobs_data) - Log.info("Adding dependencies...") + if show_log: + Log.info("Adding dependencies...") self._add_dependencies(date_list, member_list, chunk_list, dic_jobs, jobs_parser, self.graph) - Log.info("Removing redundant dependencies...") + if show_log: + Log.info("Removing redundant dependencies...") self.update_genealogy( new, notransitive, update_structure=update_structure) for job in self._job_list: @@ -193,8 +195,9 @@ class JobList(object): # Checking for member constraints if len(run_only_members) > 0: # Found - Log.info("Considering only members {0}".format( - str(run_only_members))) + if show_log: + Log.info("Considering only members {0}".format( + str(run_only_members))) old_job_list = [job for job in self._job_list] self._job_list = [ job for job in old_job_list if job.member is None or job.member in run_only_members or job.status not in [Status.WAITING, Status.READY]] @@ -685,6 +688,8 @@ class JobList(object): date_format = 'M' return date_format + def copy_ordered_jobs_by_date_member(self): + pass def get_ordered_jobs_by_date_member(self,section): """ Get the dictionary of jobs ordered according to wrapper's expression divided by date and member @@ -730,6 +735,24 @@ class JobList(object): else: return uncompleted_jobs + def get_uncompleted_and_not_waiting(self, platform=None, wrapper=False): + """ + Returns a list of completed jobs and waiting + + :param platform: job platform + :type platform: HPCPlatform + :return: completed jobs + :rtype: list + """ + uncompleted_jobs = [job for job in self._job_list if + (platform is None or job.platform.name.lower() == platform.name.lower()) and + job.status != Status.COMPLETED and job.status != Status.WAITING] + + if wrapper: + return [job for job in uncompleted_jobs if job.packed is False] + else: + return uncompleted_jobs + def get_submitted(self, platform=None, hold=False, wrapper=False): """ Returns a list of submitted jobs diff --git a/autosubmit/job/job_packager.py b/autosubmit/job/job_packager.py index 031011256..a0d7859c4 100644 --- a/autosubmit/job/job_packager.py +++ b/autosubmit/job/job_packager.py @@ -452,7 +452,6 @@ class JobPackager(object): if self.max_jobs > 0: if job.packed is False: job.packed = True - dict_jobs = self._jobs_list.get_ordered_jobs_by_date_member(self.current_wrapper_section) job_vertical_packager = JobPackagerVerticalMixed(dict_jobs, job, [job], job.wallclock, self.max_jobs,max_wrapped_jobs, self._platform.max_wallclock, max_wrapper_job_by_section) jobs_list = job_vertical_packager.build_vertical_package(job) -- GitLab From a238843c61384a73ec12bf6c665d08d415286f4c Mon Sep 17 00:00:00 2001 From: dbeltran Date: Tue, 18 May 2021 12:24:44 +0200 Subject: [PATCH 19/22] minor fix for names in a wrapper --- autosubmit/job/job_packager.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/autosubmit/job/job_packager.py b/autosubmit/job/job_packager.py index a0d7859c4..18811eae4 100644 --- a/autosubmit/job/job_packager.py +++ b/autosubmit/job/job_packager.py @@ -267,15 +267,15 @@ class JobPackager(object): if number < max_wrapped_jobs: hard_limit_wrapper = number min_wrapped_jobs = min(self._as_config.jobs_parser.get_option( - section, "MIN_WRAPPED", self._as_config.get_min_wrapped_jobs(wrapper_section)), hard_limit_wrapper) + section, "MIN_WRAPPED", self._as_config.get_min_wrapped_jobs(self.current_wrapper_section)), hard_limit_wrapper) if len(self._jobs_list.jobs_to_run_first) > 0:# Allows to prepare an experiment with TWO_STEP_START and strict policy min_wrapped_jobs = 2 - if self.wrapper_type[wrapper_section] == 'vertical': + if self.wrapper_type[self.current_wrapper_section] == 'vertical': wrapped = True built_packages_tmp = self._build_vertical_packages(jobs_to_submit_by_section[section], max_wrapped_jobs, max_wrapper_job_by_section) - elif self.wrapper_type[wrapper_section] == 'horizontal': + elif self.wrapper_type[self.current_wrapper_section] == 'horizontal': wrapped = True built_packages_tmp = self._build_horizontal_packages(jobs_to_submit_by_section[section], max_wrapped_jobs, section, max_wrapper_job_by_section) @@ -324,12 +324,12 @@ class JobPackager(object): independent_inner_job and parent.status == Status.COMPLETED] if len(tmp) != len(job.parents): deadlock = False - if deadlock and self.wrapper_policy[wrapper_section] == "strict": + if deadlock and self.wrapper_policy[self.current_wrapper_section] == "strict": Log.debug( "Wrapper policy is set to strict, there is a deadlock so autosubmit will sleep a while") for job in p.jobs: job.packed = False - elif deadlock and self.wrapper_policy[wrapper_section] == "mixed": + elif deadlock and self.wrapper_policy[self.current_wrapper_section] == "mixed": Log.debug( "Wrapper policy is set to mixed, there is a deadlock") for job in p.jobs: @@ -343,7 +343,7 @@ class JobPackager(object): else: package = JobPackageSimple([job]) packages_to_submit.append(package) - elif deadlock and self.wrapper_policy[wrapper_section] != "strict" and self.wrapper_policy[wrapper_section] != "mixed": + elif deadlock and self.wrapper_policy[self.current_wrapper_section] != "strict" and self.wrapper_policy[self.current_wrapper_section] != "mixed": Log.debug( "Wrapper policy is set to flexible and there is a deadlock, As will submit the jobs sequentally") for job in p.jobs: -- GitLab From 86c11597addda5b5713bb055e638e24325f91bb7 Mon Sep 17 00:00:00 2001 From: dbeltran Date: Wed, 19 May 2021 13:39:00 +0200 Subject: [PATCH 20/22] Extracted the creation of sorted dict from generation dictionary --- autosubmit/autosubmit.py | 7 +------ autosubmit/job/job_list.py | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/autosubmit/autosubmit.py b/autosubmit/autosubmit.py index 018c1a734..e56ae9a31 100644 --- a/autosubmit/autosubmit.py +++ b/autosubmit/autosubmit.py @@ -1224,12 +1224,6 @@ class Autosubmit: for wrapper_section in as_conf.get_wrapper_multi(): wrapper_jobs[wrapper_section] = as_conf.get_wrapper_jobs(wrapper_section) wrapper_jobs["wrapper"] = as_conf.get_wrapper_jobs("wrapper") - - job_list.generate(date_list, member_list, num_chunks, chunk_ini, parameters, date_format, - as_conf.get_retrials(), - as_conf.get_default_job_type(), - as_conf.get_wrapper_type(), wrapper_jobs, - update_structure=True, run_only_members=run_only_members,show_log=True) Log.warning("Aux Job_list was generated successfully") submitter = Autosubmit._get_submitter(as_conf) submitter.load_platforms(as_conf) @@ -1251,6 +1245,7 @@ class Autosubmit: unparsed_two_step_start = as_conf.get_parse_two_step_start() if unparsed_two_step_start != "": job_list.parse_two_step_start(unparsed_two_step_start) + job_list.create_dictionary(date_list, member_list, num_chunks, chunk_ini, date_format, as_conf.get_retrials(), wrapper_jobs ) while job_list.get_active(): Autosubmit.submit_ready_jobs(as_conf, job_list, platforms_to_test, packages_persistence, True, only_wrappers, hold=False) diff --git a/autosubmit/job/job_list.py b/autosubmit/job/job_list.py index 880c61bfd..6b4ea33e7 100644 --- a/autosubmit/job/job_list.py +++ b/autosubmit/job/job_list.py @@ -128,6 +128,20 @@ class JobList(object): self._job_list = [job for job in old_job_list if len( job.parents) == 0 or len(set(old_job_list_names).intersection(set([jobp.name for jobp in job.parents]))) == len(job.parents)] + def create_dictionary(self, date_list, member_list, num_chunks, chunk_ini, date_format, default_retrials, wrapper_jobs): + chunk_list = range(chunk_ini, num_chunks + 1) + + jobs_parser = self._get_jobs_parser() + dic_jobs = DicJobs(self, jobs_parser, date_list, member_list, + chunk_list, date_format, default_retrials) + self._dic_jobs = dic_jobs + # Perhaps this should be done by default independent of the wrapper_type supplied + for wrapper_section in wrapper_jobs: + if wrapper_jobs[wrapper_section] != 'None': + self._ordered_jobs_by_date_member[wrapper_section] = self._create_sorted_dict_jobs(wrapper_jobs[wrapper_section]) + else: + self._ordered_jobs_by_date_member[wrapper_section] = {} + pass def generate(self, date_list, member_list, num_chunks, chunk_ini, parameters, date_format, default_retrials, default_job_type, wrapper_type=None, wrapper_jobs=dict(), new=True, notransitive=False, update_structure=False, run_only_members=[],show_log=True): """ -- GitLab From 114a36ae8f603d6626315bf9a2f1c27f55a8074b Mon Sep 17 00:00:00 2001 From: dbeltran Date: Thu, 20 May 2021 10:41:29 +0200 Subject: [PATCH 21/22] Fixed a bug related to max_wrapped on horizontal-vertical --- autosubmit/job/job_packager.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/autosubmit/job/job_packager.py b/autosubmit/job/job_packager.py index 18811eae4..961de783b 100644 --- a/autosubmit/job/job_packager.py +++ b/autosubmit/job/job_packager.py @@ -475,6 +475,7 @@ class JobPackager(object): ## Create the horizontal ## horizontal_packager = JobPackagerHorizontal(jobs_list, self._platform.max_processors, max_wrapped_jobs, self.max_jobs, self._platform.processors_per_node, max_wrapper_job_by_section=max_wrapper_job_by_section) + if self.wrapper_type[self.current_wrapper_section] == 'vertical-horizontal': return self._build_vertical_horizontal_package(horizontal_packager, jobs_resources) else: @@ -514,12 +515,19 @@ class JobPackager(object): horizontal_package = horizontal_packager.build_horizontal_package() total_processors = horizontal_packager.total_processors current_package = [] - ## Create the vertical ## + actual_wrapped_jobs = len(horizontal_package) + remaining_wrapped_job_by_section = horizontal_packager.max_wrapper_job_by_section + + for job in horizontal_package: + for section in horizontal_packager.max_wrapper_job_by_section: + if job.section == section: + remaining_wrapped_job_by_section[section] = remaining_wrapped_job_by_section[section] - 1 + for job in horizontal_package: job_list = JobPackagerVerticalSimple([job], job.wallclock, self.max_jobs, - horizontal_packager.max_wrapped_jobs, - self._platform.max_wallclock, horizontal_packager.max_wrapper_job_by_section).build_vertical_package(job) + horizontal_packager.max_wrapped_jobs-actual_wrapped_jobs, + self._platform.max_wallclock, remaining_wrapped_job_by_section).build_vertical_package(job) current_package.append(job_list) -- GitLab From 18b3d32e7f02442f20bb7b258b67d1fd5bcd5ae3 Mon Sep 17 00:00:00 2001 From: dbeltran Date: Thu, 20 May 2021 16:22:57 +0200 Subject: [PATCH 22/22] TODO ADDED --- autosubmit/job/job_packager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autosubmit/job/job_packager.py b/autosubmit/job/job_packager.py index 961de783b..e619c6691 100644 --- a/autosubmit/job/job_packager.py +++ b/autosubmit/job/job_packager.py @@ -518,7 +518,7 @@ class JobPackager(object): ## Create the vertical ## actual_wrapped_jobs = len(horizontal_package) remaining_wrapped_job_by_section = horizontal_packager.max_wrapper_job_by_section - + #TODO create horizontal and vertical limit for job in horizontal_package: for section in horizontal_packager.max_wrapper_job_by_section: if job.section == section: -- GitLab