static int _sort_job_by_node_list(void *void1, void *void2) { int diff = 0; job_info_t *job1; job_info_t *job2; hostlist_t hostlist1, hostlist2; char *val1, *val2; #if PURE_ALPHA_SORT == 0 int inx; #endif _get_job_info_from_void(&job1, &job2, void1, void2); hostlist1 = hostlist_create(job1->nodes); hostlist_sort(hostlist1); val1 = hostlist_shift(hostlist1); if (val1 == NULL) val1 = ""; hostlist_destroy(hostlist1); hostlist2 = hostlist_create(job2->nodes); hostlist_sort(hostlist2); val2 = hostlist_shift(hostlist2); if (val2 == NULL) val2 = ""; hostlist_destroy(hostlist2); #if PURE_ALPHA_SORT diff = strcmp(val1, val2); #else for (inx=0; ; inx++) { if (val1[inx] == val2[inx]) { if (val1[inx] == '\0') break; continue; } if ((isdigit((int)val1[inx])) && (isdigit((int)val2[inx]))) { int num1, num2; num1 = atoi(val1+inx); num2 = atoi(val2+inx); diff = num1 - num2; } else diff = strcmp(val1, val2); break; } #endif if (strlen(val1)) free(val1); if (strlen(val2)) free(val2); if (reverse_order) diff = -diff; return diff; }
static int _sort_job_by_min_tmp_disk(void *void1, void *void2) { int diff; job_info_t *job1; job_info_t *job2; _get_job_info_from_void(&job1, &job2, void1, void2); diff = _diff_uint32(job1->pn_min_tmp_disk, job2->pn_min_tmp_disk); if (reverse_order) diff = -diff; return diff; }
static int _sort_job_by_cluster_name(void *void1, void *void2) { int diff; job_info_t *job1; job_info_t *job2; _get_job_info_from_void(&job1, &job2, void1, void2); diff = xstrcmp(job1->cluster, job2->cluster); if (reverse_order) diff = -diff; return diff; }
static int _sort_job_by_threads(void *void1, void *void2) { int diff; job_info_t *job1; job_info_t *job2; _get_job_info_from_void(&job1, &job2, void1, void2); diff = _diff_uint32(job1->threads_per_core, job2->threads_per_core); if (reverse_order) diff = -diff; return diff; }
static int _sort_job_by_user_id(void *void1, void *void2) { int diff; job_info_t *job1; job_info_t *job2; _get_job_info_from_void(&job1, &job2, void1, void2); diff = _diff_uint32(job1->user_id, job2->user_id); if (reverse_order) diff = -diff; return diff; }
static int _sort_job_by_time_end(void *void1, void *void2) { int diff; job_info_t *job1; job_info_t *job2; _get_job_info_from_void(&job1, &job2, void1, void2); diff = _diff_time(job1->end_time, job2->end_time); if (reverse_order) diff = -diff; return diff; }
static int _sort_job_by_state_compact(void *void1, void *void2) { int diff; job_info_t *job1; job_info_t *job2; _get_job_info_from_void(&job1, &job2, void1, void2); diff = strcmp(job_state_string_compact(job1->job_state), job_state_string_compact(job2->job_state)); if (reverse_order) diff = -diff; return diff; }
static int _sort_job_by_min_memory(void *void1, void *void2) { int diff; job_info_t *job1; job_info_t *job2; _get_job_info_from_void(&job1, &job2, void1, void2); job1->pn_min_memory &= (~MEM_PER_CPU); job2->pn_min_memory &= (~MEM_PER_CPU); diff = _diff_uint32(job1->pn_min_memory, job2->pn_min_memory); if (reverse_order) diff = -diff; return diff; }
static int _sort_job_by_user_name(void *void1, void *void2) { int diff; job_info_t *job1; job_info_t *job2; char *name1, *name2; _get_job_info_from_void(&job1, &job2, void1, void2); name1 = uid_to_string_cached((uid_t) job1->user_id); name2 = uid_to_string_cached((uid_t) job2->user_id); diff = strcmp(name1, name2); if (reverse_order) diff = -diff; return diff; }
static int _sort_job_by_time_used(void *void1, void *void2) { int diff; job_info_t *job1; job_info_t *job2; long time1, time2; _get_job_info_from_void(&job1, &job2, void1, void2); time1 = job_time_used(job1); time2 = job_time_used(job2); diff = _diff_long(time1, time2); if (reverse_order) diff = -diff; return diff; }
static int _sort_job_by_time_start(void *void1, void *void2) { int diff; job_info_t *job1; job_info_t *job2; time_t start_time1, start_time2; _get_job_info_from_void(&job1, &job2, void1, void2); start_time1 = _get_start_time(job1); start_time2 = _get_start_time(job2); diff = _diff_time(start_time1, start_time2); if (reverse_order) diff = -diff; return diff; }
static int _sort_job_by_priority(void *void1, void *void2) { int diff; job_info_t *job1, *job2; uint32_t prio1 = 0, prio2 = 0; _get_part_prio_info_from_void(&prio1, &prio2, void1, void2); diff = _diff_uint32(prio1, prio2); if (diff == 0) { /* Same partition priority, test job priority */ _get_job_info_from_void(&job1, &job2, void1, void2); diff = _diff_uint32(job1->priority, job2->priority); } if (reverse_order) diff = -diff; return diff; }
static int _sort_job_by_reservation(void *void1, void *void2) { int diff; job_info_t *job1; job_info_t *job2; char *val1 = "", *val2 = ""; _get_job_info_from_void(&job1, &job2, void1, void2); if (job1->resv_name) val1 = job1->resv_name; if (job2->resv_name) val2 = job2->resv_name; diff = strcmp(val1, val2); if (reverse_order) diff = -diff; return diff; }
static int _sort_job_by_batch_host(void *void1, void *void2) { int diff; job_info_t *job1; job_info_t *job2; char *val1 = "", *val2 = ""; _get_job_info_from_void(&job1, &job2, void1, void2); if (job1->batch_host) val1 = job1->batch_host; if (job2->batch_host) val2 = job2->batch_host; diff = strcmp(val1, val2); if (reverse_order) diff = -diff; return diff; }
static int _sort_job_by_group_name(void *void1, void *void2) { int diff; job_info_t *job1; job_info_t *job2; struct group *group_info = NULL; char *name1 = "", *name2 = ""; _get_job_info_from_void(&job1, &job2, void1, void2); if ((group_info = getgrgid((gid_t) job1->group_id))) name1 = group_info->gr_name; if ((group_info = getgrgid((gid_t) job2->group_id))) name2 = group_info->gr_name; diff = strcmp(name1, name2); if (reverse_order) diff = -diff; return diff; }
static int _sort_job_by_id(void *void1, void *void2) { int diff; job_info_t *job1; job_info_t *job2; uint32_t job_id1, job_id2; _get_job_info_from_void(&job1, &job2, void1, void2); if (job1->pack_job_id) job_id1 = job1->pack_job_id; else if (job1->array_task_id == NO_VAL) job_id1 = job1->job_id; else job_id1 = job1->array_job_id; if (job2->pack_job_id) job_id2 = job2->pack_job_id; else if (job2->array_task_id == NO_VAL) job_id2 = job2->job_id; else job_id2 = job2->array_job_id; if (job_id1 == job_id2) { if (job1->pack_job_id) job_id1 = job1->pack_job_offset; else job_id1 = job1->array_task_id; if (job2->pack_job_id) job_id2 = job2->pack_job_offset; else job_id2 = job2->array_task_id; } diff = _diff_uint32(job_id1, job_id2); if (reverse_order) diff = -diff; return diff; }
static int _sort_job_by_time_left(void *void1, void *void2) { int diff; job_info_t *job1; job_info_t *job2; time_t time1, time2; _get_job_info_from_void(&job1, &job2, void1, void2); if ((job1->time_limit == INFINITE) || (job1->time_limit == NO_VAL)) time1 = INFINITE; else time1 = job1->time_limit - job_time_used(job1); if ((job2->time_limit == INFINITE) || (job2->time_limit == NO_VAL)) time2 = INFINITE; else time2 = job2->time_limit - job_time_used(job2); diff = _diff_time(time1, time2); if (reverse_order) diff = -diff; return diff; }
static int _sort_job_by_num_sct(void *void1, void *void2) { int diffs, diffc, difft; job_info_t *job1; job_info_t *job2; _get_job_info_from_void(&job1, &job2, void1, void2); diffs = _diff_uint32(job1->sockets_per_node, job2->sockets_per_node); diffc = _diff_uint32(job1->cores_per_socket, job2->cores_per_socket); difft = _diff_uint32(job1->threads_per_core, job2->threads_per_core); if (reverse_order) { diffs = -diffs; diffc = -diffc; difft = -difft; } if (diffs) return diffs; else if (diffc) return diffc; else return difft; }