diff --git a/pyslurm/core/reservation.pyx b/pyslurm/core/reservation.pyx index a55b0439..aeafd082 100644 --- a/pyslurm/core/reservation.pyx +++ b/pyslurm/core/reservation.pyx @@ -535,6 +535,8 @@ class ReservationFlags(SlurmFlag): SKIP = slurm.RESERVE_FLAG_SKIP SCHED_FAILED = slurm.RESERVE_FLAG_SCHED_FAILED REPLACE_DOWN = slurm.RESERVE_FLAG_REPLACE_DOWN + GRES_REQUIRED = slurm.RESERVE_FLAG_GRES_REQ + TRES_PER_NODE = slurm.RESERVE_TRES_PER_NODE class ReservationReoccurrence(SlurmEnum): diff --git a/tests/unit/test_reservation.py b/tests/unit/test_reservation.py index 6d297079..75ad5f26 100644 --- a/tests/unit/test_reservation.py +++ b/tests/unit/test_reservation.py @@ -92,3 +92,19 @@ def test_flags_sched_failed(): decoded = ReservationFlags(combo.value) assert ReservationFlags.SCHED_FAILED in decoded + +def test_flags_gres_tres(): + # Regression: reservations with GRES/TRES (e.g. TRES=cpu=2,gres/gpu=2) + # cause Slurm to set GRES_REQ and TRES_PER_NODE internally, which + # previously raised ValueError due to unrecognised bits. + combo = ( + ReservationFlags.SPECIFIC_NODES # SLURM_BIT(15) = 32768 + | ReservationFlags.GRES_REQUIRED # SLURM_BIT(37) = 137438953472 + | ReservationFlags.TRES_PER_NODE # SLURM_BIT(38) = 274877906944 + ) + assert combo.value == 412316893184 + decoded = ReservationFlags(412316893184) + assert ReservationFlags.GRES_REQUIRED in decoded + assert ReservationFlags.TRES_PER_NODE in decoded + assert ReservationFlags.SPECIFIC_NODES in decoded +