|
Lines 2551-2556
static bitstr_t *_get_update_node_bitmap(slurmctld_resv_t *resv_ptr,
Link Here
|
| 2551 |
return node_bitmap; |
2551 |
return node_bitmap; |
| 2552 |
} |
2552 |
} |
| 2553 |
|
2553 |
|
|
|
2554 |
/* Returns false if only one reoccurring flag is set, true otherwise */ |
| 2555 |
static bool _has_multiple_reoccurring(resv_desc_msg_t *resv_desc_ptr){ |
| 2556 |
int flag_count = 0; |
| 2557 |
if (resv_desc_ptr->flags & RESERVE_FLAG_HOURLY) |
| 2558 |
flag_count++; |
| 2559 |
if (resv_desc_ptr->flags & RESERVE_FLAG_DAILY) |
| 2560 |
flag_count++; |
| 2561 |
if (resv_desc_ptr->flags & RESERVE_FLAG_WEEKDAY) |
| 2562 |
flag_count++; |
| 2563 |
if (resv_desc_ptr->flags & RESERVE_FLAG_WEEKEND) |
| 2564 |
flag_count++; |
| 2565 |
if (resv_desc_ptr->flags & RESERVE_FLAG_WEEKLY) |
| 2566 |
flag_count++; |
| 2567 |
|
| 2568 |
return (flag_count > 1); |
| 2569 |
} |
| 2570 |
|
| 2554 |
/* Create a resource reservation */ |
2571 |
/* Create a resource reservation */ |
| 2555 |
extern int create_resv(resv_desc_msg_t *resv_desc_ptr, char **err_msg) |
2572 |
extern int create_resv(resv_desc_msg_t *resv_desc_ptr, char **err_msg) |
| 2556 |
{ |
2573 |
{ |
|
Lines 2622-2627
extern int create_resv(resv_desc_msg_t *resv_desc_ptr, char **err_msg)
Link Here
|
| 2622 |
} else |
2639 |
} else |
| 2623 |
resv_desc_ptr->end_time = INFINITE; |
2640 |
resv_desc_ptr->end_time = INFINITE; |
| 2624 |
|
2641 |
|
|
|
2642 |
if (resv_desc_ptr->flags & RESERVE_REOCCURRING) { |
| 2643 |
if (_has_multiple_reoccurring(resv_desc_ptr)) { |
| 2644 |
info("Reservation has multiple reoccurring flags. Please specify only one reoccurring flag"); |
| 2645 |
if (err_msg) |
| 2646 |
*err_msg = xstrdup("Reservation has multiple reoccurring flags. Please specify only one reoccurring flag"); |
| 2647 |
rc = ESLURM_NOT_SUPPORTED; |
| 2648 |
goto bad_parse; |
| 2649 |
} |
| 2650 |
} |
| 2651 |
|
| 2625 |
if ((resv_desc_ptr->flags & RESERVE_FLAG_REPLACE) || |
2652 |
if ((resv_desc_ptr->flags & RESERVE_FLAG_REPLACE) || |
| 2626 |
(resv_desc_ptr->flags & RESERVE_FLAG_REPLACE_DOWN)) { |
2653 |
(resv_desc_ptr->flags & RESERVE_FLAG_REPLACE_DOWN)) { |
| 2627 |
if (resv_desc_ptr->node_list) { |
2654 |
if (resv_desc_ptr->node_list) { |
|
Lines 3052-3075
extern int update_resv(resv_desc_msg_t *resv_desc_ptr, char **err_msg)
Link Here
|
| 3052 |
resv_ptr->flags |= RESERVE_FLAG_IGN_JOBS; |
3079 |
resv_ptr->flags |= RESERVE_FLAG_IGN_JOBS; |
| 3053 |
if (resv_desc_ptr->flags & RESERVE_FLAG_NO_IGN_JOB) |
3080 |
if (resv_desc_ptr->flags & RESERVE_FLAG_NO_IGN_JOB) |
| 3054 |
resv_ptr->flags &= (~RESERVE_FLAG_IGN_JOBS); |
3081 |
resv_ptr->flags &= (~RESERVE_FLAG_IGN_JOBS); |
| 3055 |
if (resv_desc_ptr->flags & RESERVE_FLAG_HOURLY) |
|
|
| 3056 |
resv_ptr->flags |= RESERVE_FLAG_HOURLY; |
| 3057 |
if (resv_desc_ptr->flags & RESERVE_FLAG_NO_HOURLY) |
3082 |
if (resv_desc_ptr->flags & RESERVE_FLAG_NO_HOURLY) |
| 3058 |
resv_ptr->flags &= (~RESERVE_FLAG_HOURLY); |
3083 |
resv_ptr->flags &= (~RESERVE_FLAG_HOURLY); |
| 3059 |
if (resv_desc_ptr->flags & RESERVE_FLAG_DAILY) |
|
|
| 3060 |
resv_ptr->flags |= RESERVE_FLAG_DAILY; |
| 3061 |
if (resv_desc_ptr->flags & RESERVE_FLAG_NO_DAILY) |
3084 |
if (resv_desc_ptr->flags & RESERVE_FLAG_NO_DAILY) |
| 3062 |
resv_ptr->flags &= (~RESERVE_FLAG_DAILY); |
3085 |
resv_ptr->flags &= (~RESERVE_FLAG_DAILY); |
| 3063 |
if (resv_desc_ptr->flags & RESERVE_FLAG_WEEKDAY) |
|
|
| 3064 |
resv_ptr->flags |= RESERVE_FLAG_WEEKDAY; |
| 3065 |
if (resv_desc_ptr->flags & RESERVE_FLAG_NO_WEEKDAY) |
3086 |
if (resv_desc_ptr->flags & RESERVE_FLAG_NO_WEEKDAY) |
| 3066 |
resv_ptr->flags &= (~RESERVE_FLAG_WEEKDAY); |
3087 |
resv_ptr->flags &= (~RESERVE_FLAG_WEEKDAY); |
| 3067 |
if (resv_desc_ptr->flags & RESERVE_FLAG_WEEKEND) |
|
|
| 3068 |
resv_ptr->flags |= RESERVE_FLAG_WEEKEND; |
| 3069 |
if (resv_desc_ptr->flags & RESERVE_FLAG_NO_WEEKEND) |
3088 |
if (resv_desc_ptr->flags & RESERVE_FLAG_NO_WEEKEND) |
| 3070 |
resv_ptr->flags &= (~RESERVE_FLAG_WEEKEND); |
3089 |
resv_ptr->flags &= (~RESERVE_FLAG_WEEKEND); |
| 3071 |
if (resv_desc_ptr->flags & RESERVE_FLAG_WEEKLY) |
|
|
| 3072 |
resv_ptr->flags |= RESERVE_FLAG_WEEKLY; |
| 3073 |
if (resv_desc_ptr->flags & RESERVE_FLAG_NO_WEEKLY) |
3090 |
if (resv_desc_ptr->flags & RESERVE_FLAG_NO_WEEKLY) |
| 3074 |
resv_ptr->flags &= (~RESERVE_FLAG_WEEKLY); |
3091 |
resv_ptr->flags &= (~RESERVE_FLAG_WEEKLY); |
| 3075 |
if (resv_desc_ptr->flags & RESERVE_FLAG_ANY_NODES) |
3092 |
if (resv_desc_ptr->flags & RESERVE_FLAG_ANY_NODES) |
|
Lines 3080-3085
extern int update_resv(resv_desc_msg_t *resv_desc_ptr, char **err_msg)
Link Here
|
| 3080 |
resv_ptr->flags &= (~RESERVE_FLAG_STATIC); |
3097 |
resv_ptr->flags &= (~RESERVE_FLAG_STATIC); |
| 3081 |
if (resv_desc_ptr->flags & RESERVE_FLAG_FIRST_CORES) |
3098 |
if (resv_desc_ptr->flags & RESERVE_FLAG_FIRST_CORES) |
| 3082 |
resv_ptr->flags |= RESERVE_FLAG_FIRST_CORES; |
3099 |
resv_ptr->flags |= RESERVE_FLAG_FIRST_CORES; |
|
|
3100 |
if (resv_desc_ptr->flags & RESERVE_REOCCURRING) { |
| 3101 |
|
| 3102 |
/* |
| 3103 |
* If the reservation already has a reoccurring flag |
| 3104 |
* or is being updated to have multiple reoccurring |
| 3105 |
* flags, then reject the update |
| 3106 |
*/ |
| 3107 |
if ((resv_ptr->flags & RESERVE_REOCCURRING) || |
| 3108 |
(_has_multiple_reoccurring(resv_desc_ptr))) { |
| 3109 |
info("Cannot update reservation to have multiple reoccurring flags. Please specify only one reoccurring flag"); |
| 3110 |
if (err_msg) |
| 3111 |
*err_msg = xstrdup("Cannot update reservation to have multiple reoccurring flags. Please specify only one reoccurring flag"); |
| 3112 |
error_code = ESLURM_NOT_SUPPORTED; |
| 3113 |
goto update_failure; |
| 3114 |
} |
| 3115 |
else if (resv_desc_ptr->flags & RESERVE_FLAG_HOURLY) |
| 3116 |
resv_ptr->flags |= RESERVE_FLAG_HOURLY; |
| 3117 |
else if (resv_desc_ptr->flags & RESERVE_FLAG_DAILY) |
| 3118 |
resv_ptr->flags |= RESERVE_FLAG_DAILY; |
| 3119 |
else if (resv_desc_ptr->flags & RESERVE_FLAG_WEEKDAY) |
| 3120 |
resv_ptr->flags |= RESERVE_FLAG_WEEKDAY; |
| 3121 |
else if (resv_desc_ptr->flags & RESERVE_FLAG_WEEKEND) |
| 3122 |
resv_ptr->flags |= RESERVE_FLAG_WEEKEND; |
| 3123 |
else if (resv_desc_ptr->flags & RESERVE_FLAG_WEEKLY) |
| 3124 |
resv_ptr->flags |= RESERVE_FLAG_WEEKLY; |
| 3125 |
} |
| 3083 |
if ((resv_desc_ptr->flags & RESERVE_FLAG_REPLACE) || |
3126 |
if ((resv_desc_ptr->flags & RESERVE_FLAG_REPLACE) || |
| 3084 |
(resv_desc_ptr->flags & RESERVE_FLAG_REPLACE_DOWN)) { |
3127 |
(resv_desc_ptr->flags & RESERVE_FLAG_REPLACE_DOWN)) { |
| 3085 |
if ((resv_ptr->flags & RESERVE_FLAG_SPEC_NODES) || |
3128 |
if ((resv_ptr->flags & RESERVE_FLAG_SPEC_NODES) || |
| 3086 |
- |
|
|
| 3087 |
reoccurring |
3129 |
reoccurring |
| 3088 |
-- |
|
|
| 3089 |
src/slurmctld/reservation.c | 8 ++++++++ |
3130 |
src/slurmctld/reservation.c | 8 ++++++++ |
| 3090 |
1 file changed, 8 insertions(+) |
3131 |
1 file changed, 8 insertions(+) |