Hi Tim,

thanks - that's really helpful.

Wolfgang

On Thu, 14 Jul 2016, Tim Wickberg wrote:


On 07/14/2016 08:14 AM, Wolfgang Resch wrote:
 Hi -

 I'm trying to understand the slurmdb API better so i wrote a small C
 program that just goes through the TRESs (slurmdb_tres_get) and QOSs
 (slurmdb_qos_get) which works fine. However, i have a few things i'm not
 sure i understand correctly:

 (1) the `max_wall_pj` field in the `slurmdb_qos_rec_t` struct seems to
     be set to `INFINITE` when no limit was set in a QOS. Is that
     correct?

Yep.

 (2) Is this the correct way to determine if the OverPartQOS flag is set
     in a qos (based on the `flags` field in `slurmdb_qos_rec_t`):

        (qos->flags & QOS_FLAG_BASE) & QOS_FLAG_OVER_PART_QOS

You can simplify that to just:

(qos->flags & QOS_FLAG_OVER_PART_QOS)

 (3) the `max_tres_pu` field contains a string describing the tres
     limits. For example `1=128,1003=8` where 1 is the id of the CPU
     TRES and 1003 corresponts to the gres/gpu. Based on the comment
     in the source code `max_tres_pu_ctld` sounds like it might
     contain an array of just the values from that string but it
     seems to be set to NULL. What is the most straight forward way
     to get the TRES limit for a particular TRES out of `max_tres_pu`?

max_tres_pu_ctld isn't set for that API.

You'll need to parse the max_tres_pu string to get the individual values back out.

See slurmdb_tres_list_from_string() in common/slurmdb_defs.c for an example of how that's done internally, but you can probably skip building a separate list and just scan the string for (comma or start of string)tres_num=value_num(comma or end of string) to pick out a single value.

- Tim


Reply via email to