Exemplo n.º 1
0
/**
 * @brief
 * 		create_specific_nodepart - create a node partition with specific
 *				          nodes, rather than from a placement
 *				          set resource=value
 *
 * @param[in]	policy	-	policy info
 * @param[in]	name	-	the name of the node partition
 * @param[in]	nodes	-	the nodes to create the placement set with
 *
 * @return	node_partition * - the node partition
 * @NULL	: on error
 */
node_partition *
create_specific_nodepart(status *policy, char *name, node_info **nodes)
{
	node_partition *np;
	int i, j;
	int cnt;

	if (name == NULL || nodes == NULL)
		return NULL;

	np = new_node_partition();
	if (np == NULL)
		return NULL;

	cnt = count_array((void **) nodes);

	np->name = string_dup(name);
	np->def = NULL;
	np->res_val = string_dup("none");
	np->rank = get_sched_rank();

	np->ninfo_arr = malloc((cnt + 1) * sizeof(node_info*));
	if (np->ninfo_arr == NULL) {
		log_err(errno, __func__, MEM_ERR_MSG);
		free_node_partition(np);
		return NULL;
	}

	j = 0;
	for (i = 0; i < cnt; i++) {
		if (!nodes[i]->is_stale) {
			np->ninfo_arr[j] = nodes[i];
			j++;
		}

	}
	np->tot_nodes = j;



	np->ninfo_arr[np->tot_nodes] = NULL;

	if (node_partition_update(policy, np) == 0) {
		free_node_partition(np);
		return NULL;
	}

	return np;
}
Exemplo n.º 2
0
/**
 * @brief
 *		free_node_partition_array - free an array of node_partitions
 *
 * @param[in]	np_arr	-	node partition array to free
 *
 * @return	nothing
 *
 */
void
free_node_partition_array(node_partition **np_arr)
{
	int i;

	if (np_arr == NULL)
		return;

	for (i = 0; np_arr[i] != NULL; i++)
		free_node_partition(np_arr[i]);

	free(np_arr);
}
Exemplo n.º 3
0
/**
 * @brief
 *		free_queue_info - free space used by a queue info struct
 *
 * @param[in,out]	qinfo	-	queue to free
 *
 * @return	nothing
 *
 */
void
free_queue_info(queue_info *qinfo)
{
	if (qinfo->name != NULL)
		free(qinfo->name);
	if (qinfo->qres != NULL)
		free_resource_list(qinfo->qres);
	if (qinfo->running_jobs != NULL)
		free(qinfo->running_jobs);
	if (qinfo->nodes != NULL)
		free(qinfo->nodes);
	if (qinfo->nodes_in_partition != NULL)
		free(qinfo->nodes_in_partition);
	if (qinfo->alljobcounts != NULL)
		free_counts_list(qinfo->alljobcounts);
	if (qinfo->group_counts != NULL)
		free_counts_list(qinfo->group_counts);
	if (qinfo->project_counts != NULL)
		free_counts_list(qinfo->project_counts);
	if (qinfo->user_counts != NULL)
		free_counts_list(qinfo->user_counts);
	if (qinfo->total_alljobcounts != NULL)
		free_counts_list(qinfo->total_alljobcounts);
	if (qinfo->total_group_counts != NULL)
		free_counts_list(qinfo->total_group_counts);
	if (qinfo->total_project_counts != NULL)
		free_counts_list(qinfo->total_project_counts);
	if (qinfo->total_user_counts != NULL)
		free_counts_list(qinfo->total_user_counts);
	if (qinfo->nodepart != NULL)
		free_node_partition_array(qinfo->nodepart);
	if (qinfo->allpart != NULL)
		free_node_partition(qinfo->allpart);
	if (qinfo->node_group_key != NULL)
		free_string_array(qinfo->node_group_key);

	if (qinfo->liminfo != NULL) {
		lim_free_liminfo(qinfo->liminfo);
		qinfo->liminfo = NULL;
	}
	if (qinfo->partition != NULL)
		free(qinfo->partition);

	free(qinfo);
}
Exemplo n.º 4
0
/**
 * @brief
 *		dup_node_partition - duplicate a node_partition structure
 *
 * @param[in]	onp	-	the node_partition structure to duplicate
 * @param[in]	nsinfo	-	server for the new node partiton (the nodes are needed)
 *
 * @return	duplicated node_partition
 * @retval	NULL	: on error
 *
 */
node_partition *
dup_node_partition(node_partition *onp, server_info *nsinfo)
{
	node_partition *nnp;

	if (onp == NULL)
		return NULL;

	if ((nnp = new_node_partition()) == NULL)
		return NULL;

	if (onp->name != NULL)
		nnp->name = string_dup(onp->name);

	if (onp->def != NULL)
		nnp->def = onp->def;

	if (onp->res_val != NULL)
		nnp->res_val = string_dup(onp->res_val);

	nnp->ok_break = onp->ok_break;
	nnp->excl = onp->excl;
	nnp->tot_nodes = onp->tot_nodes;
	nnp->free_nodes = onp->free_nodes;
	nnp->res = dup_resource_list(onp->res);
#ifdef NAS /* localmod 049 */
	nnp->ninfo_arr = copy_node_ptr_array(onp->ninfo_arr, nsinfo->nodes, nsinfo);
#else
	nnp->ninfo_arr = copy_node_ptr_array(onp->ninfo_arr, nsinfo->nodes);
#endif

	nnp->bkts = dup_node_bucket_array(onp->bkts, nsinfo);
	nnp->rank = onp->rank;

	/* validity check */
	if (onp->name == NULL || onp->res_val == NULL ||
		nnp->res == NULL || nnp->ninfo_arr == NULL) {
		free_node_partition(nnp);
		return NULL;
	}
	return nnp;
}