/* * hostlist2bitmap - given a hostlist, build a bitmap representation * IN hl - hostlist * IN best_effort - if set don't return an error on invalid node name entries * OUT bitmap - set to bitmap, may not have all bits set on error * RET 0 if no error, otherwise EINVAL */ extern int hostlist2bitmap (hostlist_t hl, bool best_effort, bitstr_t **bitmap) { int rc = SLURM_SUCCESS; bitstr_t *my_bitmap; char *name; hostlist_iterator_t hi; FREE_NULL_BITMAP(*bitmap); my_bitmap = (bitstr_t *) bit_alloc (node_record_count); *bitmap = my_bitmap; hi = hostlist_iterator_create(hl); while ((name = hostlist_next(hi)) != NULL) { struct node_record *node_ptr; node_ptr = _find_node_record(name, best_effort, true); if (node_ptr) { bit_set (my_bitmap, (bitoff_t) (node_ptr - node_record_table_ptr)); } else { error ("hostlist2bitmap: invalid node specified %s", name); if (!best_effort) rc = EINVAL; } free (name); } hostlist_iterator_destroy(hi); return rc; }
/* * node_name2bitmap - given a node name regular expression, build a bitmap * representation * IN node_names - list of nodes * IN best_effort - if set don't return an error on invalid node name entries * OUT bitmap - set to bitmap, may not have all bits set on error * RET 0 if no error, otherwise EINVAL * NOTE: call FREE_NULL_BITMAP() to free bitmap memory when no longer required */ extern int node_name2bitmap (char *node_names, bool best_effort, bitstr_t **bitmap) { int rc = SLURM_SUCCESS; char *this_node_name; bitstr_t *my_bitmap; hostlist_t host_list; my_bitmap = (bitstr_t *) bit_alloc (node_record_count); *bitmap = my_bitmap; if (node_names == NULL) { info("node_name2bitmap: node_names is NULL"); return rc; } if ( (host_list = hostlist_create (node_names)) == NULL) { /* likely a badly formatted hostlist */ error ("hostlist_create on %s error:", node_names); if (!best_effort) rc = EINVAL; return rc; } while ( (this_node_name = hostlist_shift (host_list)) ) { struct node_record *node_ptr; node_ptr = _find_node_record(this_node_name, best_effort); if (node_ptr) { bit_set (my_bitmap, (bitoff_t) (node_ptr - node_record_table_ptr)); } else { error ("node_name2bitmap: invalid node specified %s", this_node_name); if (!best_effort) rc = EINVAL; } free (this_node_name); } hostlist_destroy (host_list); return rc; }
/* * find_node_record - find a record for node with specified name * IN: name - name of the desired node * RET: pointer to node record or NULL if not found */ extern struct node_record *find_node_record (char *name) { return _find_node_record(name, true); }
/* * find_node_record_no_alias - find a record for node with specified name * without looking at the node's alias (NodeHostName). * IN: name - name of the desired node * RET: pointer to node record or NULL if not found * NOTE: Does not log an error if the node name is NOT found */ extern struct node_record *find_node_record_no_alias (char *name) { return _find_node_record(name, false, true); }