コード例 #1
0
static int _set_rec(int *start, int argc, char **argv,
		    List name_list,
		    slurmdb_assoc_rec_t *assoc,
		    slurmdb_cluster_rec_t *cluster)
{
	int i;
	int rec_set = 0;
	int assoc_set = 0;
	int end = 0;
	int command_len = 0;
	int option = 0;

	for (i=(*start); i<argc; i++) {
		end = parse_option_end(argv[i]);
		if (!end)
			command_len=strlen(argv[i]);
		else {
			command_len=end-1;
			if (argv[i][end] == '=') {
				option = (int)argv[i][end-1];
				end++;
			}
		}

		if (!strncasecmp(argv[i], "Where", MAX(command_len, 5))) {
			i--;
			break;
		} else if (!end && !strncasecmp(argv[i], "set",
					       MAX(command_len, 3))) {
			continue;
		} else if (!end
			  || !strncasecmp(argv[i], "Names",
					   MAX(command_len, 1))
			  || !strncasecmp(argv[i], "Clusters",
					   MAX(command_len, 3))) {
			if (name_list)
				slurm_addto_char_list(name_list,
						      argv[i]+end);
		} else if (!strncasecmp(argv[i], "Classification",
					 MAX(command_len, 3))) {
			if (cluster) {
				cluster->classification =
					str_2_classification(argv[i]+end);
				if (cluster->classification)
					rec_set = 1;
			}
		} else if (!strncasecmp(argv[i], "Federation",
					 MAX(command_len, 3))) {
			if (cluster) {
				cluster->fed.name = xstrdup(argv[i]+end);
				rec_set = 1;
			}
		} else if (!strncasecmp(argv[i], "FedState",
					 MAX(command_len, 2))) {
			if (cluster) {
				cluster->fed.state =
					str_2_cluster_fed_states(argv[i]+end);
				if (!cluster->fed.state) {
					exit_code=1;
					fprintf(stderr, "Invalid FedState "
						"%s.\n", argv[i]+end);
					break;
				}

				rec_set = 1;
			}
		} else if (!strncasecmp(argv[i], "Weight",
					 MAX(command_len, 2))) {
			if (cluster) {
				cluster->fed.weight = slurm_atoul(argv[i]+end);
				rec_set = 1;
			}
		} else if (!strncasecmp(argv[i], "GrpCPURunMins",
					 MAX(command_len, 7)) ||
			   !strncasecmp(argv[i], "GrpTRESRunMins",
					MAX(command_len, 8))) {
			exit_code=1;
			fprintf(stderr, "GrpTRESRunMins is not a valid option "
				"for the root association of a cluster.\n");
			break;
		} else if (!strncasecmp(argv[i], "GrpCPUMins",
					 MAX(command_len, 7)) ||
			   !strncasecmp(argv[i], "GrpTRESMins",
					MAX(command_len, 8))) {
			exit_code=1;
			fprintf(stderr, "GrpTRESMins is not a valid option "
				"for the root association of a cluster.\n");
			break;
		} else if (!strncasecmp(argv[i], "GrpWall",
					 MAX(command_len, 4))) {
			exit_code=1;
			fprintf(stderr, "GrpWall is not a valid option "
				"for the root association of a cluster.\n");
		} else if (!assoc ||
			  (assoc && !(assoc_set = sacctmgr_set_assoc_rec(
					      assoc, argv[i], argv[i]+end,
					      command_len, option)))) {
			exit_code=1;
			fprintf(stderr, " Unknown option: %s\n"
				" Use keyword 'where' to modify condition\n",
				argv[i]);
		}
	}
	(*start) = i;

	if (rec_set && assoc_set)
		return CLUS_REC_SET | CLUS_ASSOC_SET;
	else if (rec_set)
		return CLUS_REC_SET;
	else if (assoc_set)
		return CLUS_ASSOC_SET;
	return 0;
}
コード例 #2
0
static int _set_cond(int *start, int argc, char **argv,
		     slurmdb_cluster_cond_t *cluster_cond,
		     List format_list)
{
	int i;
	int c_set = 0;
	int a_set = 0;
	int end = 0;
	int command_len = 0;

	with_deleted = 0;
	without_limits = 0;

	for (i=(*start); i<argc; i++) {
		end = parse_option_end(argv[i]);
		if (!end)
			command_len=strlen(argv[i]);
		else {
			command_len=end-1;
			if (argv[i][end] == '=') {
				end++;
			}
		}

		if (!strncasecmp(argv[i], "Set", MAX(command_len, 3))) {
			i--;
			break;
		} else if (!end && !strncasecmp(argv[i], "where",
					       MAX(command_len, 5))) {
			continue;
		} else if (!end &&
			   !strncasecmp(argv[i], "WithDeleted",
					 MAX(command_len, 5))) {
			with_deleted = 1;
		} else if (!end &&
			   !strncasecmp(argv[i], "WithFed",
					 MAX(command_len, 5))) {
			with_fed = 1;
		} else if (!end && !strncasecmp(argv[i], "WOLimits",
						 MAX(command_len, 3))) {
			without_limits = 1;
		} else if (!end || !strncasecmp(argv[i], "Names",
						MAX(command_len, 1))
			  || !strncasecmp(argv[i], "Clusters",
					   MAX(command_len, 3))) {
			if (!cluster_cond->cluster_list)
				cluster_cond->cluster_list =
					list_create(slurm_destroy_char);
			if (slurm_addto_char_list(cluster_cond->cluster_list,
						 argv[i]+end))
				a_set = 1;
		} else if (!end || !strncasecmp(argv[i], "Federations",
						MAX(command_len, 3))) {
			if (!cluster_cond->federation_list)
				cluster_cond->federation_list =
					list_create(slurm_destroy_char);
			if (slurm_addto_char_list(cluster_cond->federation_list,
						  argv[i]+end))
				a_set = 1;
		} else if (!strncasecmp(argv[i], "Classification",
					 MAX(command_len, 3))) {
			cluster_cond->classification =
				str_2_classification(argv[i]+end);
			if (cluster_cond->classification)
				c_set = 1;
		} else if (!strncasecmp(argv[i], "flags",
					 MAX(command_len, 2))) {
			cluster_cond->flags = slurmdb_str_2_cluster_flags(
				argv[i]+end);
			c_set = 1;
		} else if (!strncasecmp(argv[i], "Format",
					 MAX(command_len, 2))) {
			if (format_list)
				slurm_addto_char_list(format_list, argv[i]+end);
		} else if (!end || !strncasecmp(argv[i], "PluginIDSelect",
						MAX(command_len, 1))) {
			if (!cluster_cond->plugin_id_select_list)
				cluster_cond->plugin_id_select_list =
					list_create(slurm_destroy_char);
			if (slurm_addto_char_list(
				   cluster_cond->plugin_id_select_list,
				   argv[i]+end))
				c_set = 1;
		} else if (!end || !strncasecmp(argv[i], "RPCVersions",
						MAX(command_len, 1))) {
			if (!cluster_cond->rpc_version_list)
				cluster_cond->rpc_version_list =
					list_create(slurm_destroy_char);
			if (slurm_addto_char_list(cluster_cond->rpc_version_list,
						 argv[i]+end))
				c_set = 1;
		} else {
			exit_code=1;
			fprintf(stderr, " Unknown condition: %s\n"
				" Use keyword 'set' to modify value\n",
				argv[i]);
			break;
		}
	}
	(*start) = i;

	if (c_set && a_set)
		return 3;
	else if (a_set) {
		return 2;
	} else if (c_set)
		return 1;
	return 0;
}
コード例 #3
0
static int _set_rec(int *start, int argc, char *argv[],
		    List name_list,
		    slurmdb_association_rec_t *assoc,
		    uint16_t *classification)
{
	int i;
	int set = 0;
	int end = 0;
	int command_len = 0;
	int option = 0;

	for (i=(*start); i<argc; i++) {
		end = parse_option_end(argv[i]);
		if(!end)
			command_len=strlen(argv[i]);
		else {
			command_len=end-1;
			if(argv[i][end] == '=') {
				option = (int)argv[i][end-1];
				end++;
			}
		}

		if (!strncasecmp(argv[i], "Where", MAX(command_len, 5))) {
			i--;
			break;
		} else if(!end && !strncasecmp(argv[i], "set",
					       MAX(command_len, 3))) {
			continue;
		} else if(!end
			  || !strncasecmp(argv[i], "Names",
					   MAX(command_len, 1))
			  || !strncasecmp(argv[i], "Clusters",
					   MAX(command_len, 3))) {
			if(name_list)
				slurm_addto_char_list(name_list,
						      argv[i]+end);
		} else if (!strncasecmp(argv[i], "Classification",
					 MAX(command_len, 3))) {
			if(classification) {
				*classification =
					str_2_classification(argv[i]+end);
				if(*classification)
					set = 1;
			}
		} else if (!strncasecmp(argv[i], "GrpCPUMins",
					 MAX(command_len, 7))) {
			exit_code=1;
			fprintf(stderr, "GrpCPUMins is not a valid option "
				"for the root association of a cluster.\n");
			break;
		} else if (!strncasecmp(argv[i], "GrpWall",
					 MAX(command_len, 4))) {
			exit_code=1;
			fprintf(stderr, "GrpWall is not a valid option "
				"for the root association of a cluster.\n");
		} else if(!assoc ||
			  (assoc && !(set = sacctmgr_set_association_rec(
					      assoc, argv[i], argv[i]+end,
					      command_len, option)))) {
			exit_code=1;
			fprintf(stderr, " Unknown option: %s\n"
				" Use keyword 'where' to modify condition\n",
				argv[i]);
		}
	}
	(*start) = i;

	return set;

}