int print_jobs_array(job_info_t * jobs, int size, List format) { int i; List l; l = list_create(NULL); if (!params.no_header) print_job_from_format(NULL, format); /* Filter out the jobs of interest */ for (i = 0; i < size; i++) { if (_filter_job(&jobs[i])) continue; if (_merge_job_array(l, &jobs[i])) continue; list_append(l, (void *) &jobs[i]); } sort_jobs_by_start_time (l); sort_job_list (l); /* Print the jobs of interest */ list_for_each (l, (ListForF) print_job_from_format, (void *) format); list_destroy (l); return SLURM_SUCCESS; }
extern List priority_p_get_priority_factors_list( priority_factors_request_msg_t *req_msg, uid_t uid) { List req_job_list; List req_user_list; List ret_list = NULL; ListIterator itr; priority_factors_object_t *obj = NULL; struct job_record *job_ptr = NULL; time_t start_time = time(NULL); xassert(req_msg); req_job_list = req_msg->job_id_list; req_user_list = req_msg->uid_list; /* Read lock on jobs, nodes, and partitions */ slurmctld_lock_t job_read_lock = { NO_LOCK, READ_LOCK, READ_LOCK, READ_LOCK }; if (job_list && list_count(job_list)) { ret_list = list_create(slurm_destroy_priority_factors_object); lock_slurmctld(job_read_lock); itr = list_iterator_create(job_list); if (itr == NULL) fatal("list_iterator_create: malloc failure"); while ((job_ptr = list_next(itr))) { /* * We are only looking for pending jobs */ if (!IS_JOB_PENDING(job_ptr)) continue; /* * This means the job is not eligible yet */ if (!job_ptr->details->begin_time || (job_ptr->details->begin_time > start_time)) continue; /* * 0 means the job is held */ if (job_ptr->priority == 0) continue; /* * Priority has been set elsewhere (e.g. by SlurmUser) */ if (job_ptr->direct_set_prio) continue; if (_filter_job(job_ptr, req_job_list, req_user_list)) continue; if ((slurmctld_conf.private_data & PRIVATE_DATA_JOBS) && (job_ptr->user_id != uid) && !validate_operator(uid) && !assoc_mgr_is_user_acct_coord( acct_db_conn, uid, job_ptr->account)) continue; obj = xmalloc(sizeof(priority_factors_object_t)); memcpy(obj, job_ptr->prio_factors, sizeof(priority_factors_object_t)); obj->job_id = job_ptr->job_id; obj->user_id = job_ptr->user_id; list_append(ret_list, obj); } list_iterator_destroy(itr); unlock_slurmctld(job_read_lock); if (!list_count(ret_list)) { list_destroy(ret_list); ret_list = NULL; } } return ret_list; }