extern int unpack_slurm_step_layout(slurm_step_layout_t **layout, Buf buffer, uint16_t protocol_version) { uint16_t uint16_tmp; uint32_t num_tids, uint32_tmp; slurm_step_layout_t *step_layout = NULL; int i; if (protocol_version >= SLURM_MIN_PROTOCOL_VERSION) { safe_unpack16(&uint16_tmp, buffer); if (!uint16_tmp) return SLURM_SUCCESS; step_layout = xmalloc(sizeof(slurm_step_layout_t)); *layout = step_layout; safe_unpackstr_xmalloc(&step_layout->front_end, &uint32_tmp, buffer); safe_unpackstr_xmalloc(&step_layout->node_list, &uint32_tmp, buffer); safe_unpack32(&step_layout->node_cnt, buffer); safe_unpack16(&step_layout->start_protocol_ver, buffer); safe_unpack32(&step_layout->task_cnt, buffer); safe_unpack32(&step_layout->task_dist, buffer); step_layout->tasks = xmalloc(sizeof(uint32_t) * step_layout->node_cnt); step_layout->tids = xmalloc(sizeof(uint32_t *) * step_layout->node_cnt); for (i = 0; i < step_layout->node_cnt; i++) { safe_unpack32_array(&(step_layout->tids[i]), &num_tids, buffer); step_layout->tasks[i] = num_tids; } } else { error("unpack_slurm_step_layout: protocol_version " "%hu not supported", protocol_version); goto unpack_error; } return SLURM_SUCCESS; unpack_error: slurm_step_layout_destroy(step_layout); *layout = NULL; return SLURM_ERROR; }
extern int unpack_job_resources(job_resources_t **job_resrcs_pptr, Buf buffer, uint16_t protocol_version) { char *bit_fmt = NULL; uint32_t empty, tmp32; job_resources_t *job_resrcs; uint32_t cluster_flags = slurmdb_setup_cluster_flags(); xassert(job_resrcs_pptr); if (protocol_version >= SLURM_2_5_PROTOCOL_VERSION) { safe_unpack32(&empty, buffer); if (empty == NO_VAL) { *job_resrcs_pptr = NULL; return SLURM_SUCCESS; } job_resrcs = xmalloc(sizeof(struct job_resources)); job_resrcs->nhosts = empty; safe_unpack32(&job_resrcs->ncpus, buffer); safe_unpack32(&job_resrcs->node_req, buffer); safe_unpackstr_xmalloc(&job_resrcs->nodes, &tmp32, buffer); safe_unpack32_array(&job_resrcs->cpu_array_reps, &tmp32, buffer); if (tmp32 == 0) xfree(job_resrcs->cpu_array_reps); job_resrcs->cpu_array_cnt = tmp32; safe_unpack16_array(&job_resrcs->cpu_array_value, &tmp32, buffer); if (tmp32 == 0) xfree(job_resrcs->cpu_array_value); if (tmp32 != job_resrcs->cpu_array_cnt) goto unpack_error; safe_unpack16_array(&job_resrcs->cpus, &tmp32, buffer); if (tmp32 == 0) xfree(job_resrcs->cpus); if (tmp32 != job_resrcs->nhosts) goto unpack_error; safe_unpack16_array(&job_resrcs->cpus_used, &tmp32, buffer); if (tmp32 == 0) xfree(job_resrcs->cpus_used); safe_unpack32_array(&job_resrcs->memory_allocated, &tmp32, buffer); if (tmp32 == 0) xfree(job_resrcs->memory_allocated); safe_unpack32_array(&job_resrcs->memory_used, &tmp32, buffer); if (tmp32 == 0) xfree(job_resrcs->memory_used); if (!(cluster_flags & CLUSTER_FLAG_BG)) { safe_unpack16_array(&job_resrcs->sockets_per_node, &tmp32, buffer); if (tmp32 == 0) xfree(job_resrcs->sockets_per_node); safe_unpack16_array(&job_resrcs->cores_per_socket, &tmp32, buffer); if (tmp32 == 0) xfree(job_resrcs->cores_per_socket); safe_unpack32_array(&job_resrcs->sock_core_rep_count, &tmp32, buffer); if (tmp32 == 0) xfree(job_resrcs->sock_core_rep_count); unpack_bit_str(&job_resrcs->core_bitmap, buffer); unpack_bit_str(&job_resrcs->core_bitmap_used, buffer); } } else if (protocol_version >= SLURM_2_3_PROTOCOL_VERSION) { uint8_t tmp_8; safe_unpack32(&empty, buffer); if (empty == NO_VAL) { *job_resrcs_pptr = NULL; return SLURM_SUCCESS; } job_resrcs = xmalloc(sizeof(struct job_resources)); job_resrcs->nhosts = empty; safe_unpack32(&job_resrcs->ncpus, buffer); safe_unpack8(&tmp_8, buffer); if (tmp_8 < 100) /* Not NODE_CR_RESERVED */ job_resrcs->node_req = tmp_8; /* 32-bit in v2.5 */ else job_resrcs->node_req = NODE_CR_RESERVED; safe_unpackstr_xmalloc(&job_resrcs->nodes, &tmp32, buffer); safe_unpack32_array(&job_resrcs->cpu_array_reps, &tmp32, buffer); if (tmp32 == 0) xfree(job_resrcs->cpu_array_reps); job_resrcs->cpu_array_cnt = tmp32; safe_unpack16_array(&job_resrcs->cpu_array_value, &tmp32, buffer); if (tmp32 == 0) xfree(job_resrcs->cpu_array_value); if (tmp32 != job_resrcs->cpu_array_cnt) goto unpack_error; safe_unpack16_array(&job_resrcs->cpus, &tmp32, buffer); if (tmp32 == 0) xfree(job_resrcs->cpus); if (tmp32 != job_resrcs->nhosts) goto unpack_error; safe_unpack16_array(&job_resrcs->cpus_used, &tmp32, buffer); if (tmp32 == 0) xfree(job_resrcs->cpus_used); safe_unpack32_array(&job_resrcs->memory_allocated, &tmp32, buffer); if (tmp32 == 0) xfree(job_resrcs->memory_allocated); safe_unpack32_array(&job_resrcs->memory_used, &tmp32, buffer); if (tmp32 == 0) xfree(job_resrcs->memory_used); if (!(cluster_flags & CLUSTER_FLAG_BG)) { safe_unpack16_array(&job_resrcs->sockets_per_node, &tmp32, buffer); if (tmp32 == 0) xfree(job_resrcs->sockets_per_node); safe_unpack16_array(&job_resrcs->cores_per_socket, &tmp32, buffer); if (tmp32 == 0) xfree(job_resrcs->cores_per_socket); safe_unpack32_array(&job_resrcs->sock_core_rep_count, &tmp32, buffer); if (tmp32 == 0) xfree(job_resrcs->sock_core_rep_count); unpack_bit_str(&job_resrcs->core_bitmap, buffer); unpack_bit_str(&job_resrcs->core_bitmap_used, buffer); } } else { error("unpack_job_resources: protocol_version %hu not " "supported", protocol_version); goto unpack_error; } *job_resrcs_pptr = job_resrcs; return SLURM_SUCCESS; unpack_error: error("unpack_job_resources: unpack error"); free_job_resources(&job_resrcs); xfree(bit_fmt); *job_resrcs_pptr = NULL; return SLURM_ERROR; }