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; }
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; }
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; }