Skip to content
Snippets Groups Projects
Commit b3ef449c authored by Morris Jette's avatar Morris Jette
Browse files

Merge branch 'slurm-2.6' into slurm-14.03

Conflicts:
	src/sinfo/sort.c
parents 73192e1e ff518ad1
No related branches found
No related tags found
No related merge requests found
...@@ -450,6 +450,8 @@ documents those changes that are of interest to users and admins. ...@@ -450,6 +450,8 @@ documents those changes that are of interest to users and admins.
-- Handle node ranges better when dealing with accounting max node limits. -- Handle node ranges better when dealing with accounting max node limits.
-- Fix perlapi to compile correctly with perl 5.18 -- Fix perlapi to compile correctly with perl 5.18
-- BGQ - Fix issue with uninitialized variable. -- BGQ - Fix issue with uninitialized variable.
-- Correct sinfo --sort fields to match documentation: E => Reason,
H -> Reason Time (new), R -> Partition Name, u/U -> Reason user (new)
* Changes in Slurm 2.6.9 * Changes in Slurm 2.6.9
======================== ========================
......
...@@ -50,7 +50,8 @@ ...@@ -50,7 +50,8 @@
static bool reverse_order; static bool reverse_order;
static bool part_order; /* order same as in part table */ static bool part_order; /* order same as in part table */
static void _get_sinfo_from_void(sinfo_data_t **s1, sinfo_data_t **s2, void *v1, void *v2); static void _get_sinfo_from_void(sinfo_data_t **s1, sinfo_data_t **s2,
void *v1, void *v2);
static int _sort_by_avail(void *void1, void *void2); static int _sort_by_avail(void *void1, void *void2);
static int _sort_by_cpu_load(void *void1, void *void2); static int _sort_by_cpu_load(void *void1, void *void2);
static int _sort_by_cpus(void *void1, void *void2); static int _sort_by_cpus(void *void1, void *void2);
...@@ -74,6 +75,7 @@ static int _sort_by_preempt_mode(void *void1, void *void2); ...@@ -74,6 +75,7 @@ static int _sort_by_preempt_mode(void *void1, void *void2);
static int _sort_by_priority(void *void1, void *void2); static int _sort_by_priority(void *void1, void *void2);
static int _sort_by_reason(void *void1, void *void2); static int _sort_by_reason(void *void1, void *void2);
static int _sort_by_reason_time(void *void1, void *void2); static int _sort_by_reason_time(void *void1, void *void2);
static int _sort_by_reason_user(void *void1, void *void2);
static int _sort_by_root(void *void1, void *void2); static int _sort_by_root(void *void1, void *void2);
static int _sort_by_share(void *void1, void *void2); static int _sort_by_share(void *void1, void *void2);
static int _sort_by_state(void *void1, void *void2); static int _sort_by_state(void *void1, void *void2);
...@@ -116,7 +118,7 @@ void sort_sinfo_list(List sinfo_list) ...@@ -116,7 +118,7 @@ void sort_sinfo_list(List sinfo_list)
else if (params.sort[i] == 'D') else if (params.sort[i] == 'D')
list_sort(sinfo_list, _sort_by_nodes); list_sort(sinfo_list, _sort_by_nodes);
else if (params.sort[i] == 'E') else if (params.sort[i] == 'E')
list_sort(sinfo_list, _sort_by_reason_time); list_sort(sinfo_list, _sort_by_reason);
else if (params.sort[i] == 'f') else if (params.sort[i] == 'f')
list_sort(sinfo_list, _sort_by_features); list_sort(sinfo_list, _sort_by_features);
else if (params.sort[i] == 'F') else if (params.sort[i] == 'F')
...@@ -125,6 +127,8 @@ void sort_sinfo_list(List sinfo_list) ...@@ -125,6 +127,8 @@ void sort_sinfo_list(List sinfo_list)
list_sort(sinfo_list, _sort_by_groups); list_sort(sinfo_list, _sort_by_groups);
else if (params.sort[i] == 'h') else if (params.sort[i] == 'h')
list_sort(sinfo_list, _sort_by_share); list_sort(sinfo_list, _sort_by_share);
else if (params.sort[i] == 'H')
list_sort(sinfo_list, _sort_by_reason_time);
else if (params.sort[i] == 'l') else if (params.sort[i] == 'l')
list_sort(sinfo_list, _sort_by_max_time); list_sort(sinfo_list, _sort_by_max_time);
else if (params.sort[i] == 'm') else if (params.sort[i] == 'm')
...@@ -146,13 +150,17 @@ void sort_sinfo_list(List sinfo_list) ...@@ -146,13 +150,17 @@ void sort_sinfo_list(List sinfo_list)
else if (params.sort[i] == 'r') else if (params.sort[i] == 'r')
list_sort(sinfo_list, _sort_by_root); list_sort(sinfo_list, _sort_by_root);
else if (params.sort[i] == 'R') else if (params.sort[i] == 'R')
list_sort(sinfo_list, _sort_by_reason); list_sort(sinfo_list, _sort_by_partition);
else if (params.sort[i] == 's') else if (params.sort[i] == 's')
list_sort(sinfo_list, _sort_by_job_size); list_sort(sinfo_list, _sort_by_job_size);
else if (params.sort[i] == 't') else if (params.sort[i] == 't')
list_sort(sinfo_list, _sort_by_state); list_sort(sinfo_list, _sort_by_state);
else if (params.sort[i] == 'T') else if (params.sort[i] == 'T')
list_sort(sinfo_list, _sort_by_state); list_sort(sinfo_list, _sort_by_state);
else if (params.sort[i] == 'u')
list_sort(sinfo_list, _sort_by_reason_user);
else if (params.sort[i] == 'U')
list_sort(sinfo_list, _sort_by_reason_user);
else if (params.sort[i] == 'w') else if (params.sort[i] == 'w')
list_sort(sinfo_list, _sort_by_weight); list_sort(sinfo_list, _sort_by_weight);
else if (params.sort[i] == 'X') else if (params.sort[i] == 'X')
...@@ -665,35 +673,40 @@ static int _sort_by_reason(void *void1, void *void2) ...@@ -665,35 +673,40 @@ static int _sort_by_reason(void *void1, void *void2)
return diff; return diff;
} }
/* Sort by the time associated with the reason (if any).
* If no time, sort by the "reason" string.
* "reason" is of the format "<reason[<user>@MM/DD-HH:MM_SS]"
* or (ISO8601) "<reason[<user>@YYYY-MM-DDTHH:MM:SS]"
* In either case a simple string compare sort order the records. */
static int _sort_by_reason_time(void *void1, void *void2) static int _sort_by_reason_time(void *void1, void *void2)
{ {
int diff; int diff;
sinfo_data_t *sinfo1; sinfo_data_t *sinfo1;
sinfo_data_t *sinfo2; sinfo_data_t *sinfo2;
char *tmp, *val1 = "", *val2 = "";
_get_sinfo_from_void(&sinfo1, &sinfo2, void1, void2); _get_sinfo_from_void(&sinfo1, &sinfo2, void1, void2);
if (sinfo1->reason) { if (sinfo1->reason_time > sinfo2->reason_time)
tmp = strrchr(sinfo1->reason, '@'); diff = 1;
if (tmp) else if (sinfo1->reason_time < sinfo2->reason_time)
val1 = tmp + 1; diff = -1;
else else
val1 = sinfo1->reason; diff = 0;
}
if (sinfo2->reason) { if (reverse_order)
tmp = strrchr(sinfo2->reason, '@'); diff = -diff;
if (tmp) return diff;
val2 = tmp + 1; }
else
val2 = sinfo2->reason; static int _sort_by_reason_user(void *void1, void *void2)
} {
diff = strcmp(val1, val2); int diff;
sinfo_data_t *sinfo1;
sinfo_data_t *sinfo2;
_get_sinfo_from_void(&sinfo1, &sinfo2, void1, void2);
if (sinfo1->reason_uid > sinfo2->reason_uid)
diff = 1;
else if (sinfo1->reason_uid < sinfo2->reason_uid)
diff = -1;
else
diff = 0;
if (reverse_order) if (reverse_order)
diff = -diff; diff = -diff;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment