From 6ed4b5cbbe75e55c3feaebd0eeda1267809c0d1a Mon Sep 17 00:00:00 2001 From: Bas van der Vlies Date: Sat, 13 Jul 2024 17:58:14 +0200 Subject: [PATCH 1/3] slurm 24.05.X support The code compiles amd I can run our python slurm utils. For now I have disabled the `epilog|prolgo' cconfigs they have changed for `char *` tp `char **`. Could not find a function for it so that is still on the todo list --- pyslurm/__version__.py | 2 +- pyslurm/core/job/job.pxd | 2 +- pyslurm/core/job/job.pyx | 6 +- pyslurm/core/job/submission.pyx | 1 - pyslurm/core/node.pyx | 17 -- pyslurm/core/partition.pyx | 26 ++-- pyslurm/db/job.pxd | 2 +- pyslurm/db/job.pyx | 2 +- pyslurm/db/step.pxd | 2 +- pyslurm/db/util.pxd | 4 +- pyslurm/pydefines/slurm_defines.pxi | 14 -- pyslurm/pydefines/slurm_enums.pxi | 5 - pyslurm/pydefines/slurmdb_defines.pxi | 1 - pyslurm/pyslurm.pyx | 66 +++----- pyslurm/slurm/__init__.pxd | 9 +- pyslurm/slurm/__init__.pyx | 8 +- pyslurm/slurm/extra.pxi | 2 +- pyslurm/slurm/slurm.h.pxi | 215 ++++++++++++++++++-------- pyslurm/slurm/slurm_errno.h.pxi | 13 +- pyslurm/slurm/slurmdb.h.pxi | 43 ++++-- pyslurm/utils/uint.pxd | 2 + pyslurm/utils/uint.pyx | 4 + setup.py | 2 +- 23 files changed, 246 insertions(+), 202 deletions(-) diff --git a/pyslurm/__version__.py b/pyslurm/__version__.py index 07f5afe1..a8060beb 100644 --- a/pyslurm/__version__.py +++ b/pyslurm/__version__.py @@ -5,4 +5,4 @@ # The last Number "Z" is the current Pyslurm patch version, which should be # incremented each time a new release is made (except when migrating to a new # Slurm Major release, then set it back to 0) -__version__ = "23.11.0" +__version__ = "24.5.1" diff --git a/pyslurm/core/job/job.pxd b/pyslurm/core/job/job.pxd index ca256321..bf48f020 100644 --- a/pyslurm/core/job/job.pxd +++ b/pyslurm/core/job/job.pxd @@ -47,7 +47,7 @@ from pyslurm.slurm cimport ( job_info_msg_t, slurm_job_info_t, slurm_job_state_string, - slurm_job_reason_string, + slurm_job_state_reason_string, slurm_job_share_string, slurm_job_batch_script, slurm_get_job_stdin, diff --git a/pyslurm/core/job/job.pyx b/pyslurm/core/job/job.pyx index c23fa856..68821b75 100644 --- a/pyslurm/core/job/job.pyx +++ b/pyslurm/core/job/job.pyx @@ -650,7 +650,7 @@ cdef class Job: if self.ptr.state_desc: return cstr.to_unicode(self.ptr.state_desc) - return cstr.to_unicode(slurm_job_reason_string(self.ptr.state_reason)) + return cstr.to_unicode(slurm_job_state_reason_string(self.ptr.state_reason)) @property def is_requeueable(self): @@ -1177,10 +1177,6 @@ cdef class Job: def spreads_over_nodes(self): return u64_parse_bool_flag(self.ptr.bitflags, slurm.SPREAD_JOB) - @property - def power_options(self): - return power_type_int_to_list(self.ptr.power_flags) - @property def is_cronjob(self): return u64_parse_bool_flag(self.ptr.bitflags, slurm.CRON_JOB) diff --git a/pyslurm/core/job/submission.pyx b/pyslurm/core/job/submission.pyx index ca831c31..a6dbf17a 100644 --- a/pyslurm/core/job/submission.pyx +++ b/pyslurm/core/job/submission.pyx @@ -266,7 +266,6 @@ cdef class JobSubmitDescription: ptr.requeue = u16_bool(self.is_requeueable) ptr.wait_all_nodes = u16_bool(self.wait_all_nodes) ptr.mail_type = mail_type_list_to_int(self.mail_types) - ptr.power_flags = power_type_list_to_int(self.power_options) ptr.profile = acctg_profile_list_to_int(self.profile_types) ptr.shared = shared_type_str_to_int(self.resource_sharing) diff --git a/pyslurm/core/node.pyx b/pyslurm/core/node.pyx index bf5676a4..83184d6b 100644 --- a/pyslurm/core/node.pyx +++ b/pyslurm/core/node.pyx @@ -658,12 +658,6 @@ cdef class Node: def cpu_binding(self, val): self.info.cpu_bind=self.umsg.cpu_bind = cpubind_to_num(val) - @property - def cap_watts(self): - if not self.info.power: - return 0 - return u32_parse(self.info.power.cap_watts, on_noval=0) - @property def current_watts(self): if not self.info.energy: @@ -676,17 +670,6 @@ cdef class Node: return 0 return u32_parse(self.info.energy.ave_watts, on_noval=0) - @property - def external_sensors(self): - if not self.info.ext_sensors: - return {} - - return { - "joules_total": u64_parse(self.info.ext_sensors.consumed_energy), - "current_watts": u32_parse(self.info.ext_sensors.current_watts), - "temperature": u32_parse(self.info.ext_sensors.temperature) - } - @property def _node_state(self): idle_cpus = self.idle_cpus diff --git a/pyslurm/core/partition.pyx b/pyslurm/core/partition.pyx index 461acc8c..34bb884c 100644 --- a/pyslurm/core/partition.pyx +++ b/pyslurm/core/partition.pyx @@ -601,39 +601,39 @@ cdef class Partition: @property def is_default(self): - return u16_parse_bool_flag(self.ptr.flags, slurm.PART_FLAG_DEFAULT) + return u32_parse_bool_flag(self.ptr.flags, slurm.PART_FLAG_DEFAULT) @is_default.setter def is_default(self, val): - u16_set_bool_flag(&self.ptr.flags, val, + u32_set_bool_flag(&self.ptr.flags, val, slurm.PART_FLAG_DEFAULT, slurm.PART_FLAG_DEFAULT_CLR) @property def allow_root_jobs(self): - return u16_parse_bool_flag(self.ptr.flags, slurm.PART_FLAG_NO_ROOT) + return u32_parse_bool_flag(self.ptr.flags, slurm.PART_FLAG_NO_ROOT) @allow_root_jobs.setter def allow_root_jobs(self, val): - u16_set_bool_flag(&self.ptr.flags, val, slurm.PART_FLAG_NO_ROOT, + u32_set_bool_flag(&self.ptr.flags, val, slurm.PART_FLAG_NO_ROOT, slurm.PART_FLAG_NO_ROOT_CLR) @property def is_user_exclusive(self): - return u16_parse_bool_flag(self.ptr.flags, + return u32_parse_bool_flag(self.ptr.flags, slurm.PART_FLAG_EXCLUSIVE_USER) @is_user_exclusive.setter def is_user_exclusive(self, val): - u16_set_bool_flag(&self.ptr.flags, val, slurm.PART_FLAG_EXCLUSIVE_USER, + u32_set_bool_flag(&self.ptr.flags, val, slurm.PART_FLAG_EXCLUSIVE_USER, slurm.PART_FLAG_EXC_USER_CLR) @property def is_hidden(self): - return u16_parse_bool_flag(self.ptr.flags, slurm.PART_FLAG_HIDDEN) + return u32_parse_bool_flag(self.ptr.flags, slurm.PART_FLAG_HIDDEN) @is_hidden.setter def is_hidden(self, val): - u16_set_bool_flag(&self.ptr.flags, val, + u32_set_bool_flag(&self.ptr.flags, val, slurm.PART_FLAG_HIDDEN, slurm.PART_FLAG_HIDDEN_CLR) @property @@ -642,25 +642,25 @@ cdef class Partition: @least_loaded_nodes_scheduling.setter def least_loaded_nodes_scheduling(self, val): - u16_set_bool_flag(&self.ptr.flags, val, slurm.PART_FLAG_LLN, + u32_set_bool_flag(&self.ptr.flags, val, slurm.PART_FLAG_LLN, slurm.PART_FLAG_LLN_CLR) @property def is_root_only(self): - return u16_parse_bool_flag(self.ptr.flags, slurm.PART_FLAG_ROOT_ONLY) + return u32_parse_bool_flag(self.ptr.flags, slurm.PART_FLAG_ROOT_ONLY) @is_root_only.setter def is_root_only(self, val): - u16_set_bool_flag(&self.ptr.flags, val, slurm.PART_FLAG_ROOT_ONLY, + u32_set_bool_flag(&self.ptr.flags, val, slurm.PART_FLAG_ROOT_ONLY, slurm.PART_FLAG_ROOT_ONLY_CLR) @property def requires_reservation(self): - return u16_parse_bool_flag(self.ptr.flags, slurm.PART_FLAG_REQ_RESV) + return u32_parse_bool_flag(self.ptr.flags, slurm.PART_FLAG_REQ_RESV) @requires_reservation.setter def requires_reservation(self, val): - u16_set_bool_flag(&self.ptr.flags, val, slurm.PART_FLAG_REQ_RESV, + u32_set_bool_flag(&self.ptr.flags, val, slurm.PART_FLAG_REQ_RESV, slurm.PART_FLAG_REQ_RESV_CLR) # TODO: tres_fmt_str diff --git a/pyslurm/db/job.pxd b/pyslurm/db/job.pxd index a06791bf..e0848e0a 100644 --- a/pyslurm/db/job.pxd +++ b/pyslurm/db/job.pxd @@ -38,7 +38,7 @@ from pyslurm.slurm cimport ( try_xmalloc, slurmdb_job_cond_def_start_end, slurm_job_state_string, - slurm_job_reason_string, + slurm_job_state_reason_string, slurmdb_create_job_rec, slurmdb_job_modify, ) diff --git a/pyslurm/db/job.pyx b/pyslurm/db/job.pyx index 0497d523..0b081a0e 100644 --- a/pyslurm/db/job.pyx +++ b/pyslurm/db/job.pyx @@ -799,7 +799,7 @@ cdef class Job: @property def state_reason(self): - return cstr.to_unicode(slurm_job_reason_string + return cstr.to_unicode(slurm_job_state_reason_string (self.ptr.state_reason_prev)) @property diff --git a/pyslurm/db/step.pxd b/pyslurm/db/step.pxd index ab0ff70c..906be912 100644 --- a/pyslurm/db/step.pxd +++ b/pyslurm/db/step.pxd @@ -34,7 +34,7 @@ from pyslurm.slurm cimport ( try_xmalloc, slurmdb_job_cond_def_start_end, slurm_job_state_string, - slurm_job_reason_string, + slurm_job_state_reason_string, ) from pyslurm.db.util cimport SlurmList, SlurmListItem from pyslurm.db.connection cimport Connection diff --git a/pyslurm/db/util.pxd b/pyslurm/db/util.pxd index 01951de8..2593a31e 100644 --- a/pyslurm/db/util.pxd +++ b/pyslurm/db/util.pxd @@ -23,7 +23,7 @@ from pyslurm cimport slurm from pyslurm.utils cimport cstr from pyslurm.slurm cimport ( - ListIterator, + list_itr_t, List, slurm_list_iterator_create, slurm_list_iterator_destroy, @@ -52,7 +52,7 @@ cdef class SlurmListItem: cdef class SlurmList: cdef: List info - ListIterator itr + list_itr_t *itr cdef readonly: owned diff --git a/pyslurm/pydefines/slurm_defines.pxi b/pyslurm/pydefines/slurm_defines.pxi index bcc7d54a..f86804e5 100644 --- a/pyslurm/pydefines/slurm_defines.pxi +++ b/pyslurm/pydefines/slurm_defines.pxi @@ -23,8 +23,6 @@ SLURM_EXTERN_CONT = slurm.SLURM_EXTERN_CONT DEFAULT_EIO_SHUTDOWN_WAIT = slurm.DEFAULT_EIO_SHUTDOWN_WAIT -SLURM_SSL_SIGNATURE_LENGTH = slurm.SLURM_SSL_SIGNATURE_LENGTH - JOB_STATE_BASE = slurm.JOB_STATE_BASE JOB_STATE_FLAGS = slurm.JOB_STATE_FLAGS JOB_LAUNCH_FAILED = slurm.JOB_LAUNCH_FAILED @@ -110,7 +108,6 @@ CPU_FREQ_GOV_MASK = slurm.CPU_FREQ_GOV_MASK NODE_STATE_BASE = slurm.NODE_STATE_BASE NODE_STATE_FLAGS = slurm.NODE_STATE_FLAGS -NODE_STATE_NET = slurm.NODE_STATE_NET NODE_STATE_RES = slurm.NODE_STATE_RES NODE_STATE_UNDRAIN = slurm.NODE_STATE_UNDRAIN NODE_STATE_CLOUD = slurm.NODE_STATE_CLOUD @@ -142,7 +139,6 @@ CR_BOARD = slurm.CR_BOARD CR_MEMORY = slurm.CR_MEMORY CR_ONE_TASK_PER_CORE = slurm.CR_ONE_TASK_PER_CORE CR_PACK_NODES = slurm.CR_PACK_NODES -CR_OTHER_CONS_TRES = slurm.CR_OTHER_CONS_TRES CR_CORE_DEFAULT_DIST_BLOCK = slurm.CR_CORE_DEFAULT_DIST_BLOCK CR_LLN = slurm.CR_LLN @@ -226,7 +222,6 @@ JOB_SHARED_OK = slurm.JOB_SHARED_OK JOB_SHARED_USER = slurm.JOB_SHARED_USER JOB_SHARED_MCS = slurm.JOB_SHARED_MCS -SLURM_POWER_FLAGS_LEVEL = slurm.SLURM_POWER_FLAGS_LEVEL CORE_SPEC_THREAD = slurm.CORE_SPEC_THREAD @@ -300,7 +295,6 @@ DEBUG_FLAG_RESERVATION = slurm.DEBUG_FLAG_RESERVATION DEBUG_FLAG_FRONT_END = slurm.DEBUG_FLAG_FRONT_END DEBUG_FLAG_SWITCH = slurm.DEBUG_FLAG_SWITCH DEBUG_FLAG_ENERGY = slurm.DEBUG_FLAG_ENERGY -DEBUG_FLAG_EXT_SENSORS = slurm.DEBUG_FLAG_EXT_SENSORS DEBUG_FLAG_LICENSE = slurm.DEBUG_FLAG_LICENSE DEBUG_FLAG_PROFILE = slurm.DEBUG_FLAG_PROFILE DEBUG_FLAG_INTERCONNECT = slurm.DEBUG_FLAG_INTERCONNECT @@ -322,7 +316,6 @@ DEBUG_FLAG_DB_WCKEY = slurm.DEBUG_FLAG_DB_WCKEY DEBUG_FLAG_BURST_BUF = slurm.DEBUG_FLAG_BURST_BUF DEBUG_FLAG_CPU_FREQ = slurm.DEBUG_FLAG_CPU_FREQ DEBUG_FLAG_POWER = slurm.DEBUG_FLAG_POWER -DEBUG_FLAG_TIME_CRAY = slurm.DEBUG_FLAG_TIME_CRAY DEBUG_FLAG_DB_ARCHIVE = slurm.DEBUG_FLAG_DB_ARCHIVE DEBUG_FLAG_DB_TRES = slurm.DEBUG_FLAG_DB_TRES DEBUG_FLAG_NODE_FEATURES = slurm.DEBUG_FLAG_NODE_FEATURES @@ -356,13 +349,6 @@ PROLOG_FLAG_CONTAIN = slurm.PROLOG_FLAG_CONTAIN PROLOG_FLAG_SERIAL = slurm.PROLOG_FLAG_SERIAL PROLOG_FLAG_X11 = slurm.PROLOG_FLAG_X11 -CTL_CONF_OR = slurm.CTL_CONF_OR -CTL_CONF_SJC = slurm.CTL_CONF_SJC -CTL_CONF_DRJ = slurm.CTL_CONF_DRJ -CTL_CONF_ASRU = slurm.CTL_CONF_ASRU -CTL_CONF_PAM = slurm.CTL_CONF_PAM -CTL_CONF_WCKEY = slurm.CTL_CONF_WCKEY - LOG_FMT_ISO8601_MS = slurm.LOG_FMT_ISO8601_MS LOG_FMT_ISO8601 = slurm.LOG_FMT_ISO8601 LOG_FMT_RFC5424_MS = slurm.LOG_FMT_RFC5424_MS diff --git a/pyslurm/pydefines/slurm_enums.pxi b/pyslurm/pydefines/slurm_enums.pxi index eb292255..41106623 100644 --- a/pyslurm/pydefines/slurm_enums.pxi +++ b/pyslurm/pydefines/slurm_enums.pxi @@ -93,8 +93,6 @@ WAIT_ARRAY_TASK_LIMIT = slurm.WAIT_ARRAY_TASK_LIMIT WAIT_BURST_BUFFER_RESOURCE = slurm.WAIT_BURST_BUFFER_RESOURCE WAIT_BURST_BUFFER_STAGING = slurm.WAIT_BURST_BUFFER_STAGING FAIL_BURST_BUFFER_OP = slurm.FAIL_BURST_BUFFER_OP -WAIT_POWER_NOT_AVAIL = slurm.WAIT_POWER_NOT_AVAIL -WAIT_POWER_RESERVED = slurm.WAIT_POWER_RESERVED WAIT_ASSOC_GRP_UNK = slurm.WAIT_ASSOC_GRP_UNK WAIT_ASSOC_GRP_UNK_MIN = slurm.WAIT_ASSOC_GRP_UNK_MIN WAIT_ASSOC_GRP_UNK_RUN_MIN = slurm.WAIT_ASSOC_GRP_UNK_RUN_MIN @@ -239,10 +237,7 @@ AUTH_PLUGIN_JWT = slurm.AUTH_PLUGIN_JWT # enum select_plugin_type SELECT_PLUGIN_LINEAR = slurm.SELECT_PLUGIN_LINEAR -SELECT_PLUGIN_SERIAL = slurm.SELECT_PLUGIN_SERIAL -SELECT_PLUGIN_CRAY_LINEAR = slurm.SELECT_PLUGIN_CRAY_LINEAR SELECT_PLUGIN_CONS_TRES = slurm.SELECT_PLUGIN_CONS_TRES -SELECT_PLUGIN_CRAY_CONS_TRES = slurm.SELECT_PLUGIN_CRAY_CONS_TRES # end enum select_plugin_type diff --git a/pyslurm/pydefines/slurmdb_defines.pxi b/pyslurm/pydefines/slurmdb_defines.pxi index 8cea05f0..41babeec 100644 --- a/pyslurm/pydefines/slurmdb_defines.pxi +++ b/pyslurm/pydefines/slurmdb_defines.pxi @@ -69,6 +69,5 @@ CLUSTER_FLAG_A7 = slurm.CLUSTER_FLAG_A7 CLUSTER_FLAG_MULTSD = slurm.CLUSTER_FLAG_MULTSD CLUSTER_FLAG_A9 = slurm.CLUSTER_FLAG_A9 CLUSTER_FLAG_FE = slurm.CLUSTER_FLAG_FE -CLUSTER_FLAG_CRAY = slurm.CLUSTER_FLAG_CRAY CLUSTER_FLAG_FED = slurm.CLUSTER_FLAG_FED CLUSTER_FLAG_EXT = slurm.CLUSTER_FLAG_EXT diff --git a/pyslurm/pyslurm.pyx b/pyslurm/pyslurm.pyx index e2363798..71fff057 100644 --- a/pyslurm/pyslurm.pyx +++ b/pyslurm/pyslurm.pyx @@ -541,7 +541,7 @@ cdef class config: cdef: void *ret_list = NULL slurm.List config_list = NULL - slurm.ListIterator iters = NULL + slurm.list_itr_t *iters = NULL config_key_pair_t *keyPairs @@ -587,7 +587,7 @@ cdef class config: cdef: void *ret_list = NULL slurm.List config_list = NULL - slurm.ListIterator iters = NULL + slurm.list_itr_t *iters = NULL char tmp_str[128] config_key_pair_t *keyPairs @@ -622,7 +622,6 @@ cdef class config: Ctl_dict['bcast_exclude'] = stringOrNone(self.__Config_ptr.bcast_exclude, '') Ctl_dict['bcast_parameters'] = stringOrNone(self.__Config_ptr.bcast_parameters, '') Ctl_dict['boot_time'] = self.__Config_ptr.boot_time - Ctl_dict['core_spec_plugin'] = stringOrNone(self.__Config_ptr.core_spec_plugin, '') Ctl_dict['cli_filter_plugins'] = stringOrNone(self.__Config_ptr.cli_filter_plugins, '') Ctl_dict['cluster_name'] = stringOrNone(self.__Config_ptr.cluster_name, '') Ctl_dict['comm_params'] = stringOrNone(self.__Config_ptr.comm_params, '') @@ -636,10 +635,9 @@ cdef class config: Ctl_dict['dependency_params'] = stringOrNone(self.__Config_ptr.dependency_params, '') Ctl_dict['eio_timeout'] = self.__Config_ptr.eio_timeout Ctl_dict['enforce_part_limits'] = bool(self.__Config_ptr.enforce_part_limits) - Ctl_dict['epilog'] = stringOrNone(self.__Config_ptr.epilog, '') + # HvB Ctl_dict['epilog'] = stringOrNone(self.__Config_ptr.epilog, '') Ctl_dict['epilog_msg_time'] = self.__Config_ptr.epilog_msg_time - Ctl_dict['epilog_slurmctld'] = stringOrNone(self.__Config_ptr.epilog_slurmctld, '') - Ctl_dict['ext_sensors_type'] = stringOrNone(self.__Config_ptr.ext_sensors_type, '') + # HvB Ctl_dict['epilog_slurmctld'] = stringOrNone(self.__Config_ptr.epilog_slurmctld, '') Ctl_dict['federation_parameters'] = stringOrNone(self.__Config_ptr.fed_params, '') Ctl_dict['first_job_id'] = self.__Config_ptr.first_job_id Ctl_dict['fs_dampening_factor'] = self.__Config_ptr.fs_dampening_factor @@ -693,8 +691,6 @@ cdef class config: Ctl_dict['over_time_limit'] = int16orNone(self.__Config_ptr.over_time_limit) Ctl_dict['plugindir'] = stringOrNone(self.__Config_ptr.plugindir, '') Ctl_dict['plugstack'] = stringOrNone(self.__Config_ptr.plugstack, '') - Ctl_dict['power_parameters'] = stringOrNone(self.__Config_ptr.power_parameters, '') - Ctl_dict['power_plugin'] = stringOrNone(self.__Config_ptr.power_plugin, '') Ctl_dict['prep_params'] = stringOrNone(self.__Config_ptr.prep_params, '') Ctl_dict['prep_plugins'] = stringOrNone(self.__Config_ptr.prep_plugins, '') @@ -729,9 +725,9 @@ cdef class config: Ctl_dict['private_data'] = self.__Config_ptr.private_data Ctl_dict['private_data_list'] = get_private_data_list(self.__Config_ptr.private_data) Ctl_dict['priority_weight_tres'] = stringOrNone(self.__Config_ptr.priority_weight_tres, '') - Ctl_dict['prolog'] = stringOrNone(self.__Config_ptr.prolog, '') + # HvB Ctl_dict['prolog'] = stringOrNone(self.__Config_ptr.prolog, '') Ctl_dict['prolog_epilog_timeout'] = int16orNone(self.__Config_ptr.prolog_epilog_timeout) - Ctl_dict['prolog_slurmctld'] = stringOrNone(self.__Config_ptr.prolog_slurmctld, '') + # HvB Ctl_dict['prolog_slurmctld'] = stringOrNone(self.__Config_ptr.prolog_slurmctld, '') Ctl_dict['propagate_prio_process'] = self.__Config_ptr.propagate_prio_process Ctl_dict['prolog_flags'] = self.__Config_ptr.prolog_flags Ctl_dict['propagate_rlimits'] = stringOrNone(self.__Config_ptr.propagate_rlimits, '') @@ -1859,9 +1855,6 @@ cdef class job: After calling this, the job pointer can be used in other methods to operate on the information of the job. - This method accepts both string and integer format of the jobid. It - calls slurm_xlate_job_id to convert the jobid appropriately. - Raises an value error if the jobid does not correspond to a existing job. Args: @@ -1876,11 +1869,8 @@ cdef class job: jobid = str(jobid).encode("UTF-8") else: jobid = jobid.encode("UTF-8") - # convert jobid appropriately for slurm - jobid_xlate = slurm.slurm_xlate_job_id(jobid) - # load the job which sets the self._job_ptr pointer - rc = slurm.slurm_load_job(&self._job_ptr, jobid_xlate, self._ShowFlags) + rc = slurm.slurm_load_job(&self._job_ptr, jobid, self._ShowFlags) if rc != slurm.SLURM_SUCCESS: apiError = slurm.slurm_get_errno() @@ -2160,7 +2150,6 @@ cdef class job: Job_dict['pn_min_memory'] = self._record.pn_min_memory Job_dict['pn_min_cpus'] = self._record.pn_min_cpus Job_dict['pn_min_tmp_disk'] = self._record.pn_min_tmp_disk - Job_dict['power_flags'] = self._record.power_flags if self._record.preemptable_time: slurm.slurm_make_time_str( @@ -2223,7 +2212,7 @@ cdef class job: Job_dict['state_reason'] = self._record.state_desc.decode("UTF-8").replace(" ", "_") else: Job_dict['state_reason'] = stringOrNone( - slurm.slurm_job_reason_string( + slurm.slurm_job_state_reason_string( self._record.state_reason ), '' ) @@ -2418,9 +2407,7 @@ cdef class job: else: jobid = jobid.encode("UTF-8") - jobid_xlate = slurm.slurm_xlate_job_id(jobid) - - return pyslurm.core.job.Job(jobid_xlate).get_batch_script() + return pyslurm.core.job.Job(jobid).get_batch_script() cdef int fill_job_desc_from_opts(self, dict job_opts, slurm.job_desc_msg_t *desc): """ @@ -2763,9 +2750,6 @@ cdef class job: if job_opts.get("wait4switch") and job_opts.get("wait4switch") >= 0: desc.wait4switch = job_opts.get("wait4switch") - if job_opts.get("power_flags"): - desc.power_flags = job_opts.get("power_flags") - if job_opts.get("job_flags"): desc.bitflags = job_opts.get("job_flags") @@ -2816,7 +2800,7 @@ cdef class job: cdef bool is_alps_cray_system(self): if slurm.working_cluster_rec: - return slurm.working_cluster_rec.flags & slurm.CLUSTER_FLAG_CRAY + return slurm.working_cluster_rec.flags if ALPS_CRAY_SYSTEM: return True return False @@ -3413,10 +3397,7 @@ cdef class node: # Power Management Host_dict['power_mgmt'] = {} - if (not record.power or (record.power.cap_watts == slurm.NO_VAL)): - Host_dict['power_mgmt']["cap_watts"] = None - else: - Host_dict['power_mgmt']["cap_watts"] = record.power.cap_watts + Host_dict['power_mgmt']["cap_watts"] = None # Energy statistics Host_dict['energy'] = {} @@ -5241,7 +5222,7 @@ cdef class qos: cdef __get(self): cdef: slurm.List qos_list = NULL - slurm.ListIterator iters = NULL + slurm.list_itr_t *iters = NULL int i = 0 int listNum = 0 dict Q_dict = {} @@ -5360,7 +5341,7 @@ cdef class slurmdb_jobs: int apiError = 0 dict J_dict = {} slurm.List JOBSList - slurm.ListIterator iters = NULL + slurm.list_itr_t *iters = NULL if clusters: @@ -5614,7 +5595,7 @@ cdef class slurmdb_reservations: """ cdef: slurm.List reservation_list - slurm.ListIterator iters = NULL + slurm.list_itr_t *iters = NULL slurm.slurmdb_reservation_rec_t *reservation int i = 0 int j = 0 @@ -5723,7 +5704,7 @@ cdef class slurmdb_clusters: """ cdef: slurm.List clusters_list - slurm.ListIterator iters = NULL + slurm.list_itr_t *iters = NULL slurm.slurmdb_cluster_rec_t *cluster = NULL int rc = slurm.SLURM_SUCCESS int i = 0 @@ -5749,7 +5730,6 @@ cdef class slurmdb_clusters: Cluster_rec_dict['tres'] = stringOrNone(cluster.tres_str, '') Cluster_rec_dict['control_port'] = cluster.control_port Cluster_rec_dict['rpc_version'] = cluster.rpc_version - Cluster_rec_dict['plugin_id_select'] = cluster.plugin_id_select Cluster_rec_dict['flags'] = cluster.flags Cluster_rec_dict['dimensions'] = cluster.dimensions Cluster_rec_dict['classification'] = cluster.classification @@ -5834,7 +5814,7 @@ cdef class slurmdb_events: """ cdef: slurm.List event_list - slurm.ListIterator iters = NULL + slurm.list_itr_t *iters = NULL slurm.slurmdb_event_rec_t *event = NULL int i = 0 int listNum = 0 @@ -5900,9 +5880,9 @@ cdef class slurmdb_reports: """ cdef: slurm.List slurmdb_report_cluster_list = NULL - slurm.ListIterator itr = NULL - slurm.ListIterator cluster_itr = NULL - slurm.ListIterator tres_itr = NULL + slurm.list_itr_t *itr = NULL + slurm.list_itr_t *cluster_itr = NULL + slurm.list_itr_t *tres_itr = NULL slurm.slurmdb_cluster_cond_t cluster_cond slurm.slurmdb_report_assoc_rec_t *slurmdb_report_assoc = NULL slurm.slurmdb_report_cluster_rec_t *slurmdb_report_cluster = NULL @@ -6263,9 +6243,6 @@ cdef inline list debug_flags2str(uint64_t debug_flags): if (debug_flags & DEBUG_FLAG_ENERGY): debugFlags.append('Energy') - if (debug_flags & DEBUG_FLAG_EXT_SENSORS): - debugFlags.append('ExtSensors') - if (debug_flags & DEBUG_FLAG_FEDR): debugFlags.append('Federation') @@ -6326,9 +6303,6 @@ cdef inline list debug_flags2str(uint64_t debug_flags): if (debug_flags & DEBUG_FLAG_SWITCH): debugFlags.append('Switch') - if (debug_flags & DEBUG_FLAG_TIME_CRAY): - debugFlags.append('TimeCray') - if (debug_flags & DEBUG_FLAG_TRACE_JOBS): debugFlags.append('TraceJobs') @@ -6584,7 +6558,7 @@ def get_job_state_reason(inx): Returns: (str): Reason string """ - job_reason = stringOrNone(slurm.slurm_job_reason_string(inx), '') + job_reason = stringOrNone(slurm.slurm_job_state_reason_string(inx), '') return job_reason diff --git a/pyslurm/slurm/__init__.pxd b/pyslurm/slurm/__init__.pxd index 52230259..9572ec30 100644 --- a/pyslurm/slurm/__init__.pxd +++ b/pyslurm/slurm/__init__.pxd @@ -93,7 +93,8 @@ include "helpers.pxi" # Additional Features added to the Headers after initial release of the new # Major version -cdef uint8_t ENFORCE_BINDING_GRES -cdef uint8_t ONE_TASK_PER_SHARING_GRES -cdef uint64_t GRES_ONE_TASK_PER_SHARING -cdef uint64_t GRES_MULT_TASKS_PER_SHARING +# HvB +#cdef uint8_t ENFORCE_BINDING_GRES +#cdef uint8_t ONE_TASK_PER_SHARING_GRES +#cdef uint64_t GRES_ONE_TASK_PER_SHARING +#cdef uint64_t GRES_MULT_TASKS_PER_SHARING diff --git a/pyslurm/slurm/__init__.pyx b/pyslurm/slurm/__init__.pyx index ddc12d33..e8a6ec3c 100644 --- a/pyslurm/slurm/__init__.pyx +++ b/pyslurm/slurm/__init__.pyx @@ -1,7 +1,7 @@ # cython: c_string_type=unicode, c_string_encoding=default # cython: language_level=3 -ENFORCE_BINDING_GRES = 0x0040 -ONE_TASK_PER_SHARING_GRES = 0x0080 -GRES_ONE_TASK_PER_SHARING = 1 << 38 -GRES_MULT_TASKS_PER_SHARING = 1 << 39 +#ENFORCE_BINDING_GRES = 0x0040 +#ONE_TASK_PER_SHARING_GRES = 0x0080 +#GRES_ONE_TASK_PER_SHARING = 1 << 38 +#GRES_MULT_TASKS_PER_SHARING = 1 << 39 diff --git a/pyslurm/slurm/extra.pxi b/pyslurm/slurm/extra.pxi index 43fe8ef3..62c76e36 100644 --- a/pyslurm/slurm/extra.pxi +++ b/pyslurm/slurm/extra.pxi @@ -214,7 +214,7 @@ cdef extern void slurm_free_job_info_members(job_info_t *job) cdef extern void slurm_free_job_step_info_response_msg(job_step_info_response_msg_t *msg) cdef extern void slurm_free_job_step_info_members(job_step_info_t *msg) cdef extern char *slurm_job_state_string(uint16_t inx) -cdef extern char *slurm_job_reason_string(int inx) +cdef extern char *slurm_job_state_reason_string(int inx) cdef extern char *slurm_job_share_string(uint16_t shared) cdef extern void slurm_free_update_step_msg(step_update_request_msg_t *msg) diff --git a/pyslurm/slurm/slurm.h.pxi b/pyslurm/slurm/slurm.h.pxi index ded4fc24..798bb666 100644 --- a/pyslurm/slurm/slurm.h.pxi +++ b/pyslurm/slurm/slurm.h.pxi @@ -9,7 +9,7 @@ # * C-Macros are listed with their appropriate uint type # * Any definitions that cannot be translated are not included in this file # -# Generated on 2023-12-11T22:40:42.522638 +# Generated on 2024-07-12T16:21:51.963583 # # The Original Copyright notice from slurm.h has been included # below: @@ -67,6 +67,7 @@ cdef extern from "slurm/slurm.h": uint64_t NO_CONSUME_VAL64 uint16_t MAX_TASKS_PER_NODE uint32_t MAX_JOB_ID + uint32_t MAX_FED_JOB_ID uint8_t MAX_HET_JOB_COMPONENTS uint8_t MAX_FED_CLUSTERS uint32_t SLURM_MAX_NORMAL_STEP_ID @@ -159,7 +160,6 @@ cdef extern from "slurm/slurm.h": uint8_t MEM_BIND_TYPE_FLAGS_MASK uint8_t NODE_STATE_BASE uint32_t NODE_STATE_FLAGS - uint8_t NODE_STATE_NET uint8_t NODE_STATE_RES uint8_t NODE_STATE_UNDRAIN uint8_t NODE_STATE_CLOUD @@ -182,7 +182,7 @@ cdef extern from "slurm/slurm.h": uint32_t NODE_STATE_POWER_UP uint32_t NODE_STATE_POWER_DRAIN uint32_t NODE_STATE_DYNAMIC_NORM - uint8_t SLURM_SSL_SIGNATURE_LENGTH + uint32_t NODE_STATE_BLOCKED uint8_t SHOW_ALL uint8_t SHOW_DETAIL uint8_t SHOW_MIXED @@ -195,10 +195,11 @@ cdef extern from "slurm/slurm.h": uint8_t CR_CORE uint8_t CR_BOARD uint8_t CR_MEMORY + uint8_t ENFORCE_BINDING_GRES + uint8_t ONE_TASK_PER_SHARING_GRES uint16_t CR_ONE_TASK_PER_CORE uint16_t CR_PACK_NODES uint16_t LL_SHARED_GRES - uint16_t CR_OTHER_CONS_TRES uint16_t CR_CORE_DEFAULT_DIST_BLOCK uint16_t CR_LLN uint16_t MULTIPLE_SHARING_GRES_PJ @@ -241,6 +242,7 @@ cdef extern from "slurm/slurm.h": uint8_t GRES_ENFORCE_BIND uint8_t TEST_NOW_ONLY uint8_t JOB_SEND_ENV + uint8_t GRACE_PREEMPT uint16_t SPREAD_JOB uint16_t USE_MIN_NODES uint16_t JOB_KILL_HURRY @@ -270,6 +272,10 @@ cdef extern from "slurm/slurm.h": uint64_t JOB_SEND_SCRIPT uint64_t RESET_LIC_TASK uint64_t RESET_LIC_JOB + uint64_t GRES_ONE_TASK_PER_SHARING + uint64_t GRES_MULT_TASKS_PER_SHARING + uint64_t GRES_ALLOW_TASK_SHARING + uint64_t STEPMGR_ENABLED uint8_t X11_FORWARD_ALL uint8_t X11_FORWARD_BATCH uint8_t X11_FORWARD_FIRST @@ -280,7 +286,7 @@ cdef extern from "slurm/slurm.h": uint8_t JOB_SHARED_OK uint8_t JOB_SHARED_USER uint8_t JOB_SHARED_MCS - uint8_t SLURM_POWER_FLAGS_LEVEL + uint8_t JOB_SHARED_TOPO uint16_t CORE_SPEC_THREAD uint8_t JOB_DEF_CPU_PER_GPU uint8_t JOB_DEF_MEM_PER_GPU @@ -300,6 +306,8 @@ cdef extern from "slurm/slurm.h": uint16_t PART_FLAG_LLN_CLR uint16_t PART_FLAG_EXC_USER_CLR uint16_t PART_FLAG_PDOI_CLR + uint32_t PART_FLAG_EXCLUSIVE_TOPO + uint32_t PART_FLAG_EXC_TOPO_CLR uint8_t RESERVE_FLAG_MAINT uint8_t RESERVE_FLAG_NO_MAINT uint8_t RESERVE_FLAG_DAILY @@ -338,6 +346,8 @@ cdef extern from "slurm/slurm.h": uint64_t RESERVE_FLAG_NO_HOURLY uint64_t RESERVE_FLAG_GRES_REQ uint64_t RESERVE_TRES_PER_NODE + uint64_t RESERVE_FLAG_USER_DEL + uint64_t RESERVE_FLAG_NO_USER_DEL uint8_t DEBUG_FLAG_SELECT_TYPE uint8_t DEBUG_FLAG_STEPS uint8_t DEBUG_FLAG_TRIGGERS @@ -357,11 +367,13 @@ cdef extern from "slurm/slurm.h": uint32_t DEBUG_FLAG_SACK uint32_t DEBUG_FLAG_SWITCH uint32_t DEBUG_FLAG_ENERGY - uint32_t DEBUG_FLAG_EXT_SENSORS + uint32_t DEBUG_FLAG_TLS uint32_t DEBUG_FLAG_LICENSE uint32_t DEBUG_FLAG_PROFILE uint32_t DEBUG_FLAG_INTERCONNECT + uint32_t DEBUG_FLAG_GLOB_SILENCE uint32_t DEBUG_FLAG_JOB_CONT + uint32_t DEBUG_FLAG_AUDIT_RPCS uint32_t DEBUG_FLAG_PROTOCOL uint32_t DEBUG_FLAG_BACKFILL_MAP uint32_t DEBUG_FLAG_TRACE_JOBS @@ -379,7 +391,6 @@ cdef extern from "slurm/slurm.h": uint64_t DEBUG_FLAG_BURST_BUF uint64_t DEBUG_FLAG_CPU_FREQ uint64_t DEBUG_FLAG_POWER - uint64_t DEBUG_FLAG_TIME_CRAY uint64_t DEBUG_FLAG_DB_ARCHIVE uint64_t DEBUG_FLAG_DB_TRES uint64_t DEBUG_FLAG_JOBCOMP @@ -387,6 +398,7 @@ cdef extern from "slurm/slurm.h": uint64_t DEBUG_FLAG_FEDR uint64_t DEBUG_FLAG_HETJOB uint64_t DEBUG_FLAG_ACCRUE + uint64_t DEBUG_FLAG_DBD_AGENT uint64_t DEBUG_FLAG_AGENT uint64_t DEBUG_FLAG_DEPENDENCY uint64_t DEBUG_FLAG_JAG @@ -415,17 +427,24 @@ cdef extern from "slurm/slurm.h": uint8_t PROLOG_FLAG_X11 uint8_t PROLOG_FLAG_DEFER_BATCH uint8_t PROLOG_FLAG_FORCE_REQUEUE_ON_FAIL - uint8_t CTL_CONF_OR - uint8_t CTL_CONF_SJC - uint8_t CTL_CONF_DRJ - uint8_t CTL_CONF_ASRU - uint8_t CTL_CONF_PAM - uint8_t CTL_CONF_WCKEY - uint8_t CTL_CONF_IPV4_ENABLED - uint8_t CTL_CONF_IPV6_ENABLED - uint16_t CTL_CONF_SJX - uint16_t CTL_CONF_SJS - uint16_t CTL_CONF_SJE + uint8_t PROLOG_FLAG_RUN_IN_JOB + uint8_t CONF_FLAG_OR + uint8_t CONF_FLAG_SJC + uint8_t CONF_FLAG_DRJ + uint8_t CONF_FLAG_ASRU + uint8_t CONF_FLAG_PAM + uint8_t CONF_FLAG_WCKEY + uint8_t CONF_FLAG_IPV4_ENABLED + uint8_t CONF_FLAG_IPV6_ENABLED + uint16_t CONF_FLAG_SJX + uint16_t CONF_FLAG_SJS + uint16_t CONF_FLAG_SJE + uint16_t CONF_FLAG_L3CSOCK + uint16_t CONF_FLAG_NNSOCK + uint16_t CONF_FLAG_ECORE + uint16_t CONF_FLAG_SHR + uint16_t CONF_FLAG_CONTAIN_SPANK + uint32_t CONF_FLAG_NO_STDIO uint8_t LOG_FMT_ISO8601_MS uint8_t LOG_FMT_ISO8601 uint8_t LOG_FMT_RFC5424_MS @@ -481,6 +500,8 @@ cdef extern from "slurm/slurm.h": uint16_t KILL_JOB_RESV uint16_t KILL_NO_CRON uint16_t KILL_NO_SIG_FAIL + uint16_t KILL_JOBS_VERBOSE + uint16_t KILL_CRON uint16_t WARN_SENT uint8_t BB_FLAG_DISABLE_PERSISTENT uint8_t BB_FLAG_ENABLE_PERSISTENT @@ -512,8 +533,6 @@ cdef extern from "slurm/slurm.h": ctypedef slurmdb_cluster_rec slurmdb_cluster_rec_t - ctypedef switch_jobinfo switch_jobinfo_t - ctypedef job_resources job_resources_t ctypedef select_jobinfo select_jobinfo_t @@ -622,8 +641,8 @@ cdef extern from "slurm/slurm.h": WAIT_BURST_BUFFER_RESOURCE WAIT_BURST_BUFFER_STAGING FAIL_BURST_BUFFER_OP - WAIT_POWER_NOT_AVAIL - WAIT_POWER_RESERVED + DEFUNCT_WAIT_76 + DEFUNCT_WAIT_77 WAIT_ASSOC_GRP_UNK WAIT_ASSOC_GRP_UNK_MIN WAIT_ASSOC_GRP_UNK_RUN_MIN @@ -747,6 +766,27 @@ cdef extern from "slurm/slurm.h": WAIT_RESV_DELETED WAIT_RESV_INVALID FAIL_CONSTRAINTS + WAIT_QOS_MAX_BB_RUN_MINS_PER_ACCT + WAIT_QOS_MAX_BILLING_RUN_MINS_PER_ACCT + WAIT_QOS_MAX_CPU_RUN_MINS_PER_ACCT + WAIT_QOS_MAX_ENERGY_RUN_MINS_PER_ACCT + WAIT_QOS_MAX_GRES_RUN_MINS_PER_ACCT + WAIT_QOS_MAX_NODE_RUN_MINS_PER_ACCT + WAIT_QOS_MAX_LIC_RUN_MINS_PER_ACCT + WAIT_QOS_MAX_MEM_RUN_MINS_PER_ACCT + WAIT_QOS_MAX_UNK_RUN_MINS_PER_ACCT + WAIT_QOS_MAX_BB_RUN_MINS_PER_USER + WAIT_QOS_MAX_BILLING_RUN_MINS_PER_USER + WAIT_QOS_MAX_CPU_RUN_MINS_PER_USER + WAIT_QOS_MAX_ENERGY_RUN_MINS_PER_USER + WAIT_QOS_MAX_GRES_RUN_MINS_PER_USER + WAIT_QOS_MAX_NODE_RUN_MINS_PER_USER + WAIT_QOS_MAX_LIC_RUN_MINS_PER_USER + WAIT_QOS_MAX_MEM_RUN_MINS_PER_USER + WAIT_QOS_MAX_UNK_RUN_MINS_PER_USER + WAIT_MAX_POWERED_NODES + WAIT_MPI_PORTS_BUSY + REASON_END cdef enum job_acct_types: JOB_START @@ -765,20 +805,24 @@ cdef extern from "slurm/slurm.h": HASH_PLUGIN_NONE HASH_PLUGIN_K12 HASH_PLUGIN_SHA256 + HASH_PLUGIN_SHA3 HASH_PLUGIN_CNT + cdef enum tls_plugin_type: + TLS_PLUGIN_NONE + TLS_PLUGIN_S2N + cdef enum select_plugin_type: + SELECT_PLUGIN_CONS_RES SELECT_PLUGIN_LINEAR - SELECT_PLUGIN_SERIAL - SELECT_PLUGIN_CRAY_LINEAR SELECT_PLUGIN_CONS_TRES - SELECT_PLUGIN_CRAY_CONS_TRES cdef enum switch_plugin_type: SWITCH_PLUGIN_NONE SWITCH_PLUGIN_GENERIC SWITCH_PLUGIN_CRAY SWITCH_PLUGIN_SLINGSHOT + SWITCH_PLUGIN_NVIDIA_IMEX cdef enum select_jobdata_type: SELECT_JOBDATA_NETWORK @@ -949,6 +993,7 @@ cdef extern from "slurm/slurm.h": SSF_OVERLAP_FORCE SSF_NO_SIG_FAIL SSF_EXT_LAUNCHER + SSF_GRES_ALLOW_TASK_SHARING cdef enum topology_plugin_type: TOPOLOGY_PLUGIN_DEFAULT @@ -986,8 +1031,6 @@ cdef extern from "slurm/slurm.h": ctypedef xlist list_t - ctypedef listIterator* ListIterator - ctypedef listIterator list_itr_t ctypedef void (*ListDelF)(void* x) @@ -1042,27 +1085,6 @@ cdef extern from "slurm/slurm.h": ctypedef acct_gather_energy acct_gather_energy_t - cdef struct ext_sensors_data: - uint64_t consumed_energy - uint32_t temperature - time_t energy_update_time - uint32_t current_watts - - ctypedef ext_sensors_data ext_sensors_data_t - - cdef struct power_mgmt_data: - uint32_t cap_watts - uint32_t current_watts - uint64_t joule_counter - uint32_t new_cap_watts - uint32_t max_watts - uint32_t min_watts - time_t new_job_time - uint16_t state - uint64_t time_usec - - ctypedef power_mgmt_data power_mgmt_data_t - ctypedef struct slurm_node_alias_addrs_t: time_t expiration char* net_cred @@ -1137,7 +1159,6 @@ cdef extern from "slurm/slurm.h": uint8_t overcommit char* partition uint16_t plane_size - uint8_t power_flags char* prefer uint32_t priority uint32_t profile @@ -1148,6 +1169,7 @@ cdef extern from "slurm/slurm.h": char* req_nodes uint16_t requeue char* reservation + uint16_t resv_port_cnt char* script void* script_buf slurm_hash_t script_hash @@ -1191,6 +1213,7 @@ cdef extern from "slurm/slurm.h": uint32_t pn_min_tmp_disk char* req_context uint32_t req_switch + uint16_t segment_size char* selinux_context char* std_err char* std_in @@ -1294,11 +1317,12 @@ cdef extern from "slurm/slurm.h": uint64_t pn_min_memory uint16_t pn_min_cpus uint32_t pn_min_tmp_disk - uint8_t power_flags time_t preempt_time time_t preemptable_time time_t pre_sus_time uint32_t priority + uint32_t* priority_array + char* priority_array_parts uint32_t profile char* qos uint8_t reboot @@ -1309,6 +1333,7 @@ cdef extern from "slurm/slurm.h": time_t resize_time uint16_t restart_cnt char* resv_name + char* resv_ports char* sched_nodes char* selinux_context uint16_t shared @@ -1386,6 +1411,18 @@ cdef extern from "slurm/slurm.h": ctypedef job_info_msg job_info_msg_t + ctypedef struct job_state_response_job_t: + uint32_t job_id + uint32_t array_job_id + uint32_t array_task_id + bitstr_t* array_task_id_bitmap + uint32_t het_job_id + uint32_t state + + ctypedef struct job_state_response_msg_t: + uint32_t jobs_count + job_state_response_job_t* jobs + cdef struct step_update_request_msg: uint32_t job_id uint32_t step_id @@ -1684,10 +1721,15 @@ cdef extern from "slurm/slurm.h": char* tres_per_task uint32_t user_id + ctypedef struct stepmgr_job_info_t: + uint32_t job_id + char* stepmgr + cdef struct job_step_info_response_msg: time_t last_update uint32_t job_step_count job_step_info_t* job_steps + list_t* stepmgr_jobs ctypedef job_step_info_response_msg job_step_info_response_msg_t @@ -1725,9 +1767,7 @@ cdef extern from "slurm/slurm.h": uint16_t cpus_efctv char* cpu_spec_list acct_gather_energy_t* energy - ext_sensors_data_t* ext_sensors char* extra - power_mgmt_data_t* power char* features char* features_act char* gres @@ -1748,6 +1788,8 @@ cdef extern from "slurm/slurm.h": char* partitions uint16_t port uint64_t real_memory + uint16_t res_cores_per_gpu + char* gpu_spec char* comment char* reason time_t reason_time @@ -1818,6 +1860,7 @@ cdef extern from "slurm/slurm.h": ctypedef job_alloc_info_msg job_alloc_info_msg_t ctypedef struct slurm_selected_step_t: + bitstr_t* array_bitmap uint32_t array_task_id uint32_t het_job_offset slurm_step_id_t step_id @@ -1857,7 +1900,7 @@ cdef extern from "slurm/slurm.h": uint32_t default_time char* deny_accounts char* deny_qos - uint16_t flags + uint32_t flags uint32_t grace_time list_t* job_defaults_list char* job_defaults_str @@ -1972,7 +2015,6 @@ cdef extern from "slurm/slurm.h": char* partition uint32_t purge_comp_time time_t start_time - uint32_t resv_watts char* tres_str char* users @@ -2004,7 +2046,6 @@ cdef extern from "slurm/slurm.h": char* partition uint32_t purge_comp_time time_t start_time - uint32_t resv_watts char* tres_str char* users @@ -2049,7 +2090,6 @@ cdef extern from "slurm/slurm.h": time_t boot_time void* cgroup_conf char* cli_filter_plugins - char* core_spec_plugin char* cluster_name char* comm_params uint16_t complete_wait @@ -2065,12 +2105,11 @@ cdef extern from "slurm/slurm.h": char* dependency_params uint16_t eio_timeout uint16_t enforce_part_limits - char* epilog + char** epilog + uint32_t epilog_cnt uint32_t epilog_msg_time - char* epilog_slurmctld - char* ext_sensors_type - uint16_t ext_sensors_freq - void* ext_sensors_conf + char** epilog_slurmctld + uint32_t epilog_slurmctld_cnt char* fed_params uint32_t first_job_id uint16_t fs_dampening_factor @@ -2080,6 +2119,7 @@ cdef extern from "slurm/slurm.h": uint16_t group_time uint16_t group_force char* gpu_freq_def + char* hash_plugin uint32_t hash_val uint16_t health_check_interval uint16_t health_check_node_state @@ -2135,8 +2175,6 @@ cdef extern from "slurm/slurm.h": uint16_t over_time_limit char* plugindir char* plugstack - char* power_parameters - char* power_plugin uint32_t preempt_exempt_time uint16_t preempt_mode char* preempt_params @@ -2160,9 +2198,11 @@ cdef extern from "slurm/slurm.h": char* priority_weight_tres uint16_t private_data char* proctrack_type - char* prolog + char** prolog + uint32_t prolog_cnt uint16_t prolog_epilog_timeout - char* prolog_slurmctld + char** prolog_slurmctld + uint32_t prolog_slurmctld_cnt uint16_t propagate_prio_process uint16_t prolog_flags char* propagate_rlimits @@ -2231,6 +2271,8 @@ cdef extern from "slurm/slurm.h": char* task_plugin uint32_t task_plugin_param char* task_prolog + char* tls_params + char* tls_type uint16_t tcp_timeout char* tmp_fs char* topology_param @@ -2370,6 +2412,11 @@ cdef extern from "slurm/slurm.h": uint16_t* rpc_type_id uint32_t* rpc_type_cnt uint64_t* rpc_type_time + uint8_t rpc_queue_enabled + uint16_t* rpc_type_queued + uint64_t* rpc_type_dropped + uint16_t* rpc_type_cycle_last + uint16_t* rpc_type_cycle_max uint32_t rpc_user_size uint32_t* rpc_user_id uint32_t* rpc_user_cnt @@ -2450,6 +2497,8 @@ cdef extern from "slurm/slurm.h": ctypedef network_callerid_msg network_callerid_msg_t + int slurm_get_cluster_info(list_t** cluster_records, char* cluster_names, uint16_t show_flags) + void slurm_init_job_desc_msg(job_desc_msg_t* job_desc_msg) int slurm_allocate_resources(job_desc_msg_t* job_desc_msg, resource_allocation_response_msg_t** job_alloc_resp_msg) @@ -2513,12 +2562,41 @@ cdef extern from "slurm/slurm.h": ctypedef job_step_kill_msg job_step_kill_msg_t + ctypedef struct kill_jobs_msg_t: + char* account + uint16_t flags + char* job_name + char** jobs_array + uint32_t jobs_cnt + char* partition + char* qos + char* reservation + uint16_t signal + uint32_t state + uint32_t user_id + char* user_name + char* wckey + char* nodelist + + ctypedef struct kill_jobs_resp_job_t: + uint32_t error_code + char* error_msg + slurm_selected_step_t* id + uint32_t real_job_id + char* sibling_name + + ctypedef struct kill_jobs_resp_msg_t: + kill_jobs_resp_job_t* job_responses + uint32_t jobs_cnt + int slurm_kill_job(uint32_t job_id, uint16_t signal, uint16_t flags) int slurm_kill_job_step(uint32_t job_id, uint32_t step_id, uint16_t signal, uint16_t flags) int slurm_kill_job2(const char* job_id, uint16_t signal, uint16_t flags, const char* sibling) + int slurm_kill_jobs(kill_jobs_msg_t* kill_msg, kill_jobs_resp_msg_t** kill_msg_resp) + int slurm_signal_job(uint32_t job_id, uint16_t signal) int slurm_signal_job_step(uint32_t job_id, uint32_t step_id, uint32_t signal) @@ -2579,6 +2657,8 @@ cdef extern from "slurm/slurm.h": void slurm_free_job_info_msg(job_info_msg_t* job_buffer_ptr) + void slurm_free_job_state_response_msg(job_state_response_msg_t* msg) + void slurm_free_priority_factors_response_msg(priority_factors_response_msg_t* factors_resp) int slurm_get_end_time(uint32_t jobid, time_t* end_time_ptr) @@ -2601,6 +2681,8 @@ cdef extern from "slurm/slurm.h": int slurm_load_jobs(time_t update_time, job_info_msg_t** job_info_msg_pptr, uint16_t show_flags) + int slurm_load_job_state(int job_id_count, slurm_selected_step_t* job_ids, job_state_response_msg_t** jsr_pptr) + int slurm_notify_job(uint32_t job_id, char* message) int slurm_pid2jobid(pid_t job_pid, uint32_t* job_id_ptr) @@ -2615,8 +2697,6 @@ cdef extern from "slurm/slurm.h": int slurm_update_job2(job_desc_msg_t* job_msg, job_array_resp_msg_t** resp) - uint32_t slurm_xlate_job_id(char* job_id_str) - int slurm_get_job_steps(time_t update_time, uint32_t job_id, uint32_t step_id, job_step_info_response_msg_t** step_response_pptr, uint16_t show_flags) int slurm_find_step_ids_by_container_id(uint16_t show_flags, uid_t uid, const char* container_id, list_t* steps) @@ -2837,6 +2917,7 @@ cdef extern from "slurm/slurm.h": uint32_t pool_cnt burst_buffer_pool_t* pool_ptr char* name + uint32_t poll_interval uint32_t other_timeout uint32_t stage_in_timeout uint32_t stage_out_timeout diff --git a/pyslurm/slurm/slurm_errno.h.pxi b/pyslurm/slurm/slurm_errno.h.pxi index 790fe213..25e83892 100644 --- a/pyslurm/slurm/slurm_errno.h.pxi +++ b/pyslurm/slurm/slurm_errno.h.pxi @@ -9,7 +9,7 @@ # * C-Macros are listed with their appropriate uint type # * Any definitions that cannot be translated are not included in this file # -# Generated on 2023-12-11T22:40:42.328758 +# Generated on 2024-07-12T16:21:51.735507 # # The Original Copyright notice from slurm_errno.h has been included # below: @@ -77,6 +77,7 @@ cdef extern from "slurm/slurm_errno.h": SLURMCTLD_COMMUNICATIONS_RECEIVE_ERROR SLURMCTLD_COMMUNICATIONS_SHUTDOWN_ERROR SLURMCTLD_COMMUNICATIONS_BACKOFF + SLURMCTLD_COMMUNICATIONS_HARD_DROP SLURM_NO_CHANGE_IN_DATA ESLURM_INVALID_PARTITION_NAME ESLURM_DEFAULT_PARTITION_NOT_SET @@ -248,6 +249,12 @@ cdef extern from "slurm/slurm_errno.h": ESLURM_NODE_TABLE_FULL ESLURM_INVALID_RELATIVE_QOS ESLURM_INVALID_EXTRA + ESLURM_JOB_SIGNAL_FAILED + ESLURM_SIGNAL_JOBS_INVALID + ESLURM_RES_CORES_PER_GPU_UNIQUE + ESLURM_RES_CORES_PER_GPU_TOPO + ESLURM_RES_CORES_PER_GPU_NO + ESLURM_MAX_POWERED_NODES ESPANK_ERROR ESPANK_BAD_ARG ESPANK_NOT_TASK @@ -282,6 +289,7 @@ cdef extern from "slurm/slurm_errno.h": ESLURMD_CONTAINER_RUNTIME_INVALID ESLURMD_CPU_BIND_ERROR ESLURMD_CPU_LAYOUT_ERROR + ESLURMD_TOO_MANY_RPCS ESLURM_PROTOCOL_INCOMPLETE_PACKET SLURM_PROTOCOL_SOCKET_IMPL_TIMEOUT SLURM_PROTOCOL_SOCKET_ZERO_BYTES_SENT @@ -302,6 +310,7 @@ cdef extern from "slurm/slurm_errno.h": ESLURM_NO_REMOVE_DEFAULT_ACCOUNT ESLURM_BAD_SQL ESLURM_NO_REMOVE_DEFAULT_QOS + ESLURM_COORD_NO_INCREASE_JOB_LIMIT ESLURM_FED_CLUSTER_MAX_CNT ESLURM_FED_CLUSTER_MULTIPLE_ASSIGNMENT ESLURM_INVALID_CLUSTER_FEATURE @@ -340,6 +349,8 @@ cdef extern from "slurm/slurm_errno.h": ESLURM_DATA_AMBIGUOUS_QUERY ESLURM_DATA_PARSE_NOTHING ESLURM_DATA_INVALID_PARSER + ESLURM_DATA_PARSING_DEPTH + ESLURM_DATA_PARSER_INVALID_STATE ESLURM_CONTAINER_NOT_CONFIGURED ctypedef struct slurm_errtab_t: diff --git a/pyslurm/slurm/slurmdb.h.pxi b/pyslurm/slurm/slurmdb.h.pxi index 2c7bb862..1056a97d 100644 --- a/pyslurm/slurm/slurmdb.h.pxi +++ b/pyslurm/slurm/slurmdb.h.pxi @@ -9,7 +9,7 @@ # * C-Macros are listed with their appropriate uint type # * Any definitions that cannot be translated are not included in this file # -# Generated on 2023-12-11T22:40:42.798426 +# Generated on 2024-07-12T16:21:52.276106 # # The Original Copyright notice from slurmdb.h has been included # below: @@ -115,11 +115,8 @@ cdef extern from "slurm/slurmdb.h": uint8_t CLUSTER_FLAG_MULTSD uint16_t CLUSTER_FLAG_A9 uint16_t CLUSTER_FLAG_FE - uint16_t CLUSTER_FLAG_CRAY uint16_t CLUSTER_FLAG_FED uint16_t CLUSTER_FLAG_EXT - uint8_t ASSOC_FLAG_DELETED - uint8_t ASSOC_FLAG_NO_UPDATE uint8_t SLURMDB_EVENT_COND_OPEN uint8_t DB_CONN_FLAG_CLUSTER_DEL uint8_t DB_CONN_FLAG_ROLLBACK @@ -199,6 +196,16 @@ cdef extern from "slurm/slurmdb.h": CLUSTER_FED_STATE_ACTIVE CLUSTER_FED_STATE_INACTIVE + ctypedef enum slurmdb_assoc_flags_t: + ASSOC_FLAG_NONE + ASSOC_FLAG_DELETED + ASSOC_FLAG_NO_UPDATE + ASSOC_FLAG_EXACT + ASSOC_FLAG_USER_COORD_NO + ASSOC_FLAG_BASE + ASSOC_FLAG_USER_COORD + ASSOC_FLAG_INVALID + ctypedef struct slurmdb_tres_rec_t: uint64_t alloc_secs uint32_t rec_count @@ -277,23 +284,27 @@ cdef extern from "slurm/slurmdb.h": char* tres_usage_out_min_taskid char* tres_usage_out_tot + ctypedef enum slurmdb_acct_flags_t: + SLURMDB_ACCT_FLAG_NONE + SLURMDB_ACCT_FLAG_DELETED + SLURMDB_ACCT_FLAG_WASSOC + SLURMDB_ACCT_FLAG_WCOORD + SLURMDB_ACCT_FLAG_USER_COORD_NO + SLURMDB_ACCT_FLAG_BASE + SLURMDB_ACCT_FLAG_USER_COORD + SLURMDB_ACCT_FLAG_INVALID + ctypedef struct slurmdb_account_cond_t: slurmdb_assoc_cond_t* assoc_cond List description_list + slurmdb_acct_flags_t flags List organization_list - uint16_t with_assocs - uint16_t with_coords - uint16_t with_deleted - - cdef enum: - SLURMDB_ACCT_FLAG_NONE - SLURMDB_ACCT_FLAG_DELETED ctypedef struct slurmdb_account_rec_t: List assoc_list List coordinators char* description - uint32_t flags + slurmdb_acct_flags_t flags char* name char* organization @@ -342,7 +353,7 @@ cdef extern from "slurm/slurmdb.h": char* cluster char* comment uint32_t def_qos_id - uint16_t flags + slurmdb_assoc_flags_t flags uint32_t grp_jobs uint32_t grp_jobs_accrue uint32_t grp_submit_jobs @@ -458,7 +469,6 @@ cdef extern from "slurm/slurmdb.h": pthread_mutex_t lock char* name char* nodes - uint32_t plugin_id_select slurmdb_assoc_rec_t* root_assoc uint16_t rpc_version List send_rpc @@ -587,6 +597,9 @@ cdef extern from "slurm/slurmdb.h": uint32_t state uint32_t state_reason_prev List steps + char* std_err + char* std_in + char* std_out time_t submit char* submit_line uint32_t suspended @@ -801,7 +814,7 @@ cdef extern from "slurm/slurmdb.h": uint32_t jobs uint32_t submit_jobs uint64_t* tres - uint64_t* tres_run_mins + uint64_t* tres_run_secs bitstr_t* node_bitmap uint16_t* node_job_cnt uint32_t uid diff --git a/pyslurm/utils/uint.pxd b/pyslurm/utils/uint.pxd index 3d8f50e5..d886d6f3 100644 --- a/pyslurm/utils/uint.pxd +++ b/pyslurm/utils/uint.pxd @@ -43,5 +43,7 @@ cdef u8_parse_bool(uint8_t val) cdef u16_parse_bool(uint16_t val) cdef u64_parse_bool_flag(uint64_t flags, flag) cdef u64_set_bool_flag(uint64_t *flags, boolean, true_flag, false_flag=*) +cdef u32_parse_bool_flag(uint32_t flags, flag) +cdef u32_set_bool_flag(uint32_t *flags, boolean, true_flag, false_flag=*) cdef u16_parse_bool_flag(uint16_t flags, flag) cdef u16_set_bool_flag(uint16_t *flags, boolean, true_flag, false_flag=*) diff --git a/pyslurm/utils/uint.pyx b/pyslurm/utils/uint.pyx index 0dae7779..2ac315b6 100644 --- a/pyslurm/utils/uint.pyx +++ b/pyslurm/utils/uint.pyx @@ -175,6 +175,8 @@ cdef u16_parse_bool(uint16_t val): cdef u16_set_bool_flag(uint16_t *flags, boolean, true_flag, false_flag=0): flags[0] = uint_set_bool_flag(flags[0], boolean, true_flag, false_flag) +cdef u32_set_bool_flag(uint32_t *flags, boolean, true_flag, false_flag=0): + flags[0] = uint_set_bool_flag(flags[0], boolean, true_flag, false_flag) cdef u64_set_bool_flag(uint64_t *flags, boolean, true_flag, false_flag=0): flags[0] = uint_set_bool_flag(flags[0], boolean, true_flag, false_flag) @@ -183,6 +185,8 @@ cdef u64_set_bool_flag(uint64_t *flags, boolean, true_flag, false_flag=0): cdef u16_parse_bool_flag(uint16_t flags, flag): return uint_parse_bool_flag(flags, flag, slurm.NO_VAL16) +cdef u32_parse_bool_flag(uint32_t flags, flag): + return uint_parse_bool_flag(flags, flag, slurm.NO_VAL16) cdef u64_parse_bool_flag(uint64_t flags, flag): return uint_parse_bool_flag(flags, flag, slurm.NO_VAL64) diff --git a/setup.py b/setup.py index c2f3077e..b0a3b187 100644 --- a/setup.py +++ b/setup.py @@ -14,7 +14,7 @@ from setuptools._vendor.packaging.version import Version -CYTHON_VERSION_MIN = "0.29.36" # Keep in sync with pyproject.toml +CYTHON_VERSION_MIN = "0.29.32" # Keep in sync with pyproject.toml SLURM_LIB = "libslurm" TOPDIR = Path(__file__).parent PYTHON_MIN_REQUIRED = (3, 6) From 3bd2dac4aefdb5540d3392ef77fcfb20950c0ea2 Mon Sep 17 00:00:00 2001 From: Bas van der Vlies Date: Sun, 14 Jul 2024 20:40:54 +0200 Subject: [PATCH 2/3] add code to handel `char **` so epilog/prolog//prolog_slurmctld/epilog_slurmctld working again --- pyslurm/pyslurm.pyx | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/pyslurm/pyslurm.pyx b/pyslurm/pyslurm.pyx index 71fff057..d0fcdedd 100644 --- a/pyslurm/pyslurm.pyx +++ b/pyslurm/pyslurm.pyx @@ -131,6 +131,15 @@ cdef inline listOrNone(char* value, sep_char): return value.decode("UTF_8", "replace").split(sep_char) +cdef inline listOfStrings(char **value): + l = [] + i = 0 + if value != NULL: + while value[i] != NULL: + l.append(stringOrNone(value[i], '')) + i += 1 + + return(tuple(l)) cdef inline stringOrNone(char* value, value2): if value is NULL: @@ -635,9 +644,9 @@ cdef class config: Ctl_dict['dependency_params'] = stringOrNone(self.__Config_ptr.dependency_params, '') Ctl_dict['eio_timeout'] = self.__Config_ptr.eio_timeout Ctl_dict['enforce_part_limits'] = bool(self.__Config_ptr.enforce_part_limits) - # HvB Ctl_dict['epilog'] = stringOrNone(self.__Config_ptr.epilog, '') + Ctl_dict['epilog'] = listOfStrings(self.__Config_ptr.epilog) Ctl_dict['epilog_msg_time'] = self.__Config_ptr.epilog_msg_time - # HvB Ctl_dict['epilog_slurmctld'] = stringOrNone(self.__Config_ptr.epilog_slurmctld, '') + Ctl_dict['epilog_slurmctld'] = listOfStrings(self.__Config_ptr.epilog_slurmctld) Ctl_dict['federation_parameters'] = stringOrNone(self.__Config_ptr.fed_params, '') Ctl_dict['first_job_id'] = self.__Config_ptr.first_job_id Ctl_dict['fs_dampening_factor'] = self.__Config_ptr.fs_dampening_factor @@ -725,9 +734,9 @@ cdef class config: Ctl_dict['private_data'] = self.__Config_ptr.private_data Ctl_dict['private_data_list'] = get_private_data_list(self.__Config_ptr.private_data) Ctl_dict['priority_weight_tres'] = stringOrNone(self.__Config_ptr.priority_weight_tres, '') - # HvB Ctl_dict['prolog'] = stringOrNone(self.__Config_ptr.prolog, '') + Ctl_dict['prolog'] = listOfStrings(self.__Config_ptr.prolog) Ctl_dict['prolog_epilog_timeout'] = int16orNone(self.__Config_ptr.prolog_epilog_timeout) - # HvB Ctl_dict['prolog_slurmctld'] = stringOrNone(self.__Config_ptr.prolog_slurmctld, '') + Ctl_dict['prolog_slurmctld'] = listOfStrings(self.__Config_ptr.prolog_slurmctld) Ctl_dict['propagate_prio_process'] = self.__Config_ptr.propagate_prio_process Ctl_dict['prolog_flags'] = self.__Config_ptr.prolog_flags Ctl_dict['propagate_rlimits'] = stringOrNone(self.__Config_ptr.propagate_rlimits, '') From 036cff6521b40f3edc855105e047ab4c1850e549 Mon Sep 17 00:00:00 2001 From: Bas van der Vlies Date: Sun, 14 Jul 2024 23:28:45 +0200 Subject: [PATCH 3/3] this a majro version so use 24.05.0 --- pyslurm/__version__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyslurm/__version__.py b/pyslurm/__version__.py index a8060beb..a7069d28 100644 --- a/pyslurm/__version__.py +++ b/pyslurm/__version__.py @@ -5,4 +5,4 @@ # The last Number "Z" is the current Pyslurm patch version, which should be # incremented each time a new release is made (except when migrating to a new # Slurm Major release, then set it back to 0) -__version__ = "24.5.1" +__version__ = "24.05.0"