diff --git a/pyslurm/core/job/job.pyx b/pyslurm/core/job/job.pyx index 1b3eb989..cea882e0 100644 --- a/pyslurm/core/job/job.pyx +++ b/pyslurm/core/job/job.pyx @@ -52,6 +52,8 @@ from pyslurm.utils.helpers import ( _get_exit_code, cpu_freq_int_to_str, ) +from pyslurm.utils.helpers cimport init_step_id +from pyslurm.slurm cimport slurm_step_id_t cdef class Jobs(MultiClusterMap): @@ -287,8 +289,10 @@ cdef class Job: job_info_msg_t *info = NULL Job wrap = None + cdef slurm_step_id_t step_id = init_step_id() + step_id.job_id = JobID try: - verify_rpc(slurm_load_job(&info, job_id, slurm.SHOW_DETAIL)) + verify_rpc(slurm_load_job(&info, step_id, slurm.SHOW_DETAIL)) if info and info.record_count: wrap = Job.from_ptr(&info.job_array[0]) @@ -384,7 +388,10 @@ cdef class Job: flags |= slurm.KILL_HURRY sig = signal_to_num(signal) - slurm_kill_job(self.id, sig, flags) + + cdef slurm_step_id_t step_id = init_step_id() + step_id.job_id = self.id + slurm_kill_job(step_id, sig, flags) # Ignore errors when the Job is already done or when SIGKILL was # specified and the job id is already purged from slurmctlds memory. @@ -426,7 +433,9 @@ cdef class Job: # _slurm_rpc_suspend it should return ESLURM_INVALID_JOB_ID, but # returns -1 # https://github.com/SchedMD/slurm/blob/master/src/slurmctld/proc_req.c#L4693 - verify_rpc(slurm_suspend(self.id)) + cdef slurm_step_id_t step_id = init_step_id() + step_id.job_id = self.id + verify_rpc(slurm_suspend(step_id)) def unsuspend(self): """Unsuspend a currently suspended Job. @@ -441,7 +450,9 @@ cdef class Job: >>> pyslurm.Job(9999).unsuspend() """ # Same problem as described in suspend() - verify_rpc(slurm_resume(self.id)) + cdef slurm_step_id_t step_id = init_step_id() + step_id.job_id = self.id + verify_rpc(slurm_resume(step_id)) def modify(self, JobSubmitDescription changes): """Modify a Job. @@ -537,7 +548,9 @@ cdef class Job: if hold: flags |= slurm.JOB_REQUEUE_HOLD - verify_rpc(slurm_requeue(self.id, flags)) + cdef slurm_step_id_t step_id = init_step_id() + step_id.job_id = self.id + verify_rpc(slurm_requeue(step_id, flags)) def notify(self, msg): """Sends a message to the Jobs stdout. @@ -556,7 +569,9 @@ cdef class Job: >>> import pyslurm >>> pyslurm.Job(9999).notify("Hello Friends!") """ - verify_rpc(slurm_notify_job(self.id, msg)) + cdef slurm_step_id_t step_id = init_step_id() + step_id.job_id = self.id + verify_rpc(slurm_notify_job(step_id, msg)) def load_stats(self): """Load realtime statistics for a Job and its steps. diff --git a/pyslurm/core/slurmctld/config.pxd b/pyslurm/core/slurmctld/config.pxd index 25e3de27..7d7a34fe 100644 --- a/pyslurm/core/slurmctld/config.pxd +++ b/pyslurm/core/slurmctld/config.pxd @@ -29,7 +29,7 @@ from pyslurm cimport slurm from pyslurm.slurm cimport ( slurm_conf_t, slurm_load_ctl_conf, - slurm_free_ctl_conf, + slurm_free_conf, slurm_preempt_mode_string, slurm_accounting_enforce_string, slurm_sprint_cpu_bind_type, diff --git a/pyslurm/core/slurmctld/config.pyx b/pyslurm/core/slurmctld/config.pyx index 0a9ed72e..877dfbb5 100644 --- a/pyslurm/core/slurmctld/config.pyx +++ b/pyslurm/core/slurmctld/config.pyx @@ -193,7 +193,7 @@ cdef class Config: "Use slurmctld.Config.load() to get an instance.") def __dealloc__(self): - slurm_free_ctl_conf(self.ptr) + slurm_free_conf(self.ptr) self.ptr = NULL @staticmethod diff --git a/pyslurm/deprecated.pyx b/pyslurm/deprecated.pyx index cbf6e0a9..2783e1b5 100644 --- a/pyslurm/deprecated.pyx +++ b/pyslurm/deprecated.pyx @@ -55,7 +55,8 @@ cdef extern from "alps_cray.h" nogil: import builtins as __builtin__ from pyslurm cimport slurm -from pyslurm.slurm cimport xmalloc +from pyslurm.slurm cimport slurm_step_id_t, xmalloc +from pyslurm.utils.helpers cimport init_step_id import pyslurm.core.job include "pydefines/slurm_errno_defines.pxi" @@ -343,10 +344,10 @@ def get_controllers(): (tuple): Name of primary controller, Name of backup controllers """ cdef: - slurm.slurm_conf_t *slurm_ctl_conf_ptr = NULL + slurm.slurm_conf_t *slurm_conf_ptr = NULL slurm.time_t Time = NULL int apiError = 0 - int errCode = slurm.slurm_load_ctl_conf(Time, &slurm_ctl_conf_ptr) + int errCode = slurm.slurm_load_ctl_conf(Time, &slurm_conf_ptr) uint32_t length = 0 if errCode != 0: @@ -354,15 +355,15 @@ def get_controllers(): raise ValueError(stringOrNone(slurm.slurm_strerror(apiError), ''), apiError) control_machs = [] - if slurm_ctl_conf_ptr is not NULL: + if slurm_conf_ptr is not NULL: - if slurm_ctl_conf_ptr.control_machine is not NULL: - length = slurm_ctl_conf_ptr.control_cnt + if slurm_conf_ptr.control_machine is not NULL: + length = slurm_conf_ptr.control_cnt for index in range(length): - primary = stringOrNone(slurm_ctl_conf_ptr.control_machine[index], '') + primary = stringOrNone(slurm_conf_ptr.control_machine[index], '') control_machs.append(primary) - slurm.slurm_free_ctl_conf(slurm_ctl_conf_ptr) + slurm.slurm_free_conf(slurm_conf_ptr) return control_machs @@ -447,8 +448,10 @@ cpdef long slurm_get_rem_time(uint32_t JobID=0) except? -1: Returns: int: Remaining time in seconds or -1 on error """ + cdef slurm_step_id_t step_id = init_step_id() + step_id.job_id = JobID cdef int apiError = 0 - cdef long errCode = slurm.slurm_get_rem_time(JobID) + cdef long errCode = slurm.slurm_get_rem_time(step_id) if errCode != 0: apiError = slurm_get_errno() @@ -466,9 +469,11 @@ cpdef time_t slurm_get_end_time(uint32_t JobID=0) except? -1: Returns: int: Remaining time in seconds or -1 on error """ + cdef slurm_step_id_t step_id = init_step_id() + step_id.job_id = JobID cdef time_t EndTime = -1 cdef int apiError = 0 - cdef int errCode = slurm.slurm_get_end_time(JobID, &EndTime) + cdef int errCode = slurm.slurm_get_end_time(step_id, &EndTime) if errCode != 0: apiError = slurm_get_errno() @@ -487,7 +492,9 @@ cpdef int slurm_job_node_ready(uint32_t JobID=0) except? -1: int: Node ready code. """ cdef int apiError = 0 - cdef int errCode = slurm.slurm_job_node_ready(JobID) + cdef slurm_step_id_t step_id = init_step_id() + step_id.job_id = JobID + cdef int errCode = slurm.slurm_job_node_ready(step_id) return errCode @@ -504,7 +511,8 @@ def slurm_pid2jobid(uint32_t JobPID=0): cdef: uint32_t JobID = 0 int apiError = 0 - int errCode = slurm.slurm_pid2jobid(JobPID, &JobID) + slurm_step_id_t step_id = init_step_id() + int errCode = slurm.slurm_pid2jobid(JobPID, &step_id) if errCode != 0: apiError = slurm_get_errno() diff --git a/pyslurm/pydefines/slurm_errno_enums.pxi b/pyslurm/pydefines/slurm_errno_enums.pxi index 0c282f5e..2e373d0e 100644 --- a/pyslurm/pydefines/slurm_errno_enums.pxi +++ b/pyslurm/pydefines/slurm_errno_enums.pxi @@ -23,7 +23,7 @@ ESLURM_JOB_MISSING_REQUIRED_PARTITION_GROUP = slurm.ESLURM_JOB_MISSING_REQUIRED_ ESLURM_REQUESTED_NODES_NOT_IN_PARTITION = slurm.ESLURM_REQUESTED_NODES_NOT_IN_PARTITION ESLURM_TOO_MANY_REQUESTED_CPUS = slurm.ESLURM_TOO_MANY_REQUESTED_CPUS ESLURM_INVALID_NODE_COUNT = slurm.ESLURM_INVALID_NODE_COUNT -ESLURM_ERROR_ON_DESC_TO_RECORD_COPY = slurm.ESLURM_ERROR_ON_DESC_TO_RECORD_COPY +ESLURM_MAX_JOB_COUNT = slurm.ESLURM_MAX_JOB_COUNT ESLURM_JOB_MISSING_SIZE_SPECIFICATION = slurm.ESLURM_JOB_MISSING_SIZE_SPECIFICATION ESLURM_JOB_SCRIPT_MISSING = slurm.ESLURM_JOB_SCRIPT_MISSING ESLURM_USER_ID_MISSING = slurm.ESLURM_USER_ID_MISSING diff --git a/pyslurm/slurm/extra.pxi b/pyslurm/slurm/extra.pxi index e63ec3a4..e411f252 100644 --- a/pyslurm/slurm/extra.pxi +++ b/pyslurm/slurm/extra.pxi @@ -157,6 +157,7 @@ ctypedef struct job_resources: uint32_t next_step_node_inx uint32_t nhosts bitstr_t *node_bitmap + uint32_t *node_ranks uint32_t node_req char *nodes uint32_t ncpus diff --git a/pyslurm/slurm/slurm.h.pxi b/pyslurm/slurm/slurm.h.pxi index 0777dd4f..b3e1034d 100644 --- a/pyslurm/slurm/slurm.h.pxi +++ b/pyslurm/slurm/slurm.h.pxi @@ -2632,7 +2632,7 @@ cdef extern from "slurm/slurm.h": 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(slurm_step_id_t job_id, uint16_t signal, uint16_t flags) int slurm_kill_job_step(slurm_step_id_t* step_id, uint16_t signal, uint16_t flags) @@ -2666,15 +2666,15 @@ cdef extern from "slurm/slurm.h": long slurm_api_version() - int slurm_load_ctl_conf(time_t update_time, slurm_conf_t** slurm_ctl_conf_ptr) + int slurm_load_ctl_conf(time_t update_time, slurm_conf_t** slurm_conf_ptr) - void slurm_free_ctl_conf(slurm_conf_t* slurm_ctl_conf_ptr) + void slurm_free_conf(slurm_conf_t* slurm_conf_ptr) - void slurm_print_ctl_conf(FILE* out, slurm_conf_t* slurm_ctl_conf_ptr) + void slurm_print_ctl_conf(FILE* out, slurm_conf_t* slurm_conf_ptr) - void slurm_write_ctl_conf(slurm_conf_t* slurm_ctl_conf_ptr, node_info_msg_t* node_info_ptr, partition_info_msg_t* part_info_ptr) + void slurm_write_ctl_conf(slurm_conf_t* slurm_conf_ptr, node_info_msg_t* node_info_ptr, partition_info_msg_t* part_info_ptr) - void* slurm_ctl_conf_2_key_pairs(slurm_conf_t* slurm_ctl_conf_ptr) + void* slurm_ctl_conf_2_key_pairs(slurm_conf_t* slurm_conf_ptr) void slurm_print_key_pairs(FILE* out, void* key_pairs, char* title) @@ -2698,7 +2698,7 @@ cdef extern from "slurm/slurm.h": 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) + int slurm_get_end_time(slurm_step_id_t jobid, time_t* end_time_ptr) void slurm_get_job_stderr(char* buf, int buf_size, job_info_t* job_ptr) @@ -2710,11 +2710,11 @@ cdef extern from "slurm/slurm.h": char* slurm_expand_job_stdio_fields(char* path, job_info_t* job) - long slurm_get_rem_time(uint32_t jobid) + long slurm_get_rem_time(slurm_step_id_t jobid) - int slurm_job_node_ready(uint32_t job_id) + int slurm_job_node_ready(slurm_step_id_t job_id) - int slurm_load_job(job_info_msg_t** resp, uint32_t job_id, uint16_t show_flags) + int slurm_load_job(job_info_msg_t** resp, slurm_step_id_t job_id, uint16_t show_flags) int slurm_load_job_sluid(job_info_msg_t** resp, sluid_t sluid, uint16_t show_flags) @@ -2726,9 +2726,9 @@ cdef extern from "slurm/slurm.h": 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_notify_job(slurm_step_id_t job_id, char* message) - int slurm_pid2jobid(pid_t job_pid, uint32_t* job_id_ptr) + int slurm_pid2jobid(pid_t job_pid, slurm_step_id_t* job_id_ptr) int slurm_update_job(job_desc_msg_t* job_msg) @@ -2880,17 +2880,17 @@ cdef extern from "slurm/slurm.h": int slurm_update_suspend_exc_states(char* states, update_mode_t mode) - int slurm_suspend(uint32_t job_id) + int slurm_suspend(slurm_step_id_t job_id) int slurm_suspend2(char* job_id, job_array_resp_msg_t** resp) - int slurm_resume(uint32_t job_id) + int slurm_resume(slurm_step_id_t job_id) int slurm_resume2(char* job_id, job_array_resp_msg_t** resp) void slurm_free_job_array_resp(job_array_resp_msg_t* resp) - int slurm_requeue(uint32_t job_id, uint32_t flags) + int slurm_requeue(slurm_step_id_t job_id, uint32_t flags) int slurm_requeue2(char* job_id, uint32_t flags, job_array_resp_msg_t** resp) diff --git a/pyslurm/slurm/slurm_errno.h.pxi b/pyslurm/slurm/slurm_errno.h.pxi index 8fd4aa1a..c4323668 100644 --- a/pyslurm/slurm/slurm_errno.h.pxi +++ b/pyslurm/slurm/slurm_errno.h.pxi @@ -89,7 +89,7 @@ cdef extern from "slurm/slurm_errno.h": ESLURM_REQUESTED_NODES_NOT_IN_PARTITION ESLURM_TOO_MANY_REQUESTED_CPUS ESLURM_INVALID_NODE_COUNT - ESLURM_ERROR_ON_DESC_TO_RECORD_COPY + ESLURM_MAX_JOB_COUNT ESLURM_JOB_MISSING_SIZE_SPECIFICATION ESLURM_JOB_SCRIPT_MISSING ESLURM_USER_ID_MISSING diff --git a/pyslurm/version.py b/pyslurm/version.py index 3a5fcf8f..fdcf63d3 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__ = "25.11.2" +__version__ = "26.5.0"