/* Convert an array of task IDs into a list of host names * RET: the string, caller must xfree() this value */ static char *_task_ids_to_host_list(int ntasks, uint32_t taskids[]) { int i; hostset_t hs; char *hosts; slurm_step_layout_t *sl; if ((sl = launch_common_get_slurm_step_layout(local_srun_job)) == NULL) return (xstrdup("Unknown")); hs = hostset_create(NULL); for (i = 0; i < ntasks; i++) { char *host = slurm_step_layout_host_name(sl, taskids[i]); if (host) { hostset_insert(hs, host); free(host); } else { error("Could not identify host name for task %u", taskids[i]); } } hosts = _hostset_to_string(hs); hostset_destroy(hs); return (hosts); }
/* Convert an array of task IDs into a list of host names * RET: the string, caller must xfree() this value */ static char *_task_ids_to_host_list(int ntasks, uint32_t *taskids) { int i, task_cnt = 0; hostset_t hs; char *hosts; slurm_step_layout_t *sl; if ((sl = launch_common_get_slurm_step_layout(local_srun_job)) == NULL) return (xstrdup("Unknown")); /* If overhead of determining the hostlist is too high then srun * communications will timeout and fail, so return "Unknown" instead. * * See slurm_step_layout_host_id() in src/common/slurm_step_layout.c * for details. */ for (i = 0; i < sl->node_cnt; i++) { task_cnt += sl->tasks[i]; } if (task_cnt > 100000) return (xstrdup("Unknown")); hs = hostset_create(NULL); for (i = 0; i < ntasks; i++) { char *host = slurm_step_layout_host_name(sl, taskids[i]); if (host) { hostset_insert(hs, host); free(host); } else { error("Could not identify host name for task %u", taskids[i]); } } hosts = _hostset_to_string(hs); hostset_destroy(hs); return (hosts); }