/* * convert perl HV to node_info_t */ int hv_to_node_info(HV *hv, node_info_t *node_info) { memset(node_info, 0, sizeof(node_info_t)); FETCH_FIELD(hv, node_info, arch, charp, FALSE); FETCH_FIELD(hv, node_info, boot_time, time_t, TRUE); FETCH_FIELD(hv, node_info, cores, uint16_t, TRUE); FETCH_FIELD(hv, node_info, cpu_load, uint32_t, TRUE); FETCH_FIELD(hv, node_info, cpus, uint16_t, TRUE); FETCH_FIELD(hv, node_info, features, charp, FALSE); FETCH_FIELD(hv, node_info, features_act, charp, FALSE); FETCH_FIELD(hv, node_info, gres, charp, FALSE); FETCH_FIELD(hv, node_info, name, charp, TRUE); FETCH_FIELD(hv, node_info, node_state, uint32_t, TRUE); FETCH_FIELD(hv, node_info, os, charp, FALSE); FETCH_FIELD(hv, node_info, real_memory, uint64_t, TRUE); FETCH_FIELD(hv, node_info, reason, charp, FALSE); FETCH_FIELD(hv, node_info, reason_time, time_t, TRUE); FETCH_FIELD(hv, node_info, reason_uid, uint32_t, TRUE); FETCH_FIELD(hv, node_info, slurmd_start_time, time_t, TRUE); FETCH_FIELD(hv, node_info, boards, uint16_t, TRUE); FETCH_FIELD(hv, node_info, sockets, uint16_t, TRUE); FETCH_FIELD(hv, node_info, threads, uint16_t, TRUE); FETCH_FIELD(hv, node_info, tmp_disk, uint32_t, TRUE); FETCH_FIELD(hv, node_info, weight, uint32_t, TRUE); FETCH_PTR_FIELD(hv, node_info, select_nodeinfo, "Slurm::dynamic_plugin_data_t", TRUE); return 0; }
/* * convert perl HV to resv_desc_msg_t. */ int hv_to_update_reservation_msg(HV *hv, resv_desc_msg_t *resv_msg) { slurm_init_resv_desc_msg(resv_msg); FETCH_FIELD(hv, resv_msg, accounts, charp, FALSE); FETCH_FIELD(hv, resv_msg, duration, uint32_t, FALSE); FETCH_FIELD(hv, resv_msg, end_time, time_t, FALSE); FETCH_FIELD(hv, resv_msg, features, charp, FALSE); FETCH_FIELD(hv, resv_msg, flags, uint16_t, FALSE); FETCH_FIELD(hv, resv_msg, licenses, charp, FALSE); FETCH_FIELD(hv, resv_msg, name, charp, FALSE); FETCH_PTR_FIELD(hv, resv_msg, node_cnt, "SLURM::uint32_t", FALSE); FETCH_FIELD(hv, resv_msg, node_list, charp, FALSE); FETCH_FIELD(hv, resv_msg, partition, charp, FALSE); FETCH_FIELD(hv, resv_msg, start_time, time_t, FALSE); FETCH_FIELD(hv, resv_msg, users, charp, FALSE); return 0; }
/* * convert perl HV to job_info_t */ int hv_to_job_info(HV *hv, job_info_t *job_info) { SV **svp; AV *av; int i, n; memset(job_info, 0, sizeof(job_info_t)); FETCH_FIELD(hv, job_info, account, charp, FALSE); FETCH_FIELD(hv, job_info, alloc_node, charp, FALSE); FETCH_FIELD(hv, job_info, alloc_sid, uint32_t, TRUE); FETCH_FIELD(hv, job_info, batch_flag, uint16_t, TRUE); FETCH_FIELD(hv, job_info, command, charp, FALSE); FETCH_FIELD(hv, job_info, comment, charp, FALSE); FETCH_FIELD(hv, job_info, contiguous, uint16_t, TRUE); FETCH_FIELD(hv, job_info, cpus_per_task, uint16_t, TRUE); FETCH_FIELD(hv, job_info, dependency, charp, FALSE); FETCH_FIELD(hv, job_info, derived_ec, uint32_t, TRUE); FETCH_FIELD(hv, job_info, eligible_time, time_t, TRUE); FETCH_FIELD(hv, job_info, end_time, time_t, TRUE); FETCH_FIELD(hv, job_info, exc_nodes, charp, FALSE); svp = hv_fetch(hv, "exc_node_inx", 12, FALSE); if (svp && SvROK(*svp) && SvTYPE(SvRV(*svp)) == SVt_PVAV) { av = (AV*)SvRV(*svp); n = av_len(av) + 2; /* for trailing -1 */ job_info->exc_node_inx = xmalloc(n * sizeof(int)); for (i = 0; i < n-1; i += 2) { job_info->exc_node_inx[i] = (int)SvIV(*(av_fetch(av, i, FALSE))); job_info->exc_node_inx[i+1] = (int)SvIV(*(av_fetch(av, i+1, FALSE))); } job_info->exc_node_inx[n-1] = -1; } else { /* nothing to do */ } FETCH_FIELD(hv, job_info, exit_code, uint32_t, TRUE); FETCH_FIELD(hv, job_info, features, charp, FALSE); FETCH_FIELD(hv, job_info, gres, charp, FALSE); FETCH_FIELD(hv, job_info, group_id, uint32_t, TRUE); FETCH_FIELD(hv, job_info, job_id, uint32_t, TRUE); FETCH_FIELD(hv, job_info, job_state, uint16_t, TRUE); FETCH_FIELD(hv, job_info, licenses, charp, FALSE); FETCH_FIELD(hv, job_info, max_cpus, uint32_t, TRUE); FETCH_FIELD(hv, job_info, max_nodes, uint32_t, TRUE); FETCH_FIELD(hv, job_info, sockets_per_node, uint16_t, TRUE); FETCH_FIELD(hv, job_info, cores_per_socket, uint16_t, TRUE); FETCH_FIELD(hv, job_info, threads_per_core, uint16_t, TRUE); FETCH_FIELD(hv, job_info, name, charp, FALSE); FETCH_FIELD(hv, job_info, network, charp, FALSE); FETCH_FIELD(hv, job_info, nice, uint16_t, TRUE); FETCH_FIELD(hv, job_info, nodes, charp, FALSE); svp = hv_fetch(hv, "node_inx", 8, FALSE); if (svp && SvROK(*svp) && SvTYPE(SvRV(*svp)) == SVt_PVAV) { av = (AV*)SvRV(*svp); n = av_len(av) + 2; /* for trailing -1 */ job_info->node_inx = xmalloc(n * sizeof(int)); for (i = 0; i < n-1; i += 2) { job_info->node_inx[i] = (int)SvIV(*(av_fetch(av, i, FALSE))); job_info->node_inx[i+1] = (int)SvIV(*(av_fetch(av, i+1, FALSE))); } job_info->node_inx[n-1] = -1; } else { /* nothing to do */ } FETCH_FIELD(hv, job_info, ntasks_per_core, uint16_t, TRUE); FETCH_FIELD(hv, job_info, ntasks_per_node, uint16_t, TRUE); FETCH_FIELD(hv, job_info, ntasks_per_socket, uint16_t, TRUE); FETCH_FIELD(hv, job_info, num_nodes, uint32_t, TRUE); FETCH_FIELD(hv, job_info, num_cpus, uint32_t, TRUE); FETCH_FIELD(hv, job_info, pn_min_memory, uint32_t, TRUE); FETCH_FIELD(hv, job_info, pn_min_cpus, uint16_t, TRUE); FETCH_FIELD(hv, job_info, pn_min_tmp_disk, uint32_t, TRUE); FETCH_FIELD(hv, job_info, partition, charp, FALSE); FETCH_FIELD(hv, job_info, qos, charp, FALSE); FETCH_FIELD(hv, job_info, req_nodes, charp, FALSE); svp = hv_fetch(hv, "req_node_inx", 12, FALSE); if (svp && SvROK(*svp) && SvTYPE(SvRV(*svp)) == SVt_PVAV) { av = (AV*)SvRV(*svp); n = av_len(av) + 2; /* for trailing -1 */ job_info->req_node_inx = xmalloc(n * sizeof(int)); for (i = 0; i < n-1; i += 2) { job_info->req_node_inx[i] = (int)SvIV(*(av_fetch(av, i, FALSE))); job_info->req_node_inx[i+1] = (int)SvIV(*(av_fetch(av, i+1, FALSE))); } job_info->req_node_inx[n-1] = -1; } else { /* nothing to do */ } FETCH_FIELD(hv, job_info, req_switch, uint32_t, FALSE); FETCH_FIELD(hv, job_info, requeue, uint16_t, TRUE); FETCH_FIELD(hv, job_info, resize_time, time_t, TRUE); FETCH_FIELD(hv, job_info, restart_cnt, uint16_t, TRUE); FETCH_FIELD(hv, job_info, resv_name, charp, FALSE); FETCH_PTR_FIELD(hv, job_info, select_jobinfo, "Slurm::dynamic_plugin_data_t", FALSE); FETCH_PTR_FIELD(hv, job_info, job_resrcs, "Slurm::job_resources_t", FALSE); FETCH_FIELD(hv, job_info, shared, uint16_t, TRUE); FETCH_FIELD(hv, job_info, show_flags, uint16_t, TRUE); FETCH_FIELD(hv, job_info, start_time, time_t, TRUE); FETCH_FIELD(hv, job_info, state_desc, charp, FALSE); FETCH_FIELD(hv, job_info, state_reason, uint16_t, TRUE); FETCH_FIELD(hv, job_info, submit_time, time_t, TRUE); FETCH_FIELD(hv, job_info, suspend_time, time_t, TRUE); FETCH_FIELD(hv, job_info, time_limit, uint32_t, TRUE); FETCH_FIELD(hv, job_info, time_min, uint32_t, TRUE); FETCH_FIELD(hv, job_info, wait4switch, uint32_t, FALSE); FETCH_FIELD(hv, job_info, wckey, charp, FALSE); FETCH_FIELD(hv, job_info, work_dir, charp, FALSE); return 0; }