static int _block_is_deallocating(bg_record_t *bg_record, List kill_job_list) { int jobid = bg_record->job_running; char *user_name = NULL; if (bg_record->modifying) return SLURM_SUCCESS; user_name = xstrdup(bg_conf->slurm_user_name); if (bridge_block_remove_all_users(bg_record, NULL) == REMOVE_USER_ERR) { error("Something happened removing users from block %s", bg_record->bg_block_id); } if (!bg_record->target_name) { error("Target Name was not set for block %s.", bg_record->bg_block_id); bg_record->target_name = xstrdup(bg_record->user_name); } if (!bg_record->user_name) { error("User Name was not set for block %s.", bg_record->bg_block_id); bg_record->user_name = xstrdup(user_name); } if (bg_record->boot_state) { error("State went to free on a boot for block %s.", bg_record->bg_block_id); } else if (jobid > NO_JOB_RUNNING) { if (kill_job_list) { kill_job_struct_t *freeit = (kill_job_struct_t *) xmalloc(sizeof(freeit)); freeit->jobid = jobid; list_push(kill_job_list, freeit); } error("Block %s was in a ready state " "for user %s but is being freed. " "Job %d was lost.", bg_record->bg_block_id, bg_record->user_name, jobid); } else { debug("Block %s was in a ready state " "but is being freed. No job running.", bg_record->bg_block_id); } if (remove_from_bg_list(bg_lists->job_running, bg_record) == SLURM_SUCCESS) num_unused_cpus += bg_record->cpu_cnt; remove_from_bg_list(bg_lists->booted, bg_record); xfree(user_name); return SLURM_SUCCESS; }
/* All changes to the bg_list target_name must be done before this function is called. also slurm_conf_lock() must be called before calling this function along with slurm_conf_unlock() afterwards. */ extern int update_block_user(bg_record_t *bg_record, int set) { int rc=0; if (!bg_record->target_name) { error("Must set target_name to run update_block_user."); return -1; } if (!bg_record->user_name) { error("No user_name"); bg_record->user_name = xstrdup(bg_conf->slurm_user_name); } if (set) { if ((rc = bridge_block_remove_all_users( bg_record, bg_record->target_name)) == REMOVE_USER_ERR) { error("1 Something happened removing " "users from block %s", bg_record->bg_block_id); return -1; } else if (rc == REMOVE_USER_NONE) { if (strcmp(bg_record->target_name, bg_conf->slurm_user_name)) { info("Adding user %s to Block %s", bg_record->target_name, bg_record->bg_block_id); if ((rc = bridge_block_add_user( bg_record, bg_record->target_name)) != SLURM_SUCCESS) { error("bridge_add_block_user" "(%s,%s): %s", bg_record->bg_block_id, bg_record->target_name, bg_err_str(rc)); return -1; } } } } if (strcmp(bg_record->target_name, bg_record->user_name)) { uid_t pw_uid; xfree(bg_record->user_name); bg_record->user_name = xstrdup(bg_record->target_name); if (uid_from_string (bg_record->user_name, &pw_uid) < 0) { error("No such user: %s", bg_record->user_name); return -1; } else { bg_record->user_uid = pw_uid; } return 1; } return 0; }