Skip to content

Commit aaa02a4

Browse files
committed
slurmctld - sort resv licenses appended to node_space table licenses
Sort the appended licenses from the advanced license reservations such that they come after the non-resv licenses, sorted by resv_id and lic_id. This is in preparation for the following commit. Ticket: 24594
1 parent 95659c0 commit aaa02a4

3 files changed

Lines changed: 39 additions & 1 deletion

File tree

src/plugins/sched/backfill/backfill.c

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2251,9 +2251,24 @@ static void _attempt_backfill(void)
22512251
node_space_handler.node_space = node_space;
22522252
node_space_handler.node_space_recs = &node_space_recs;
22532253

2254-
if (bf_licenses)
2254+
if (bf_licenses) {
2255+
int cluster_list_count = cluster_license_count();
2256+
22552257
list_for_each(resv_list, _bf_reserve_resv_licenses,
22562258
&node_space_handler);
2259+
j = 0;
2260+
while (cluster_list_count) {
2261+
/* if 2+ resv license was added sort the list */
2262+
if (list_count(node_space[j].licenses) >
2263+
(cluster_list_count + 1)) {
2264+
list_sort(node_space[j].licenses,
2265+
bf_license_cmp);
2266+
}
2267+
2268+
if ((j = node_space[j].next) == 0)
2269+
break;
2270+
}
2271+
}
22572272

22582273
list_for_each(job_list, _bf_reserve_running,
22592274
&node_space_handler);

src/slurmctld/licenses.c

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3155,3 +3155,24 @@ extern bool slurm_bf_licenses_equal(bf_licenses_t *a, bf_licenses_t *b)
31553155
return false;
31563156
return !(list_find_first_ro(a, _bf_licenses_find_difference, b));
31573157
}
3158+
3159+
/* sort appended resv bf_licenses to be in order of resv id and license id */
3160+
extern int bf_license_cmp(void *x, void *y)
3161+
{
3162+
bf_license_t *entry_a = *(bf_license_t **) x;
3163+
bf_license_t *entry_b = *(bf_license_t **) y;
3164+
int resv_cmp_rc;
3165+
3166+
if (!entry_a->resv_ptr && !entry_b->resv_ptr)
3167+
return 0; /* keep these in cluster_license_list order */
3168+
if (!entry_a->resv_ptr && entry_b->resv_ptr)
3169+
return -1;
3170+
if (entry_a->resv_ptr && !entry_b->resv_ptr)
3171+
return 1;
3172+
if ((resv_cmp_rc =
3173+
slurm_sort_uint32_list_asc(&entry_a->resv_ptr->resv_id,
3174+
&entry_b->resv_ptr->resv_id)))
3175+
return resv_cmp_rc;
3176+
return slurm_sort_uint16_list_asc(&entry_a->id.lic_id,
3177+
&entry_b->id.lic_id);
3178+
}

src/slurmctld/licenses.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,8 @@ extern void license_set_job_tres_cnt(list_t *license_list,
314314

315315
extern bf_licenses_t *bf_licenses_initial(bool bf_running_job_reserve);
316316

317+
extern int bf_license_cmp(void *x, void *y);
318+
317319
extern char *bf_licenses_to_string(bf_licenses_t *licenses_list);
318320

319321
/*

0 commit comments

Comments
 (0)