diff --git a/src/sacctmgr/account_functions.c b/src/sacctmgr/account_functions.c index 768b5206ff9b82079d034ffd932b3eac78ad4de8..d75c1920223db74d603b7c2cde1be4842f5a4150 100644 --- a/src/sacctmgr/account_functions.c +++ b/src/sacctmgr/account_functions.c @@ -76,38 +76,38 @@ static int _set_cond(int *start, int argc, char *argv[], } } - if (!strncasecmp (argv[i], "Set", MAX(command_len, 3))) { + if (!strncasecmp(argv[i], "Set", MAX(command_len, 3))) { i--; break; } else if (!end && - !strncasecmp (argv[i], "WithAssoc", + !strncasecmp(argv[i], "WithAssoc", MAX(command_len, 5))) { acct_cond->with_assocs = 1; } else if (!end && - !strncasecmp (argv[i], "WithCoordinators", + !strncasecmp(argv[i], "WithCoordinators", MAX(command_len, 5))) { acct_cond->with_coords = 1; } else if (!end && - !strncasecmp (argv[i], "WithDeleted", + !strncasecmp(argv[i], "WithDeleted", MAX(command_len, 5))) { acct_cond->with_deleted = 1; assoc_cond->with_deleted = 1; } else if (!end && - !strncasecmp (argv[i], "WithRawQOSLevel", + !strncasecmp(argv[i], "WithRawQOSLevel", MAX(command_len, 5))) { assoc_cond->with_raw_qos = 1; - } else if (!end && !strncasecmp (argv[i], "WOPLimits", + } else if (!end && !strncasecmp(argv[i], "WOPLimits", MAX(command_len, 4))) { assoc_cond->without_parent_limits = 1; } else if(!end && !strncasecmp(argv[i], "where", MAX(command_len, 5))) { continue; } else if(!end - || !strncasecmp (argv[i], "Names", + || !strncasecmp(argv[i], "Names", MAX(command_len, 1)) - || !strncasecmp (argv[i], "Accounts", + || !strncasecmp(argv[i], "Accounts", MAX(command_len, 1)) - || !strncasecmp (argv[i], "Acct", + || !strncasecmp(argv[i], "Acct", MAX(command_len, 4))) { if(!assoc_cond->acct_list) { assoc_cond->acct_list = @@ -117,35 +117,7 @@ static int _set_cond(int *start, int argc, char *argv[], assoc_cond->acct_list, argv[i]+end)) u_set = 1; - } else if (!strncasecmp (argv[i], "Clusters", - MAX(command_len, 1))) { - if(!assoc_cond->cluster_list) { - assoc_cond->cluster_list = - list_create(slurm_destroy_char); - } - if(slurm_addto_char_list( - assoc_cond->cluster_list, - argv[i]+end)) - a_set = 1; - } else if (!strncasecmp (argv[i], "DefaultQOS", - MAX(command_len, 8))) { - if(!assoc_cond->def_qos_id_list) { - assoc_cond->def_qos_id_list = - list_create(slurm_destroy_char); - } - if(!g_qos_list) { - g_qos_list = acct_storage_g_get_qos( - db_conn, my_uid, NULL); - } - - if(slurmdb_addto_qos_char_list( - assoc_cond->def_qos_id_list, - g_qos_list, - argv[i]+end, 0)) - a_set = 1; - else - exit_code = 1; - } else if (!strncasecmp (argv[i], "Descriptions", + } else if (!strncasecmp(argv[i], "Descriptions", MAX(command_len, 1))) { if(!acct_cond->description_list) { acct_cond->description_list = @@ -154,125 +126,11 @@ static int _set_cond(int *start, int argc, char *argv[], if(slurm_addto_char_list(acct_cond->description_list, argv[i]+end)) u_set = 1; - } else if (!strncasecmp (argv[i], "Format", + } else if (!strncasecmp(argv[i], "Format", MAX(command_len, 1))) { if(format_list) slurm_addto_char_list(format_list, argv[i]+end); - } else if (!strncasecmp (argv[i], "FairShare", - MAX(command_len, 1)) - || !strncasecmp (argv[i], "Shares", - MAX(command_len, 1))) { - if(!assoc_cond->fairshare_list) - assoc_cond->fairshare_list = - list_create(slurm_destroy_char); - if(slurm_addto_char_list(assoc_cond->fairshare_list, - argv[i]+end)) - a_set = 1; - } else if (!strncasecmp (argv[i], "GrpCPUMins", - MAX(command_len, 7))) { - if(!assoc_cond->grp_cpu_mins_list) - assoc_cond->grp_cpu_mins_list = - list_create(slurm_destroy_char); - if(slurm_addto_char_list(assoc_cond->grp_cpu_mins_list, - argv[i]+end)) - a_set = 1; - } else if (!strncasecmp (argv[i], "GrpCpus", - MAX(command_len, 7))) { - if(!assoc_cond->grp_cpus_list) - assoc_cond->grp_cpus_list = - list_create(slurm_destroy_char); - if(slurm_addto_char_list(assoc_cond->grp_cpus_list, - argv[i]+end)) - a_set = 1; - } else if (!strncasecmp (argv[i], "GrpJobs", - MAX(command_len, 4))) { - if(!assoc_cond->grp_jobs_list) - assoc_cond->grp_jobs_list = - list_create(slurm_destroy_char); - if(slurm_addto_char_list(assoc_cond->grp_jobs_list, - argv[i]+end)) - a_set = 1; - } else if (!strncasecmp (argv[i], "GrpNodes", - MAX(command_len, 4))) { - if(!assoc_cond->grp_nodes_list) - assoc_cond->grp_nodes_list = - list_create(slurm_destroy_char); - if(slurm_addto_char_list(assoc_cond->grp_nodes_list, - argv[i]+end)) - a_set = 1; - } else if (!strncasecmp (argv[i], "GrpSubmitJobs", - MAX(command_len, 4))) { - if(!assoc_cond->grp_submit_jobs_list) - assoc_cond->grp_submit_jobs_list = - list_create(slurm_destroy_char); - if(slurm_addto_char_list( - assoc_cond->grp_submit_jobs_list, - argv[i]+end)) - a_set = 1; - } else if (!strncasecmp (argv[i], "GrpWall", - MAX(command_len, 4))) { - if(!assoc_cond->grp_wall_list) - assoc_cond->grp_wall_list = - list_create(slurm_destroy_char); - if(slurm_addto_char_list( - assoc_cond->grp_wall_list, - argv[i]+end)) - a_set = 1; - } else if (!strncasecmp (argv[i], "MaxCPUMinsPerJob", - MAX(command_len, 7))) { - if(!assoc_cond->max_cpu_mins_pj_list) - assoc_cond->max_cpu_mins_pj_list = - list_create(slurm_destroy_char); - if(slurm_addto_char_list( - assoc_cond->max_cpu_mins_pj_list, - argv[i]+end)) - a_set = 1; - } else if (!strncasecmp (argv[i], "MaxCpusPerJob", - MAX(command_len, 7))) { - if(!assoc_cond->max_cpus_pj_list) - assoc_cond->max_cpus_pj_list = - list_create(slurm_destroy_char); - if(slurm_addto_char_list( - assoc_cond->max_cpus_pj_list, - argv[i]+end)) - a_set = 1; - } else if (!strncasecmp (argv[i], "MaxJobs", - MAX(command_len, 4))) { - if(!assoc_cond->max_jobs_list) - assoc_cond->max_jobs_list = - list_create(slurm_destroy_char); - if(slurm_addto_char_list( - assoc_cond->max_jobs_list, - argv[i]+end)) - a_set = 1; - } else if (!strncasecmp (argv[i], "MaxNodesPerJob", - MAX(command_len, 4))) { - if(!assoc_cond->max_nodes_pj_list) - assoc_cond->max_nodes_pj_list = - list_create(slurm_destroy_char); - if(slurm_addto_char_list( - assoc_cond->max_nodes_pj_list, - argv[i]+end)) - a_set = 1; - } else if (!strncasecmp (argv[i], "MaxSubmitJobs", - MAX(command_len, 4))) { - if(!assoc_cond->max_submit_jobs_list) - assoc_cond->max_submit_jobs_list = - list_create(slurm_destroy_char); - if(slurm_addto_char_list( - assoc_cond->max_submit_jobs_list, - argv[i]+end)) - a_set = 1; - } else if (!strncasecmp (argv[i], "MaxWallDurationPerJob", - MAX(command_len, 4))) { - if(!assoc_cond->max_wall_pj_list) - assoc_cond->max_wall_pj_list = - list_create(slurm_destroy_char); - if(slurm_addto_char_list( - assoc_cond->max_wall_pj_list, - argv[i]+end)) - a_set = 1; - } else if (!strncasecmp (argv[i], "Organizations", + } else if (!strncasecmp(argv[i], "Organizations", MAX(command_len, 1))) { if(!acct_cond->organization_list) { acct_cond->organization_list = @@ -281,42 +139,13 @@ static int _set_cond(int *start, int argc, char *argv[], if(slurm_addto_char_list(acct_cond->organization_list, argv[i]+end)) u_set = 1; - } else if (!strncasecmp (argv[i], "Parent", - MAX(command_len, 1))) { - if(!assoc_cond->parent_acct_list) { - assoc_cond->parent_acct_list = - list_create(slurm_destroy_char); - } - if(slurm_addto_char_list(assoc_cond->parent_acct_list, - argv[i]+end)) - a_set = 1; - } else if (!strncasecmp (argv[i], "QosLevel", - MAX(command_len, 1))) { - if(!assoc_cond->qos_list) { - assoc_cond->qos_list = - list_create(slurm_destroy_char); - } - - if(!g_qos_list) { - g_qos_list = acct_storage_g_get_qos( - db_conn, my_uid, NULL); - } - - if(slurmdb_addto_qos_char_list(assoc_cond->qos_list, - g_qos_list, - argv[i]+end, option)) - a_set = 1; - else { - exit_code = 1; - fprintf(stderr, - " Bad QosLevel value: %s\n", - argv[i]+end); - } - } else { + } else if(!(a_set = sacctmgr_set_association_cond( + assoc_cond, argv[i], argv[i]+end, + command_len))) { exit_code=1; fprintf(stderr, " Unknown condition: %s\n" - " Use keyword 'set' to modify " - "SLURM_PRINT_VALUE\n", argv[i]); + " Use keyword 'set' to modify value\n", + argv[i]); } } @@ -338,7 +167,7 @@ static int _set_rec(int *start, int argc, char *argv[], slurmdb_account_rec_t *acct, slurmdb_association_rec_t *assoc) { - int i, mins; + int i; int u_set = 0; int a_set = 0; int end = 0; @@ -357,18 +186,18 @@ static int _set_rec(int *start, int argc, char *argv[], } } - if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))) { + 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], "Account", + || !strncasecmp(argv[i], "Account", MAX(command_len, 1)) - || !strncasecmp (argv[i], "Names", + || !strncasecmp(argv[i], "Names", MAX(command_len, 1)) - || !strncasecmp (argv[i], "Acct", + || !strncasecmp(argv[i], "Acct", MAX(command_len, 4))) { if(acct_list) slurm_addto_char_list(acct_list, argv[i]+end); @@ -378,7 +207,7 @@ static int _set_rec(int *start, int argc, char *argv[], " Can't modify the name " "of an account\n"); } - } else if (!strncasecmp (argv[i], "Cluster", + } else if (!strncasecmp(argv[i], "Cluster", MAX(command_len, 1))) { if(cluster_list) slurm_addto_char_list(cluster_list, @@ -389,179 +218,18 @@ static int _set_rec(int *start, int argc, char *argv[], " Can't modify the cluster " "of an account\n"); } - } else if (!strncasecmp (argv[i], "DefaultQOS", - MAX(command_len, 8))) { - if(!assoc) - continue; - - if(!g_qos_list) { - g_qos_list = acct_storage_g_get_qos( - db_conn, my_uid, NULL); - } - - if(atoi(argv[i]+end) == -1) - assoc->def_qos_id = -1; - else - assoc->def_qos_id = str_2_slurmdb_qos( - g_qos_list, argv[i]+end); - - if(assoc->def_qos_id == NO_VAL) { - fprintf(stderr, - "You gave a bad qos '%s'. " - "Use 'list qos' to get " - "complete list.\n", - argv[i]+end); - exit_code = 1; - break; - } - a_set = 1; - } else if (!strncasecmp (argv[i], "Description", + } else if (!strncasecmp(argv[i], "Description", MAX(command_len, 1))) { acct->description = strip_quotes(argv[i]+end, NULL, 1); u_set = 1; - } else if (!strncasecmp (argv[i], "FairShare", - MAX(command_len, 1)) - || !strncasecmp (argv[i], "Shares", - MAX(command_len, 1))) { - if(!assoc) - continue; - if (get_uint(argv[i]+end, &assoc->shares_raw, - "Shares") == SLURM_SUCCESS) - a_set = 1; - } else if (!strncasecmp (argv[i], "GrpCPUMins", - MAX(command_len, 7))) { - if(!assoc) - continue; - if (get_uint64(argv[i]+end, - &assoc->grp_cpu_mins, - "GrpCPUMins") == SLURM_SUCCESS) - a_set = 1; - } else if (!strncasecmp (argv[i], "GrpCpus", - MAX(command_len, 7))) { - if(!assoc) - continue; - if (get_uint(argv[i]+end, &assoc->grp_cpus, - "GrpCpus") == SLURM_SUCCESS) - a_set = 1; - } else if (!strncasecmp (argv[i], "GrpJobs", - MAX(command_len, 4))) { - if(!assoc) - continue; - if (get_uint(argv[i]+end, &assoc->grp_jobs, - "GrpJobs") == SLURM_SUCCESS) - a_set = 1; - } else if (!strncasecmp (argv[i], "GrpNodes", - MAX(command_len, 4))) { - if(!assoc) - continue; - if (get_uint(argv[i]+end, &assoc->grp_nodes, - "GrpNodes") == SLURM_SUCCESS) - a_set = 1; - } else if (!strncasecmp (argv[i], "GrpSubmitJobs", - MAX(command_len, 4))) { - if(!assoc) - continue; - if (get_uint(argv[i]+end, &assoc->grp_submit_jobs, - "GrpSubmitJobs") == SLURM_SUCCESS) - a_set = 1; - } else if (!strncasecmp (argv[i], "GrpWall", - MAX(command_len, 4))) { - if(!assoc) - continue; - mins = time_str2mins(argv[i]+end); - if (mins != NO_VAL) { - assoc->grp_wall = (uint32_t) mins; - a_set = 1; - } else { - exit_code=1; - fprintf(stderr, - " Bad GrpWall time format: %s\n", - argv[i]); - } - } else if (!strncasecmp (argv[i], "MaxCPUMinsPerJob", - MAX(command_len, 7))) { - if(!assoc) - continue; - if (get_uint64(argv[i]+end, - &assoc->max_cpu_mins_pj, - "MaxCPUMins") == SLURM_SUCCESS) - a_set = 1; - } else if (!strncasecmp (argv[i], "MaxCpusPerJob", - MAX(command_len, 7))) { - if(!assoc) - continue; - if (get_uint(argv[i]+end, &assoc->max_cpus_pj, - "MaxCpus") == SLURM_SUCCESS) - a_set = 1; - } else if (!strncasecmp (argv[i], "MaxJobs", - MAX(command_len, 4))) { - if(!assoc) - continue; - if (get_uint(argv[i]+end, &assoc->max_jobs, - "MaxJobs") == SLURM_SUCCESS) - a_set = 1; - } else if (!strncasecmp (argv[i], "MaxNodesPerJob", - MAX(command_len, 4))) { - if(!assoc) - continue; - if (get_uint(argv[i]+end, - &assoc->max_nodes_pj, - "MaxNodes") == SLURM_SUCCESS) - a_set = 1; - } else if (!strncasecmp (argv[i], "MaxSubmitJobs", - MAX(command_len, 4))) { - if(!assoc) - continue; - if (get_uint(argv[i]+end, &assoc->max_submit_jobs, - "MaxSubmitJobs") == SLURM_SUCCESS) - a_set = 1; - } else if (!strncasecmp (argv[i], "MaxWallDurationPerJob", - MAX(command_len, 4))) { - if(!assoc) - continue; - mins = time_str2mins(argv[i]+end); - if (mins != NO_VAL) { - assoc->max_wall_pj = (uint32_t) mins; - a_set = 1; - } else { - exit_code=1; - fprintf(stderr, - " Bad MaxWall time format: %s\n", - argv[i]); - } - } else if (!strncasecmp (argv[i], "Organization", + } else if (!strncasecmp(argv[i], "Organization", MAX(command_len, 1))) { acct->organization = strip_quotes(argv[i]+end, NULL, 1); u_set = 1; - } else if (!strncasecmp (argv[i], "Parent", - MAX(command_len, 1))) { - if(!assoc) - continue; - assoc->parent_acct = strip_quotes(argv[i]+end, NULL, 1); - a_set = 1; - } else if (!strncasecmp (argv[i], "QosLevel", - MAX(command_len, 1))) { - if(!assoc) - continue; - if(!assoc->qos_list) - assoc->qos_list = - list_create(slurm_destroy_char); - - if(!g_qos_list) - g_qos_list = acct_storage_g_get_qos( - db_conn, my_uid, NULL); - - if(slurmdb_addto_qos_char_list(assoc->qos_list, - g_qos_list, argv[i]+end, - option)) - a_set = 1; - else { - exit_code = 1; - fprintf(stderr, - " Bad QosLevel value: %s\n", - argv[i]+end); - } - } else { + } else if(!assoc || + (assoc && !(a_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", @@ -641,8 +309,8 @@ extern int sacctmgr_add_account(int argc, char *argv[]) for (i=0; i<argc; i++) { int command_len = strlen(argv[i]); - if (!strncasecmp (argv[i], "Where", MAX(command_len, 5)) - || !strncasecmp (argv[i], "Set", MAX(command_len, 3))) + if (!strncasecmp(argv[i], "Where", MAX(command_len, 5)) + || !strncasecmp(argv[i], "Set", MAX(command_len, 3))) i++; limit_set += _set_rec(&i, argc, argv, name_list, cluster_list, start_acct, start_assoc); @@ -1029,8 +697,8 @@ extern int sacctmgr_list_account(int argc, char *argv[]) for (i=0; i<argc; i++) { int command_len = strlen(argv[i]); - if (!strncasecmp (argv[i], "Where", MAX(command_len, 5)) - || !strncasecmp (argv[i], "Set", MAX(command_len, 3))) + if (!strncasecmp(argv[i], "Where", MAX(command_len, 5)) + || !strncasecmp(argv[i], "Set", MAX(command_len, 3))) i++; prev_set = _set_cond(&i, argc, argv, acct_cond, format_list); cond_set = MAX(cond_set, prev_set); @@ -1590,11 +1258,11 @@ extern int sacctmgr_modify_account(int argc, char *argv[]) for (i=0; i<argc; i++) { int command_len = strlen(argv[i]); - if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))) { + if (!strncasecmp(argv[i], "Where", MAX(command_len, 5))) { i++; prev_set = _set_cond(&i, argc, argv, acct_cond, NULL); cond_set = MAX(cond_set, prev_set); - } else if (!strncasecmp (argv[i], "Set", MAX(command_len, 3))) { + } else if (!strncasecmp(argv[i], "Set", MAX(command_len, 3))) { i++; prev_set = _set_rec(&i, argc, argv, NULL, NULL, acct, assoc); @@ -1744,8 +1412,8 @@ extern int sacctmgr_delete_account(int argc, char *argv[]) for (i=0; i<argc; i++) { int command_len = strlen(argv[i]); - if (!strncasecmp (argv[i], "Where", MAX(command_len, 5)) - || !strncasecmp (argv[i], "Set", MAX(command_len, 3))) + if (!strncasecmp(argv[i], "Where", MAX(command_len, 5)) + || !strncasecmp(argv[i], "Set", MAX(command_len, 3))) i++; prev_set = _set_cond(&i, argc, argv, acct_cond, NULL); cond_set = MAX(cond_set, prev_set); diff --git a/src/sacctmgr/association_functions.c b/src/sacctmgr/association_functions.c index ea0d688293a82219cb376834a74bb67643aa3de8..de84259cc546fb9dcfa105f02aed838f472fcf0a 100644 --- a/src/sacctmgr/association_functions.c +++ b/src/sacctmgr/association_functions.c @@ -50,11 +50,11 @@ static int _set_cond(int *start, int argc, char *argv[], int option = 0; for (i=(*start); i<argc; i++) { end = parse_option_end(argv[i]); - if(!end) + if (!end) command_len=strlen(argv[i]); else { command_len=end-1; - if(argv[i][end] == '=') { + if (argv[i][end] == '=') { option = (int)argv[i][end-1]; end++; } @@ -83,10 +83,10 @@ static int _set_cond(int *start, int argc, char *argv[], } else if (!end && !strncasecmp (argv[i], "WOLimits", MAX(command_len, 3))) { assoc_cond->without_parent_limits = 1; - } else if(!end && !strncasecmp(argv[i], "where", + } else if (!end && !strncasecmp(argv[i], "where", MAX(command_len, 5))) { continue; - } else if(!end || !strncasecmp (argv[i], "Ids", + } else if (!end || !strncasecmp (argv[i], "Ids", MAX(command_len, 1)) || !strncasecmp (argv[i], "Associations", MAX(command_len, 2))) { @@ -94,7 +94,7 @@ static int _set_cond(int *start, int argc, char *argv[], char *temp = NULL; uint32_t id = 0; - if(!assoc_cond->id_list) + if (!assoc_cond->id_list) assoc_cond->id_list = list_create(slurm_destroy_char); slurm_addto_char_list(assoc_cond->id_list, @@ -110,212 +110,325 @@ static int _set_cond(int *start, int argc, char *argv[], } list_iterator_destroy(itr); set = 1; - } else if (!strncasecmp (argv[i], "Accounts", - MAX(command_len, 2)) - || !strncasecmp (argv[i], "Acct", - MAX(command_len, 4))) { - if(!assoc_cond->acct_list) - assoc_cond->acct_list = - list_create(slurm_destroy_char); - slurm_addto_char_list(assoc_cond->acct_list, - argv[i]+end); - set = 1; - } else if (!strncasecmp (argv[i], "Clusters", - MAX(command_len, 1))) { - if(!assoc_cond->cluster_list) - assoc_cond->cluster_list = - list_create(slurm_destroy_char); - slurm_addto_char_list(assoc_cond->cluster_list, - argv[i]+end); - set = 1; - } else if (!strncasecmp (argv[i], "DefaultQOS", - MAX(command_len, 8))) { - if(!assoc_cond->def_qos_id_list) { - assoc_cond->def_qos_id_list = - list_create(slurm_destroy_char); - } - if(!g_qos_list) { - g_qos_list = acct_storage_g_get_qos( - db_conn, my_uid, NULL); - } - - if(slurmdb_addto_qos_char_list( - assoc_cond->def_qos_id_list, - g_qos_list, - argv[i]+end, 0)) - set = 1; - else - exit_code = 1; } else if (!strncasecmp (argv[i], "Format", MAX(command_len, 1))) { - if(format_list) + if (format_list) slurm_addto_char_list(format_list, argv[i]+end); - } else if (!strncasecmp (argv[i], "FairShare", - MAX(command_len, 1)) - || !strncasecmp (argv[i], "Shares", - MAX(command_len, 1))) { - if(!assoc_cond->fairshare_list) - assoc_cond->fairshare_list = - list_create(slurm_destroy_char); - if(slurm_addto_char_list(assoc_cond->fairshare_list, - argv[i]+end)) - set = 1; - } else if (!strncasecmp (argv[i], "GrpCPUMins", - MAX(command_len, 7))) { - if(!assoc_cond->grp_cpu_mins_list) - assoc_cond->grp_cpu_mins_list = - list_create(slurm_destroy_char); - if(slurm_addto_char_list(assoc_cond->grp_cpu_mins_list, - argv[i]+end)) - set = 1; - } else if (!strncasecmp (argv[i], "GrpCpus", - MAX(command_len, 7))) { - if(!assoc_cond->grp_cpus_list) - assoc_cond->grp_cpus_list = - list_create(slurm_destroy_char); - if(slurm_addto_char_list(assoc_cond->grp_cpus_list, - argv[i]+end)) - set = 1; - } else if (!strncasecmp (argv[i], "GrpJobs", - MAX(command_len, 4))) { - if(!assoc_cond->grp_jobs_list) - assoc_cond->grp_jobs_list = - list_create(slurm_destroy_char); - if(slurm_addto_char_list(assoc_cond->grp_jobs_list, - argv[i]+end)) - set = 1; - } else if (!strncasecmp (argv[i], "GrpNodes", - MAX(command_len, 4))) { - if(!assoc_cond->grp_nodes_list) - assoc_cond->grp_nodes_list = - list_create(slurm_destroy_char); - if(slurm_addto_char_list(assoc_cond->grp_nodes_list, - argv[i]+end)) - set = 1; - } else if (!strncasecmp (argv[i], "GrpSubmitJobs", - MAX(command_len, 4))) { - if(!assoc_cond->grp_submit_jobs_list) - assoc_cond->grp_submit_jobs_list = - list_create(slurm_destroy_char); - if(slurm_addto_char_list( - assoc_cond->grp_submit_jobs_list, - argv[i]+end)) - set = 1; - } else if (!strncasecmp (argv[i], "GrpWall", - MAX(command_len, 4))) { - if(!assoc_cond->grp_wall_list) - assoc_cond->grp_wall_list = - list_create(slurm_destroy_char); - if(slurm_addto_char_list( - assoc_cond->grp_wall_list, - argv[i]+end)) - set = 1; - } else if (!strncasecmp (argv[i], "MaxCPUMinsPerJob", - MAX(command_len, 7))) { - if(!assoc_cond->max_cpu_mins_pj_list) - assoc_cond->max_cpu_mins_pj_list = - list_create(slurm_destroy_char); - if(slurm_addto_char_list( - assoc_cond->max_cpu_mins_pj_list, - argv[i]+end)) - set = 1; - } else if (!strncasecmp (argv[i], "MaxCPUsPerJob", - MAX(command_len, 7))) { - if(!assoc_cond->max_cpus_pj_list) - assoc_cond->max_cpus_pj_list = - list_create(slurm_destroy_char); - if(slurm_addto_char_list( - assoc_cond->max_cpus_pj_list, - argv[i]+end)) - set = 1; - } else if (!strncasecmp (argv[i], "MaxJobs", - MAX(command_len, 4))) { - if(!assoc_cond->max_jobs_list) - assoc_cond->max_jobs_list = - list_create(slurm_destroy_char); - if(slurm_addto_char_list( - assoc_cond->max_jobs_list, - argv[i]+end)) - set = 1; - } else if (!strncasecmp (argv[i], "MaxNodesPerJob", - MAX(command_len, 4))) { - if(!assoc_cond->max_nodes_pj_list) - assoc_cond->max_nodes_pj_list = - list_create(slurm_destroy_char); - if(slurm_addto_char_list( - assoc_cond->max_nodes_pj_list, - argv[i]+end)) - set = 1; - } else if (!strncasecmp (argv[i], "MaxSubmitJobs", - MAX(command_len, 4))) { - if(!assoc_cond->max_submit_jobs_list) - assoc_cond->max_submit_jobs_list = - list_create(slurm_destroy_char); - if(slurm_addto_char_list( - assoc_cond->max_submit_jobs_list, - argv[i]+end)) - set = 1; - } else if (!strncasecmp (argv[i], "MaxWallDurationPerJob", - MAX(command_len, 4))) { - if(!assoc_cond->max_wall_pj_list) - assoc_cond->max_wall_pj_list = - list_create(slurm_destroy_char); - if(slurm_addto_char_list( - assoc_cond->max_wall_pj_list, - argv[i]+end)) - set = 1; - } else if (!strncasecmp (argv[i], "Partitions", - MAX(command_len, 4))) { - if(!assoc_cond->partition_list) - assoc_cond->partition_list = - list_create(slurm_destroy_char); - slurm_addto_char_list(assoc_cond->partition_list, - argv[i]+end); + } else if(!(set = sacctmgr_set_association_cond( + assoc_cond, argv[i], argv[i]+end, + command_len)) || exit_code) { + exit_code = 1; + fprintf(stderr, " Unknown condition: %s\n", argv[i]); + } + } + + (*start) = i; + + return set; +} + +extern int sacctmgr_set_association_cond(slurmdb_association_cond_t *assoc_cond, + char *type, char *value, + int command_len) +{ + int set =0; + + xassert(assoc_cond); + xassert(type); + + if (!strncasecmp (type, "Account", MAX(command_len, 2)) + || !strncasecmp (type, "Acct", MAX(command_len, 4))) { + if (!assoc_cond->acct_list) + assoc_cond->acct_list = list_create(slurm_destroy_char); + if (slurm_addto_char_list(assoc_cond->acct_list, value)) set = 1; - } else if (!strncasecmp (argv[i], "Parent", - MAX(command_len, 4))) { - if(!assoc_cond->parent_acct_list) { - assoc_cond->parent_acct_list = - list_create(slurm_destroy_char); + } else if (!strncasecmp(type, "Ids", MAX(command_len, 1)) + || !strncasecmp(type, "Associations", MAX(command_len, 2))) { + ListIterator itr = NULL; + char *temp = NULL; + uint32_t id = 0; + + if (!assoc_cond->id_list) + assoc_cond->id_list =list_create(slurm_destroy_char); + slurm_addto_char_list(assoc_cond->id_list, value); + /* check to make sure user gave ints here */ + itr = list_iterator_create(assoc_cond->id_list); + while ((temp = list_next(itr))) { + if (get_uint(temp, &id, "AssocId") != SLURM_SUCCESS) { + exit_code = 1; + list_delete_item(itr); } - if(slurm_addto_char_list(assoc_cond->parent_acct_list, - argv[i]+end)) + } + list_iterator_destroy(itr); + set = 1; + } else if (!strncasecmp (type, "Clusters", MAX(command_len, 1))) { + if (!assoc_cond->cluster_list) + assoc_cond->cluster_list = + list_create(slurm_destroy_char); + if (slurm_addto_char_list(assoc_cond->cluster_list, value)) set = 1; - } else if (!strncasecmp (argv[i], "QosLevel", - MAX(command_len, 1))) { - if(!assoc_cond->qos_list) { - assoc_cond->qos_list = - list_create(slurm_destroy_char); - } + } else if (!strncasecmp (type, "DefaultQOS", MAX(command_len, 8))) { + if (!assoc_cond->def_qos_id_list) + assoc_cond->def_qos_id_list = + list_create(slurm_destroy_char); + + if (!g_qos_list) + g_qos_list = acct_storage_g_get_qos( + db_conn, my_uid, NULL); + + if (slurmdb_addto_qos_char_list(assoc_cond->def_qos_id_list, + g_qos_list, + value, 0)) + set = 1; + else + exit_code = 1; + } else if (!strncasecmp (type, "FairShare", MAX(command_len, 1)) + || !strncasecmp (type, "Shares", MAX(command_len, 1))) { + if (!assoc_cond->fairshare_list) + assoc_cond->fairshare_list = + list_create(slurm_destroy_char); + if (slurm_addto_char_list(assoc_cond->fairshare_list, value)) + set = 1; + } else if (!strncasecmp (type, "GrpCPUMins", MAX(command_len, 7))) { + if (!assoc_cond->grp_cpu_mins_list) + assoc_cond->grp_cpu_mins_list = + list_create(slurm_destroy_char); + if (slurm_addto_char_list(assoc_cond->grp_cpu_mins_list, value)) + set = 1; + } else if (!strncasecmp (type, "GrpCPURunMins", MAX(command_len, 7))) { + if (!assoc_cond->grp_cpu_run_mins_list) + assoc_cond->grp_cpu_run_mins_list = + list_create(slurm_destroy_char); + if (slurm_addto_char_list(assoc_cond->grp_cpu_run_mins_list, + value)) + set = 1; + } else if (!strncasecmp (type, "GrpCpus", MAX(command_len, 7))) { + if (!assoc_cond->grp_cpus_list) + assoc_cond->grp_cpus_list = + list_create(slurm_destroy_char); + if (slurm_addto_char_list(assoc_cond->grp_cpus_list, + value)) + set = 1; + } else if (!strncasecmp (type, "GrpJobs", MAX(command_len, 4))) { + if (!assoc_cond->grp_jobs_list) + assoc_cond->grp_jobs_list = + list_create(slurm_destroy_char); + if (slurm_addto_char_list(assoc_cond->grp_jobs_list, + value)) + set = 1; + } else if (!strncasecmp (type, "GrpNodes", MAX(command_len, 4))) { + if (!assoc_cond->grp_nodes_list) + assoc_cond->grp_nodes_list = + list_create(slurm_destroy_char); + if (slurm_addto_char_list(assoc_cond->grp_nodes_list, + value)) + set = 1; + } else if (!strncasecmp (type, "GrpSubmitJobs", MAX(command_len, 4))) { + if (!assoc_cond->grp_submit_jobs_list) + assoc_cond->grp_submit_jobs_list = + list_create(slurm_destroy_char); + if (slurm_addto_char_list(assoc_cond->grp_submit_jobs_list, + value)) + set = 1; + } else if (!strncasecmp (type, "GrpWall", MAX(command_len, 4))) { + if (!assoc_cond->grp_wall_list) + assoc_cond->grp_wall_list = + list_create(slurm_destroy_char); + if (slurm_addto_char_list(assoc_cond->grp_wall_list, value)) + set = 1; + } else if (!strncasecmp (type, "MaxCPUMinsPerJob", + MAX(command_len, 7))) { + if (!assoc_cond->max_cpu_mins_pj_list) + assoc_cond->max_cpu_mins_pj_list = + list_create(slurm_destroy_char); + if (slurm_addto_char_list(assoc_cond->max_cpu_mins_pj_list, + value)) + set = 1; + } else if (!strncasecmp (type, "MaxCPURunMins", MAX(command_len, 7))) { + if (!assoc_cond->max_cpu_run_mins_list) + assoc_cond->max_cpu_run_mins_list = + list_create(slurm_destroy_char); + if (slurm_addto_char_list(assoc_cond->max_cpu_run_mins_list, + value)) + set = 1; + } else if (!strncasecmp (type, "MaxCpusPerJob", MAX(command_len, 7))) { + if (!assoc_cond->max_cpus_pj_list) + assoc_cond->max_cpus_pj_list = + list_create(slurm_destroy_char); + if (slurm_addto_char_list(assoc_cond->max_cpus_pj_list, value)) + set = 1; + } else if (!strncasecmp (type, "MaxJobs", MAX(command_len, 4))) { + if (!assoc_cond->max_jobs_list) + assoc_cond->max_jobs_list = + list_create(slurm_destroy_char); + if (slurm_addto_char_list(assoc_cond->max_jobs_list, value)) + set = 1; + } else if (!strncasecmp (type, "MaxNodesPerJob", MAX(command_len, 4))) { + if (!assoc_cond->max_nodes_pj_list) + assoc_cond->max_nodes_pj_list = + list_create(slurm_destroy_char); + if (slurm_addto_char_list(assoc_cond->max_nodes_pj_list, value)) + set = 1; + } else if (!strncasecmp (type, "MaxSubmitJobs", MAX(command_len, 4))) { + if (!assoc_cond->max_submit_jobs_list) + assoc_cond->max_submit_jobs_list = + list_create(slurm_destroy_char); + if (slurm_addto_char_list(assoc_cond->max_submit_jobs_list, + value)) + set = 1; + } else if (!strncasecmp (type, "MaxWallDurationPerJob", + MAX(command_len, 4))) { + if (!assoc_cond->max_wall_pj_list) + assoc_cond->max_wall_pj_list = + list_create(slurm_destroy_char); + if (slurm_addto_char_list(assoc_cond->max_wall_pj_list, value)) + set = 1; + } else if (!strncasecmp (type, "Partition", MAX(command_len, 3))) { + if (!assoc_cond->partition_list) + assoc_cond->partition_list = + list_create(slurm_destroy_char); + if (slurm_addto_char_list(assoc_cond->partition_list, value)) + set = 1; + } else if (!strncasecmp(type, "Parent", MAX(command_len, 4))) { + if (!assoc_cond->parent_acct_list) + assoc_cond->parent_acct_list = + list_create(slurm_destroy_char); + if (slurm_addto_char_list(assoc_cond->parent_acct_list, value)) + set = 1; + } else if (!strncasecmp (type, "Users", MAX(command_len, 1))) { + if (!assoc_cond->user_list) + assoc_cond->user_list = list_create(slurm_destroy_char); + if (slurm_addto_char_list(assoc_cond->user_list, value)) + set = 1; + } - if(!g_qos_list) { - g_qos_list = acct_storage_g_get_qos( - db_conn, my_uid, NULL); - } + return set; +} - if(slurmdb_addto_qos_char_list(assoc_cond->qos_list, - g_qos_list, - argv[i]+end, option)) - set = 1; - else - exit_code = 1; - } else if (!strncasecmp (argv[i], "Users", - MAX(command_len, 1))) { - if(!assoc_cond->user_list) - assoc_cond->user_list = - list_create(slurm_destroy_char); - slurm_addto_char_list(assoc_cond->user_list, - argv[i]+end); +extern int sacctmgr_set_association_rec(slurmdb_association_rec_t *assoc, + char *type, char *value, + int command_len, int option) +{ + int set = 0; + uint32_t mins = NO_VAL; + + if (!assoc) + return set; + + if (!strncasecmp (type, "DefaultQOS", MAX(command_len, 8))) { + if(!g_qos_list) + g_qos_list = acct_storage_g_get_qos( + db_conn, my_uid, NULL); + + if(atoi(value) == -1) + assoc->def_qos_id = -1; + else + assoc->def_qos_id = str_2_slurmdb_qos( + g_qos_list, value); + + if(assoc->def_qos_id == NO_VAL) { + fprintf(stderr, + "You gave a bad qos '%s'. " + "Use 'list qos' to get " + "complete list.\n", + value); + exit_code = 1; + } + set = 1; + } else if (!strncasecmp(type, "FairShare", MAX(command_len, 1)) + || !strncasecmp(type, "Shares", MAX(command_len, 1))) { + if (get_uint(value, &assoc->shares_raw, + "FairShare") == SLURM_SUCCESS) + set = 1; + } else if (!strncasecmp(type, "GrpCPUMins", MAX(command_len, 7))) { + if (get_uint64(value, &assoc->grp_cpu_mins, + "GrpCPUMins") == SLURM_SUCCESS) + set = 1; + } else if (!strncasecmp(type, "GrpCPURunMins", MAX(command_len, 7))) { + if (get_uint64(value, &assoc->grp_cpu_run_mins, + "GrpCPURunMins") == SLURM_SUCCESS) + set = 1; + } else if (!strncasecmp(type, "GrpCpus", MAX(command_len, 7))) { + if (get_uint(value, &assoc->grp_cpus, + "GrpCpus") == SLURM_SUCCESS) + set = 1; + } else if (!strncasecmp(type, "GrpJobs", MAX(command_len, 4))) { + if (get_uint(value, &assoc->grp_jobs, + "GrpJobs") == SLURM_SUCCESS) + set = 1; + } else if (!strncasecmp(type, "GrpNodes", MAX(command_len, 4))) { + if (get_uint(value, &assoc->grp_nodes, + "GrpNodes") == SLURM_SUCCESS) + set = 1; + } else if (!strncasecmp(type, "GrpSubmitJobs", + MAX(command_len, 4))) { + if (get_uint(value, &assoc->grp_submit_jobs, + "GrpSubmitJobs") == SLURM_SUCCESS) + set = 1; + } else if (!strncasecmp(type, "GrpWall", MAX(command_len, 4))) { + mins = time_str2mins(value); + if (mins != NO_VAL) { + assoc->grp_wall = mins; set = 1; } else { - exit_code = 1; - fprintf(stderr, " Unknown condition: %s\n", argv[i]); + exit_code=1; + fprintf(stderr, " Bad GrpWall time format: %s\n", type); } + } else if (!strncasecmp(type, "MaxCPUMinsPerJob", + MAX(command_len, 7))) { + if (get_uint64(value, &assoc->max_cpu_mins_pj, + "MaxCPUMins") == SLURM_SUCCESS) + set = 1; + } else if (!strncasecmp(type, "MaxCPURunMins", MAX(command_len, 7))) { + if (get_uint64(value, &assoc->max_cpu_run_mins, + "MaxCPURunMins") == SLURM_SUCCESS) + set = 1; + } else if (!strncasecmp(type, "MaxCpusPerJob", MAX(command_len, 7))) { + if (get_uint(value, &assoc->max_cpus_pj, + "MaxCpus") == SLURM_SUCCESS) + set = 1; + } else if (!strncasecmp(type, "MaxJobs", MAX(command_len, 4))) { + if (get_uint(value, &assoc->max_jobs, + "MaxJobs") == SLURM_SUCCESS) + set = 1; + } else if (!strncasecmp(type, "MaxNodesPerJob", MAX(command_len, 4))) { + if (get_uint(value, &assoc->max_nodes_pj, + "MaxNodes") == SLURM_SUCCESS) + set = 1; + } else if (!strncasecmp(type, "MaxSubmitJobs", MAX(command_len, 4))) { + if (get_uint(value, &assoc->max_submit_jobs, + "MaxSubmitJobs") == SLURM_SUCCESS) + set = 1; + } else if (!strncasecmp(type, "MaxWallDurationPerJob", + MAX(command_len, 4))) { + mins = time_str2mins(value); + if (mins != NO_VAL) { + assoc->max_wall_pj = mins; + set = 1; + } else { + exit_code=1; + fprintf(stderr, + " Bad MaxWall time format: %s\n", + type); + } + } else if (!strncasecmp(type, "Parent", MAX(command_len, 1))) { + assoc->parent_acct = strip_quotes(value, NULL, 1); + set = 1; + } else if (!strncasecmp(type, "QosLevel", MAX(command_len, 1))) { + if (!assoc->qos_list) + assoc->qos_list = list_create(slurm_destroy_char); + + if (!g_qos_list) + g_qos_list = acct_storage_g_get_qos( + db_conn, my_uid, NULL); + + if (slurmdb_addto_qos_char_list(assoc->qos_list, + g_qos_list, value, + option)) + set = 1; } - (*start) = i; - return set; } @@ -372,19 +485,19 @@ extern int sacctmgr_list_association(int argc, char *argv[]) for (i=0; i<argc; i++) { int command_len = strlen(argv[i]); - if (!strncasecmp (argv[i], "Where", MAX(command_len, 5)) - || !strncasecmp (argv[i], "Set", MAX(command_len, 3))) + if (!strncasecmp(argv[i], "Where", MAX(command_len, 5)) + || !strncasecmp(argv[i], "Set", MAX(command_len, 3))) i++; _set_cond(&i, argc, argv, assoc_cond, format_list); } - if(exit_code) { + if (exit_code) { slurmdb_destroy_association_cond(assoc_cond); list_destroy(format_list); return SLURM_ERROR; - } else if(!list_count(format_list)) { + } else if (!list_count(format_list)) { slurm_addto_char_list(format_list, "C,A,U,Part"); - if(!assoc_cond->without_parent_limits) + if (!assoc_cond->without_parent_limits) slurm_addto_char_list(format_list, "Shares,GrpJ,GrpN,GrpCPUs," "GrpS,GrpWall,GrpCPUMins,MaxJ," @@ -398,7 +511,7 @@ extern int sacctmgr_list_association(int argc, char *argv[]) int command_len = 0; int newlen = 0; - if((tmp_char = strstr(object, "\%"))) { + if ((tmp_char = strstr(object, "\%"))) { newlen = atoi(tmp_char+1); tmp_char[0] = '\0'; } @@ -407,157 +520,157 @@ extern int sacctmgr_list_association(int argc, char *argv[]) field = xmalloc(sizeof(print_field_t)); - if(!strncasecmp("Account", object, MAX(command_len, 1)) + if (!strncasecmp("Account", object, MAX(command_len, 1)) || !strncasecmp("Acct", object, MAX(command_len, 4))) { field->type = PRINT_ACCOUNT; field->name = xstrdup("Account"); - if(tree_display) + if (tree_display) field->len = -20; else field->len = 10; field->print_routine = print_fields_str; - } else if(!strncasecmp("Cluster", object, + } else if (!strncasecmp("Cluster", object, MAX(command_len, 1))) { field->type = PRINT_CLUSTER; field->name = xstrdup("Cluster"); field->len = 10; field->print_routine = print_fields_str; - } else if(!strncasecmp("DefaultQOS", object, + } else if (!strncasecmp("DefaultQOS", object, MAX(command_len, 1))) { field->type = PRINT_DQOS; field->name = xstrdup("Def QOS"); field->len = 9; field->print_routine = print_fields_str; - } else if(!strncasecmp("FairShare", object, + } else if (!strncasecmp("FairShare", object, MAX(command_len, 1))) { field->type = PRINT_FAIRSHARE; field->name = xstrdup("FairShare"); field->len = 9; field->print_routine = print_fields_uint; - } else if(!strncasecmp("GrpCPUMins", object, + } else if (!strncasecmp("GrpCPUMins", object, MAX(command_len, 8))) { field->type = PRINT_GRPCM; field->name = xstrdup("GrpCPUMins"); field->len = 11; field->print_routine = print_fields_uint64; - } else if(!strncasecmp("GrpCPUs", object, + } else if (!strncasecmp("GrpCPUs", object, MAX(command_len, 8))) { field->type = PRINT_GRPC; field->name = xstrdup("GrpCPUs"); field->len = 8; field->print_routine = print_fields_uint; - } else if(!strncasecmp("GrpJobs", object, + } else if (!strncasecmp("GrpJobs", object, MAX(command_len, 4))) { field->type = PRINT_GRPJ; field->name = xstrdup("GrpJobs"); field->len = 7; field->print_routine = print_fields_uint; - } else if(!strncasecmp("GrpNodes", object, + } else if (!strncasecmp("GrpNodes", object, MAX(command_len, 4))) { field->type = PRINT_GRPN; field->name = xstrdup("GrpNodes"); field->len = 8; field->print_routine = print_fields_uint; - } else if(!strncasecmp("GrpSubmitJobs", object, + } else if (!strncasecmp("GrpSubmitJobs", object, MAX(command_len, 4))) { field->type = PRINT_GRPS; field->name = xstrdup("GrpSubmit"); field->len = 9; field->print_routine = print_fields_uint; - } else if(!strncasecmp("GrpWall", object, + } else if (!strncasecmp("GrpWall", object, MAX(command_len, 4))) { field->type = PRINT_GRPW; field->name = xstrdup("GrpWall"); field->len = 11; field->print_routine = print_fields_time; - } else if(!strncasecmp("ID", object, MAX(command_len, 1))) { + } else if (!strncasecmp("ID", object, MAX(command_len, 1))) { field->type = PRINT_ID; field->name = xstrdup("ID"); field->len = 6; field->print_routine = print_fields_uint; - } else if(!strncasecmp("LFT", object, MAX(command_len, 1))) { + } else if (!strncasecmp("LFT", object, MAX(command_len, 1))) { field->type = PRINT_LFT; field->name = xstrdup("LFT"); field->len = 6; field->print_routine = print_fields_uint; - } else if(!strncasecmp("MaxCPUMinsPerJob", object, + } else if (!strncasecmp("MaxCPUMinsPerJob", object, MAX(command_len, 7))) { field->type = PRINT_MAXCM; field->name = xstrdup("MaxCPUMins"); field->len = 11; field->print_routine = print_fields_uint64; - } else if(!strncasecmp("MaxCPUsPerJob", object, + } else if (!strncasecmp("MaxCPUsPerJob", object, MAX(command_len, 7))) { field->type = PRINT_MAXC; field->name = xstrdup("MaxCPUs"); field->len = 8; field->print_routine = print_fields_uint; - } else if(!strncasecmp("MaxJobs", object, + } else if (!strncasecmp("MaxJobs", object, MAX(command_len, 4))) { field->type = PRINT_MAXJ; field->name = xstrdup("MaxJobs"); field->len = 7; field->print_routine = print_fields_uint; - } else if(!strncasecmp("MaxNodesPerJob", object, + } else if (!strncasecmp("MaxNodesPerJob", object, MAX(command_len, 4))) { field->type = PRINT_MAXN; field->name = xstrdup("MaxNodes"); field->len = 8; field->print_routine = print_fields_uint; - } else if(!strncasecmp("MaxSubmitJobs", object, + } else if (!strncasecmp("MaxSubmitJobs", object, MAX(command_len, 4))) { field->type = PRINT_MAXS; field->name = xstrdup("MaxSubmit"); field->len = 9; field->print_routine = print_fields_uint; - } else if(!strncasecmp("MaxWallDurationPerJob", object, + } else if (!strncasecmp("MaxWallDurationPerJob", object, MAX(command_len, 4))) { field->type = PRINT_MAXW; field->name = xstrdup("MaxWall"); field->len = 11; field->print_routine = print_fields_time; - } else if(!strncasecmp("QOSRAWLevel", object, + } else if (!strncasecmp("QOSRAWLevel", object, MAX(command_len, 4))) { field->type = PRINT_QOS_RAW; field->name = xstrdup("QOS_RAW"); field->len = 10; field->print_routine = print_fields_char_list; - } else if(!strncasecmp("QOSLevel", object, + } else if (!strncasecmp("QOSLevel", object, MAX(command_len, 1))) { field->type = PRINT_QOS; field->name = xstrdup("QOS"); field->len = 20; field->print_routine = sacctmgr_print_qos_list; - } else if(!strncasecmp("ParentID", object, + } else if (!strncasecmp("ParentID", object, MAX(command_len, 7))) { field->type = PRINT_PID; field->name = xstrdup("Par ID"); field->len = 6; field->print_routine = print_fields_uint; - } else if(!strncasecmp("ParentName", object, + } else if (!strncasecmp("ParentName", object, MAX(command_len, 7))) { field->type = PRINT_PNAME; field->name = xstrdup("Par Name"); field->len = 10; field->print_routine = print_fields_str; - } else if(!strncasecmp("Partition", object, + } else if (!strncasecmp("Partition", object, MAX(command_len, 4))) { field->type = PRINT_PART; field->name = xstrdup("Partition"); field->len = 10; field->print_routine = print_fields_str; - } else if(!strncasecmp("RGT", object, MAX(command_len, 1))) { + } else if (!strncasecmp("RGT", object, MAX(command_len, 1))) { field->type = PRINT_RGT; field->name = xstrdup("RGT"); field->len = 6; field->print_routine = print_fields_uint; - } else if(!strncasecmp("Shares", object, + } else if (!strncasecmp("Shares", object, MAX(command_len, 1))) { field->type = PRINT_FAIRSHARE; field->name = xstrdup("Shares"); field->len = 9; field->print_routine = print_fields_uint; - } else if(!strncasecmp("User", object, MAX(command_len, 1))) { + } else if (!strncasecmp("User", object, MAX(command_len, 1))) { field->type = PRINT_USER; field->name = xstrdup("User"); field->len = 10; @@ -570,7 +683,7 @@ extern int sacctmgr_list_association(int argc, char *argv[]) continue; } - if(newlen) + if (newlen) field->len = newlen; list_append(print_fields_list, field); @@ -578,7 +691,7 @@ extern int sacctmgr_list_association(int argc, char *argv[]) list_iterator_destroy(itr); list_destroy(format_list); - if(exit_code) { + if (exit_code) { slurmdb_destroy_association_cond(assoc_cond); list_destroy(print_fields_list); return SLURM_ERROR; @@ -588,7 +701,7 @@ extern int sacctmgr_list_association(int argc, char *argv[]) assoc_cond); slurmdb_destroy_association_cond(assoc_cond); - if(!assoc_list) { + if (!assoc_list) { exit_code=1; fprintf(stderr, " Error with request: %s\n", slurm_strerror(errno)); @@ -606,8 +719,8 @@ extern int sacctmgr_list_association(int argc, char *argv[]) while((assoc = list_next(itr))) { int curr_inx = 1; - if(!last_cluster || strcmp(last_cluster, assoc->cluster)) { - if(tree_list) { + if (!last_cluster || strcmp(last_cluster, assoc->cluster)) { + if (tree_list) { list_flush(tree_list); } else { tree_list = @@ -618,10 +731,10 @@ extern int sacctmgr_list_association(int argc, char *argv[]) while((field = list_next(itr2))) { switch(field->type) { case PRINT_ACCOUNT: - if(tree_display) { + if (tree_display) { char *local_acct = NULL; char *parent_acct = NULL; - if(assoc->user) { + if (assoc->user) { local_acct = xstrdup_printf( "|%s", assoc->acct); parent_acct = assoc->acct; @@ -650,7 +763,7 @@ extern int sacctmgr_list_association(int argc, char *argv[]) (curr_inx == field_count)); break; case PRINT_DQOS: - if(!g_qos_list) + if (!g_qos_list) g_qos_list = acct_storage_g_get_qos( db_conn, my_uid, NULL); tmp_char = slurmdb_qos_str(g_qos_list, @@ -756,7 +869,7 @@ extern int sacctmgr_list_association(int argc, char *argv[]) (curr_inx == field_count)); break; case PRINT_QOS: - if(!g_qos_list) + if (!g_qos_list) g_qos_list = acct_storage_g_get_qos( db_conn, my_uid, NULL); @@ -792,7 +905,7 @@ extern int sacctmgr_list_association(int argc, char *argv[]) printf("\n"); } - if(tree_list) + if (tree_list) list_destroy(tree_list); list_iterator_destroy(itr2); diff --git a/src/sacctmgr/cluster_functions.c b/src/sacctmgr/cluster_functions.c index c2228459d3bd83ee9eed927480be16262b1ee950..01521092f31fe1b3c1a82a5211d86d07385959e8 100644 --- a/src/sacctmgr/cluster_functions.c +++ b/src/sacctmgr/cluster_functions.c @@ -70,22 +70,22 @@ static int _set_cond(int *start, int argc, char *argv[], } } - if (!strncasecmp (argv[i], "Set", MAX(command_len, 3))) { + 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", + !strncasecmp(argv[i], "WithDeleted", MAX(command_len, 5))) { with_deleted = 1; - } else if (!end && !strncasecmp (argv[i], "WOLimits", + } else if (!end && !strncasecmp(argv[i], "WOLimits", MAX(command_len, 3))) { without_limits = 1; - } else if(!end || !strncasecmp (argv[i], "Names", + } else if(!end || !strncasecmp(argv[i], "Names", MAX(command_len, 1)) - || !strncasecmp (argv[i], "Clusters", + || !strncasecmp(argv[i], "Clusters", MAX(command_len, 3))) { if(!cluster_cond->cluster_list) cluster_cond->cluster_list = @@ -93,22 +93,22 @@ static int _set_cond(int *start, int argc, char *argv[], if(slurm_addto_char_list(cluster_cond->cluster_list, argv[i]+end)) a_set = 1; - } else if (!strncasecmp (argv[i], "Classification", + } 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", + } 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", + } 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", + } else if(!end || !strncasecmp(argv[i], "PluginIDSelect", MAX(command_len, 1))) { if(!cluster_cond->plugin_id_select_list) cluster_cond->plugin_id_select_list = @@ -117,7 +117,7 @@ static int _set_cond(int *start, int argc, char *argv[], cluster_cond->plugin_id_select_list, argv[i]+end)) c_set = 1; - } else if(!end || !strncasecmp (argv[i], "RPCVersions", + } else if(!end || !strncasecmp(argv[i], "RPCVersions", MAX(command_len, 1))) { if(!cluster_cond->rpc_version_list) cluster_cond->rpc_version_list = @@ -128,7 +128,8 @@ static int _set_cond(int *start, int argc, char *argv[], } else { exit_code=1; fprintf(stderr, " Unknown condition: %s\n" - "Use keyword set to modify value\n", argv[i]); + " Use keyword 'set' to modify value\n", + argv[i]); break; } } @@ -148,7 +149,7 @@ static int _set_rec(int *start, int argc, char *argv[], slurmdb_association_rec_t *assoc, uint16_t *classification) { - int i, mins; + int i; int set = 0; int end = 0; int command_len = 0; @@ -166,21 +167,21 @@ static int _set_rec(int *start, int argc, char *argv[], } } - if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))) { + 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", + || !strncasecmp(argv[i], "Names", MAX(command_len, 1)) - || !strncasecmp (argv[i], "Clusters", + || !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", + } else if (!strncasecmp(argv[i], "Classification", MAX(command_len, 3))) { if(classification) { *classification = @@ -188,126 +189,21 @@ static int _set_rec(int *start, int argc, char *argv[], if(*classification) set = 1; } - } else if (!strncasecmp (argv[i], "DefaultQOS", - MAX(command_len, 8))) { - if(!assoc) - continue; - - if(!g_qos_list) { - g_qos_list = acct_storage_g_get_qos( - db_conn, my_uid, NULL); - } - - if(atoi(argv[i]+end) == -1) - assoc->def_qos_id = -1; - else - assoc->def_qos_id = str_2_slurmdb_qos( - g_qos_list, argv[i]+end); - - if(assoc->def_qos_id == NO_VAL) { - fprintf(stderr, - "You gave a bad qos '%s'. " - "Use 'list qos' to get " - "complete list.\n", - argv[i]+end); - exit_code = 1; - break; - } - set = 1; - } else if (!strncasecmp (argv[i], "FairShare", - MAX(command_len, 1)) - || !strncasecmp (argv[i], "Shares", - MAX(command_len, 1))) { - if (get_uint(argv[i]+end, &assoc->shares_raw, - "FairShare") == SLURM_SUCCESS) - set = 1; - } else if (!strncasecmp (argv[i], "GrpCPUMins", + } 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], "GrpCpus", - MAX(command_len, 7))) { - if (get_uint(argv[i]+end, &assoc->grp_cpus, - "GrpCpus") == SLURM_SUCCESS) - set = 1; - } else if (!strncasecmp (argv[i], "GrpJobs", - MAX(command_len, 4))) { - if (get_uint(argv[i]+end, &assoc->grp_jobs, - "GrpJobs") == SLURM_SUCCESS) - set = 1; - } else if (!strncasecmp (argv[i], "GrpNodes", - MAX(command_len, 4))) { - if (get_uint(argv[i]+end, &assoc->grp_nodes, - "GrpNodes") == SLURM_SUCCESS) - set = 1; - } else if (!strncasecmp (argv[i], "GrpSubmitJobs", - MAX(command_len, 4))) { - if (get_uint(argv[i]+end, &assoc->grp_submit_jobs, - "GrpSubmitJobs") == SLURM_SUCCESS) - set = 1; - } else if (!strncasecmp (argv[i], "GrpWall", + } 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 (!strncasecmp (argv[i], "MaxCPUMinsPerJob", - MAX(command_len, 7))) { - if (get_uint64(argv[i]+end, - &assoc->max_cpu_mins_pj, - "MaxCPUMins") == SLURM_SUCCESS) - set = 1; - } else if (!strncasecmp (argv[i], "MaxCpusPerJob", - MAX(command_len, 7))) { - if (get_uint(argv[i]+end, &assoc->max_cpus_pj, - "MaxCpus") == SLURM_SUCCESS) - set = 1; - } else if (!strncasecmp (argv[i], "MaxJobs", - MAX(command_len, 4))) { - if (get_uint(argv[i]+end, &assoc->max_jobs, - "MaxJobs") == SLURM_SUCCESS) - set = 1; - } else if (!strncasecmp (argv[i], "MaxNodesPerJob", - MAX(command_len, 4))) { - if (get_uint(argv[i]+end, - &assoc->max_nodes_pj, - "MaxNodes") == SLURM_SUCCESS) - set = 1; - } else if (!strncasecmp (argv[i], "MaxSubmitJobs", - MAX(command_len, 4))) { - if (get_uint(argv[i]+end, &assoc->max_submit_jobs, - "MaxSubmitJobs") == SLURM_SUCCESS) - set = 1; - } else if (!strncasecmp (argv[i], "MaxWallDurationPerJob", - MAX(command_len, 4))) { - mins = time_str2mins(argv[i]+end); - if (mins != NO_VAL) { - assoc->max_wall_pj = (uint32_t) mins; - set = 1; - } else { - exit_code=1; - fprintf(stderr, - " Bad MaxWall time format: %s\n", - argv[i]); - } - } else if (!strncasecmp (argv[i], "QOSLevel", - MAX(command_len, 1))) { - if(!assoc->qos_list) - assoc->qos_list = - list_create(slurm_destroy_char); - - if(!g_qos_list) - g_qos_list = acct_storage_g_get_qos( - db_conn, my_uid, NULL); - - if(slurmdb_addto_qos_char_list(assoc->qos_list, - g_qos_list, argv[i]+end, - option)) - set = 1; - else - exit_code = 1; - } else { + } 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", @@ -339,8 +235,8 @@ extern int sacctmgr_add_cluster(int argc, char *argv[]) for (i=0; i<argc; i++) { int command_len = strlen(argv[i]); - if (!strncasecmp (argv[i], "Where", MAX(command_len, 5)) - || !strncasecmp (argv[i], "Set", MAX(command_len, 3))) + if (!strncasecmp(argv[i], "Where", MAX(command_len, 5)) + || !strncasecmp(argv[i], "Set", MAX(command_len, 3))) i++; limit_set += _set_rec(&i, argc, argv, name_list, &start_assoc, &class); @@ -539,8 +435,8 @@ extern int sacctmgr_list_cluster(int argc, char *argv[]) cluster_cond->cluster_list = list_create(slurm_destroy_char); for (i=0; i<argc; i++) { int command_len = strlen(argv[i]); - if (!strncasecmp (argv[i], "Where", MAX(command_len, 5)) - || !strncasecmp (argv[i], "Set", MAX(command_len, 3))) + if (!strncasecmp(argv[i], "Where", MAX(command_len, 5)) + || !strncasecmp(argv[i], "Set", MAX(command_len, 3))) i++; _set_cond(&i, argc, argv, cluster_cond, format_list); } @@ -976,12 +872,12 @@ extern int sacctmgr_modify_cluster(int argc, char *argv[]) for (i=0; i<argc; i++) { int command_len = strlen(argv[i]); - if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))) { + if (!strncasecmp(argv[i], "Where", MAX(command_len, 5))) { i++; prev_set = _set_cond(&i, argc, argv, &cluster_cond, NULL); cond_set = MAX(cond_set, prev_set); - } else if (!strncasecmp (argv[i], "Set", MAX(command_len, 3))) { + } else if (!strncasecmp(argv[i], "Set", MAX(command_len, 3))) { i++; prev_set = _set_rec(&i, argc, argv, NULL, assoc, &class_rec); @@ -1135,8 +1031,8 @@ extern int sacctmgr_delete_cluster(int argc, char *argv[]) for (i=0; i<argc; i++) { int command_len = strlen(argv[i]); - if (!strncasecmp (argv[i], "Where", MAX(command_len, 5)) - || !strncasecmp (argv[i], "Set", MAX(command_len, 3))) + if (!strncasecmp(argv[i], "Where", MAX(command_len, 5)) + || !strncasecmp(argv[i], "Set", MAX(command_len, 3))) i++; prev_set = _set_cond(&i, argc, argv, cluster_cond, NULL); cond_set = MAX(cond_set, prev_set); @@ -1244,7 +1140,7 @@ extern int sacctmgr_dump_cluster (int argc, char *argv[]) end++; } } - if(!end || !strncasecmp (argv[i], "Cluster", + if(!end || !strncasecmp(argv[i], "Cluster", MAX(command_len, 1))) { if(cluster_name) { exit_code=1; @@ -1254,7 +1150,7 @@ extern int sacctmgr_dump_cluster (int argc, char *argv[]) continue; } cluster_name = xstrdup(argv[i]+end); - } else if (!strncasecmp (argv[i], "File", + } else if (!strncasecmp(argv[i], "File", MAX(command_len, 1))) { if(file_name) { exit_code=1; diff --git a/src/sacctmgr/sacctmgr.h b/src/sacctmgr/sacctmgr.h index 1855b4606ac6bf8fad1267066669940223d55ecb..e70b9da89a5226d804859268b78c41102528db1d 100644 --- a/src/sacctmgr/sacctmgr.h +++ b/src/sacctmgr/sacctmgr.h @@ -100,6 +100,13 @@ extern void *db_conn; extern uint32_t my_uid; extern List g_qos_list; +extern int sacctmgr_set_association_cond(slurmdb_association_cond_t *assoc_cond, + char *type, char *value, + int command_len); +extern int sacctmgr_set_association_rec(slurmdb_association_rec_t *assoc_rec, + char *type, char *value, + int command_len, int option); + extern int sacctmgr_add_association(int argc, char *argv[]); extern int sacctmgr_add_user(int argc, char *argv[]); extern int sacctmgr_add_account(int argc, char *argv[]); diff --git a/src/sacctmgr/user_functions.c b/src/sacctmgr/user_functions.c index 257f623fab325a651c9feb5976e505b08e50e792..a48a6e5176a0cd36c300e20960dbbc840675e52e 100644 --- a/src/sacctmgr/user_functions.c +++ b/src/sacctmgr/user_functions.c @@ -83,71 +83,47 @@ static int _set_cond(int *start, int argc, char *argv[], } } - if (!strncasecmp (argv[i], "Set", MAX(command_len, 3))) { + if (!strncasecmp(argv[i], "Set", MAX(command_len, 3))) { i--; break; - } else if (!end && !strncasecmp (argv[i], "WithAssoc", + } else if (!end && !strncasecmp(argv[i], "WithAssoc", MAX(command_len, 5))) { user_cond->with_assocs = 1; } else if (!end && - !strncasecmp (argv[i], "WithCoordinators", + !strncasecmp(argv[i], "WithCoordinators", MAX(command_len, 5))) { user_cond->with_coords = 1; } else if (!end && - !strncasecmp (argv[i], "WithDeleted", + !strncasecmp(argv[i], "WithDeleted", MAX(command_len, 5))) { user_cond->with_deleted = 1; assoc_cond->with_deleted = 1; } else if (!end && - !strncasecmp (argv[i], "WithRawQOSLevel", + !strncasecmp(argv[i], "WithRawQOSLevel", MAX(command_len, 5))) { assoc_cond->with_raw_qos = 1; - } else if (!end && !strncasecmp (argv[i], "WOPLimits", + } else if (!end && !strncasecmp(argv[i], "WOPLimits", MAX(command_len, 4))) { assoc_cond->without_parent_limits = 1; } else if(!end && !strncasecmp(argv[i], "where", MAX(command_len, 5))) { continue; } else if(!end - || !strncasecmp (argv[i], "Names", + || !strncasecmp(argv[i], "Names", MAX(command_len, 1)) - || !strncasecmp (argv[i], "Users", + || !strncasecmp(argv[i], "Users", MAX(command_len, 1))) { if(slurm_addto_char_list(assoc_cond->user_list, argv[i]+end)) u_set = 1; else exit_code=1; - } else if (!strncasecmp (argv[i], "Account", - MAX(command_len, 2)) - || !strncasecmp (argv[i], "Acct", - MAX(command_len, 4))) { - if(!assoc_cond->acct_list) { - assoc_cond->acct_list = - list_create(slurm_destroy_char); - } - if(slurm_addto_char_list(assoc_cond->acct_list, - argv[i]+end)) - a_set = 1; - else - exit_code=1; - } else if (!strncasecmp (argv[i], "AdminLevel", + } else if (!strncasecmp(argv[i], "AdminLevel", MAX(command_len, 2))) { user_cond->admin_level = str_2_slurmdb_admin_level(argv[i]+end); u_set = 1; - } else if (!strncasecmp (argv[i], "Clusters", - MAX(command_len, 1))) { - if(!assoc_cond->cluster_list) { - assoc_cond->cluster_list = - list_create(slurm_destroy_char); - } - if(slurm_addto_char_list(assoc_cond->cluster_list, - argv[i]+end)) - a_set = 1; - else - exit_code=1; - } else if (!strncasecmp (argv[i], "DefaultAccount", + } else if (!strncasecmp(argv[i], "DefaultAccount", MAX(command_len, 8))) { if(!user_cond->def_acct_list) { user_cond->def_acct_list = @@ -158,7 +134,7 @@ static int _set_cond(int *start, int argc, char *argv[], u_set = 1; else exit_code=1; - } else if (!strncasecmp (argv[i], "DefaultWCKey", + } else if (!strncasecmp(argv[i], "DefaultWCKey", MAX(command_len, 8))) { if(!user_cond->def_wckey_list) { user_cond->def_wckey_list = @@ -169,199 +145,13 @@ static int _set_cond(int *start, int argc, char *argv[], u_set = 1; else exit_code=1; - } else if (!strncasecmp (argv[i], "DefaultQOS", - MAX(command_len, 8))) { - if(!assoc_cond->def_qos_id_list) { - assoc_cond->def_qos_id_list = - list_create(slurm_destroy_char); - } - if(!g_qos_list) { - g_qos_list = acct_storage_g_get_qos( - db_conn, my_uid, NULL); - } - - if(slurmdb_addto_qos_char_list( - assoc_cond->def_qos_id_list, - g_qos_list, - argv[i]+end, 0)) - a_set = 1; - else - exit_code = 1; - } else if (!strncasecmp (argv[i], "Format", + } else if (!strncasecmp(argv[i], "Format", MAX(command_len, 1))) { if(format_list) slurm_addto_char_list(format_list, argv[i]+end); - } else if (!strncasecmp (argv[i], "FairShare", - MAX(command_len, 1)) - || !strncasecmp (argv[i], "Shares", - MAX(command_len, 1))) { - if(!assoc_cond->fairshare_list) - assoc_cond->fairshare_list = - list_create(slurm_destroy_char); - if(slurm_addto_char_list(assoc_cond->fairshare_list, - argv[i]+end)) - a_set = 1; - else - exit_code=1; - } else if (!strncasecmp (argv[i], "GrpCPUMins", - MAX(command_len, 7))) { - if(!assoc_cond->grp_cpu_mins_list) - assoc_cond->grp_cpu_mins_list = - list_create(slurm_destroy_char); - if(slurm_addto_char_list(assoc_cond->grp_cpu_mins_list, - argv[i]+end)) - a_set = 1; - else - exit_code=1; - } else if (!strncasecmp (argv[i], "GrpCpus", - MAX(command_len, 7))) { - if(!assoc_cond->grp_cpus_list) - assoc_cond->grp_cpus_list = - list_create(slurm_destroy_char); - if(slurm_addto_char_list(assoc_cond->grp_cpus_list, - argv[i]+end)) - a_set = 1; - else - exit_code=1; - } else if (!strncasecmp (argv[i], "GrpJobs", - MAX(command_len, 4))) { - if(!assoc_cond->grp_jobs_list) - assoc_cond->grp_jobs_list = - list_create(slurm_destroy_char); - if(slurm_addto_char_list(assoc_cond->grp_jobs_list, - argv[i]+end)) - a_set = 1; - else - exit_code=1; - } else if (!strncasecmp (argv[i], "GrpNodes", - MAX(command_len, 4))) { - if(!assoc_cond->grp_nodes_list) - assoc_cond->grp_nodes_list = - list_create(slurm_destroy_char); - if(slurm_addto_char_list(assoc_cond->grp_nodes_list, - argv[i]+end)) - a_set = 1; - else - exit_code=1; - } else if (!strncasecmp (argv[i], "GrpSubmitJobs", - MAX(command_len, 4))) { - if(!assoc_cond->grp_submit_jobs_list) - assoc_cond->grp_submit_jobs_list = - list_create(slurm_destroy_char); - if(slurm_addto_char_list( - assoc_cond->grp_submit_jobs_list, - argv[i]+end)) - a_set = 1; - else - exit_code=1; - } else if (!strncasecmp (argv[i], "GrpWall", - MAX(command_len, 4))) { - if(!assoc_cond->grp_wall_list) - assoc_cond->grp_wall_list = - list_create(slurm_destroy_char); - if(slurm_addto_char_list( - assoc_cond->grp_wall_list, - argv[i]+end)) - a_set = 1; - else - exit_code=1; - } else if (!strncasecmp (argv[i], "MaxCPUMinsPerJob", - MAX(command_len, 7))) { - if(!assoc_cond->max_cpu_mins_pj_list) - assoc_cond->max_cpu_mins_pj_list = - list_create(slurm_destroy_char); - if(slurm_addto_char_list( - assoc_cond->max_cpu_mins_pj_list, - argv[i]+end)) - a_set = 1; - else - exit_code=1; - } else if (!strncasecmp (argv[i], "MaxCpusPerJob", - MAX(command_len, 7))) { - if(!assoc_cond->max_cpus_pj_list) - assoc_cond->max_cpus_pj_list = - list_create(slurm_destroy_char); - if(slurm_addto_char_list( - assoc_cond->max_cpus_pj_list, - argv[i]+end)) - a_set = 1; - else - exit_code=1; - } else if (!strncasecmp (argv[i], "MaxJobs", - MAX(command_len, 4))) { - if(!assoc_cond->max_jobs_list) - assoc_cond->max_jobs_list = - list_create(slurm_destroy_char); - if(slurm_addto_char_list( - assoc_cond->max_jobs_list, - argv[i]+end)) - a_set = 1; - else - exit_code=1; - } else if (!strncasecmp (argv[i], "MaxNodesPerJob", - MAX(command_len, 4))) { - if(!assoc_cond->max_nodes_pj_list) - assoc_cond->max_nodes_pj_list = - list_create(slurm_destroy_char); - if(slurm_addto_char_list( - assoc_cond->max_nodes_pj_list, - argv[i]+end)) - a_set = 1; - else - exit_code=1; - } else if (!strncasecmp (argv[i], "MaxSubmitJobs", - MAX(command_len, 4))) { - if(!assoc_cond->max_submit_jobs_list) - assoc_cond->max_submit_jobs_list = - list_create(slurm_destroy_char); - if(slurm_addto_char_list( - assoc_cond->max_submit_jobs_list, - argv[i]+end)) - a_set = 1; - else - exit_code=1; - } else if (!strncasecmp (argv[i], "MaxWallDurationPerJob", - MAX(command_len, 4))) { - if(!assoc_cond->max_wall_pj_list) - assoc_cond->max_wall_pj_list = - list_create(slurm_destroy_char); - if(slurm_addto_char_list( - assoc_cond->max_wall_pj_list, - argv[i]+end)) - a_set = 1; - else - exit_code=1; - } else if (!strncasecmp (argv[i], "Partition", - MAX(command_len, 3))) { - if(!assoc_cond->partition_list) { - assoc_cond->partition_list = - list_create(slurm_destroy_char); - } - if(slurm_addto_char_list( - assoc_cond->partition_list, - argv[i]+end)) - a_set = 1; - else - exit_code=1; - } else if (!strncasecmp (argv[i], "QosLevel", - MAX(command_len, 1))) { - if(!assoc_cond->qos_list) { - assoc_cond->qos_list = - list_create(slurm_destroy_char); - } - - if(!g_qos_list) { - g_qos_list = acct_storage_g_get_qos( - db_conn, my_uid, NULL); - } - - if(slurmdb_addto_qos_char_list(assoc_cond->qos_list, - g_qos_list, argv[i]+end, - option)) - u_set = 1; - else - exit_code=1; - } else { + } else if(!(a_set = sacctmgr_set_association_cond( + assoc_cond, argv[i], argv[i]+end, + command_len))) { exit_code=1; fprintf(stderr, " Unknown condition: %s\n" " Use keyword 'set' to modify value\n", @@ -385,7 +175,7 @@ static int _set_rec(int *start, int argc, char *argv[], slurmdb_user_rec_t *user, slurmdb_association_rec_t *assoc) { - int i, mins; + int i; int u_set = 0; int a_set = 0; int end = 0; @@ -404,7 +194,7 @@ static int _set_rec(int *start, int argc, char *argv[], } } - if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))) { + if (!strncasecmp(argv[i], "Where", MAX(command_len, 5))) { i--; break; } else if(!end && !strncasecmp(argv[i], "set", @@ -415,185 +205,34 @@ static int _set_rec(int *start, int argc, char *argv[], fprintf(stderr, " Bad format on %s: End your option with " "an '=' sign\n", argv[i]); - } else if (!strncasecmp (argv[i], "AdminLevel", + } else if (!strncasecmp(argv[i], "AdminLevel", MAX(command_len, 2))) { user->admin_level = str_2_slurmdb_admin_level(argv[i]+end); u_set = 1; - } else if (!strncasecmp (argv[i], "DefaultAccount", + } else if (!strncasecmp(argv[i], "DefaultAccount", MAX(command_len, 8))) { if(user->default_acct) xfree(user->default_acct); user->default_acct = strip_quotes(argv[i]+end, NULL, 1); u_set = 1; - } else if (!strncasecmp (argv[i], "DefaultWCKey", + } else if (!strncasecmp(argv[i], "DefaultWCKey", MAX(command_len, 8))) { if(user->default_wckey) xfree(user->default_wckey); user->default_wckey = strip_quotes(argv[i]+end, NULL, 1); u_set = 1; - } else if (!strncasecmp (argv[i], "DefaultQOS", - MAX(command_len, 8))) { - if(!assoc) - continue; - - if(!g_qos_list) { - g_qos_list = acct_storage_g_get_qos( - db_conn, my_uid, NULL); - } - - if(atoi(argv[i]+end) == -1) - assoc->def_qos_id = -1; - else - assoc->def_qos_id = str_2_slurmdb_qos( - g_qos_list, argv[i]+end); - - if(assoc->def_qos_id == NO_VAL) { - fprintf(stderr, - "You gave a bad qos '%s'. " - "Use 'list qos' to get " - "complete list.\n", - argv[i]+end); - exit_code = 1; - break; - } - a_set = 1; - } else if (!strncasecmp (argv[i], "FairShare", - MAX(command_len, 1)) - || !strncasecmp (argv[i], "Shares", - MAX(command_len, 1))) { - if(!assoc) - continue; - if (get_uint(argv[i]+end, &assoc->shares_raw, - "FairShare") == SLURM_SUCCESS) - a_set = 1; - } else if (!strncasecmp (argv[i], "GrpCPUMins", - MAX(command_len, 7))) { - if(!assoc) - continue; - if (get_uint64(argv[i]+end, - &assoc->grp_cpu_mins, - "GrpCPUMins") == SLURM_SUCCESS) - a_set = 1; - } else if (!strncasecmp (argv[i], "GrpCpus", - MAX(command_len, 7))) { - if(!assoc) - continue; - if (get_uint(argv[i]+end, &assoc->grp_cpus, - "GrpCpus") == SLURM_SUCCESS) - a_set = 1; - } else if (!strncasecmp (argv[i], "GrpJobs", - MAX(command_len, 4))) { - if(!assoc) - continue; - if (get_uint(argv[i]+end, &assoc->grp_jobs, - "GrpJobs") == SLURM_SUCCESS) - a_set = 1; - } else if (!strncasecmp (argv[i], "GrpNodes", - MAX(command_len, 4))) { - if(!assoc) - continue; - if (get_uint(argv[i]+end, &assoc->grp_nodes, - "GrpNodes") == SLURM_SUCCESS) - a_set = 1; - } else if (!strncasecmp (argv[i], "GrpSubmitJobs", - MAX(command_len, 4))) { - if(!assoc) - continue; - if (get_uint(argv[i]+end, &assoc->grp_submit_jobs, - "GrpSubmitJobs") == SLURM_SUCCESS) - a_set = 1; - } else if (!strncasecmp (argv[i], "GrpWall", - MAX(command_len, 4))) { - if(!assoc) - continue; - mins = time_str2mins(argv[i]+end); - if (mins != NO_VAL) { - assoc->grp_wall = (uint32_t) mins; - a_set = 1; - } else { - exit_code=1; - fprintf(stderr, - " Bad GrpWall time format: %s\n", - argv[i]); - } - } else if (!strncasecmp (argv[i], "MaxCPUMinsPerJob", - MAX(command_len, 7))) { - if(!assoc) - continue; - if (get_uint64(argv[i]+end, - &assoc->max_cpu_mins_pj, - "MaxCPUMins") == SLURM_SUCCESS) - a_set = 1; - } else if (!strncasecmp (argv[i], "MaxCpusPerJob", - MAX(command_len, 7))) { - if(!assoc) - continue; - if (get_uint(argv[i]+end, &assoc->max_cpus_pj, - "MaxCpus") == SLURM_SUCCESS) - a_set = 1; - } else if (!strncasecmp (argv[i], "MaxJobs", - MAX(command_len, 4))) { - if(!assoc) - continue; - if (get_uint(argv[i]+end, &assoc->max_jobs, - "MaxJobs") == SLURM_SUCCESS) - a_set = 1; - } else if (!strncasecmp (argv[i], "MaxNodesPerJob", - MAX(command_len, 4))) { - if(!assoc) - continue; - if (get_uint(argv[i]+end, - &assoc->max_nodes_pj, - "MaxNodes") == SLURM_SUCCESS) - a_set = 1; - } else if (!strncasecmp (argv[i], "MaxSubmitJobs", - MAX(command_len, 4))) { - if(!assoc) - continue; - if (get_uint(argv[i]+end, &assoc->max_submit_jobs, - "MaxSubmitJobs") == SLURM_SUCCESS) - a_set = 1; - } else if (!strncasecmp (argv[i], "MaxWallDurationPerJob", - MAX(command_len, 4))) { - if(!assoc) - continue; - mins = time_str2mins(argv[i]+end); - if (mins != NO_VAL) { - assoc->max_wall_pj = (uint32_t) mins; - a_set = 1; - } else { - exit_code=1; - fprintf(stderr, - " Bad MaxWall time format: %s\n", - argv[i]); - } - } else if (!strncasecmp (argv[i], "NewName", + } else if (!strncasecmp(argv[i], "NewName", MAX(command_len, 1))) { if(user->name) xfree(user->name); user->name = strip_quotes(argv[i]+end, NULL, 1); u_set = 1; - } else if (!strncasecmp (argv[i], "QosLevel", - MAX(command_len, 1))) { - if(!assoc) - continue; - if(!assoc->qos_list) - assoc->qos_list = - list_create(slurm_destroy_char); - - if(!g_qos_list) - g_qos_list = acct_storage_g_get_qos( - db_conn, my_uid, NULL); - - if(slurmdb_addto_qos_char_list(assoc->qos_list, - g_qos_list, argv[i]+end, - option)) - a_set = 1; - else - exit_code = 1; - } else { + } else if(!assoc || + (assoc && !(a_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", @@ -776,7 +415,7 @@ extern int sacctmgr_add_user(int argc, char *argv[]) char *user_str = NULL; char *assoc_str = NULL; char *wckey_str = NULL; - int limit_set = 0, mins; + int limit_set = 0; int first = 1; int acct_first = 1; int command_len = 0; @@ -814,27 +453,15 @@ extern int sacctmgr_add_user(int argc, char *argv[]) } if(!end - || !strncasecmp (argv[i], "Names", MAX(command_len, 1)) - || !strncasecmp (argv[i], "Users", MAX(command_len, 1))) { + || !strncasecmp(argv[i], "Names", MAX(command_len, 1)) + || !strncasecmp(argv[i], "Users", MAX(command_len, 1))) { if(!slurm_addto_char_list(assoc_cond->user_list, argv[i]+end)) exit_code=1; - } else if (!strncasecmp (argv[i], "Accounts", - MAX(command_len, 2)) - || !strncasecmp (argv[i], "Acct", - MAX(command_len, 4))) { - if(!slurm_addto_char_list(assoc_cond->acct_list, - argv[i]+end)) - exit_code=1; - } else if (!strncasecmp (argv[i], "AdminLevel", + } else if (!strncasecmp(argv[i], "AdminLevel", MAX(command_len, 2))) { admin_level = str_2_slurmdb_admin_level(argv[i]+end); - } else if (!strncasecmp (argv[i], "Clusters", - MAX(command_len, 1))) { - if(!slurm_addto_char_list(assoc_cond->cluster_list, - argv[i]+end)) - exit_code=1; - } else if (!strncasecmp (argv[i], "DefaultAccount", + } else if (!strncasecmp(argv[i], "DefaultAccount", MAX(command_len, 8))) { if(default_acct) { fprintf(stderr, @@ -846,7 +473,7 @@ extern int sacctmgr_add_user(int argc, char *argv[]) default_acct = strip_quotes(argv[i]+end, NULL, 1); slurm_addto_char_list(assoc_cond->acct_list, default_acct); - } else if (!strncasecmp (argv[i], "DefaultWCKey", + } else if (!strncasecmp(argv[i], "DefaultWCKey", MAX(command_len, 8))) { if(default_wckey) { fprintf(stderr, @@ -858,119 +485,16 @@ extern int sacctmgr_add_user(int argc, char *argv[]) default_wckey = strip_quotes(argv[i]+end, NULL, 1); slurm_addto_char_list(wckey_cond->name_list, default_wckey); - } else if (!strncasecmp (argv[i], "FairShare", - MAX(command_len, 1)) - || !strncasecmp (argv[i], "Shares", - MAX(command_len, 1))) { - if (get_uint(argv[i]+end, &start_assoc.shares_raw, - "FairShare") == SLURM_SUCCESS) - limit_set = 1; - } else if (!strncasecmp (argv[i], "GrpCPUMins", - MAX(command_len, 7))) { - if (get_uint64(argv[i]+end, - &start_assoc.grp_cpu_mins, - "GrpCPUMins") == SLURM_SUCCESS) - limit_set = 1; - } else if (!strncasecmp (argv[i], "GrpCpus", - MAX(command_len, 7))) { - if (get_uint(argv[i]+end, &start_assoc.grp_cpus, - "GrpCpus") == SLURM_SUCCESS) - limit_set = 1; - } else if (!strncasecmp (argv[i], "GrpJobs", - MAX(command_len, 4))) { - if (get_uint(argv[i]+end, &start_assoc.grp_jobs, - "GrpJobs") == SLURM_SUCCESS) - limit_set = 1; - } else if (!strncasecmp (argv[i], "GrpNodes", - MAX(command_len, 4))) { - if (get_uint(argv[i]+end, &start_assoc.grp_nodes, - "GrpNodes") == SLURM_SUCCESS) - limit_set = 1; - } else if (!strncasecmp (argv[i], "GrpSubmitJobs", - MAX(command_len, 4))) { - if (get_uint(argv[i]+end, &start_assoc.grp_submit_jobs, - "GrpSubmitJobs") == SLURM_SUCCESS) - limit_set = 1; - } else if (!strncasecmp (argv[i], "GrpWall", - MAX(command_len, 4))) { - mins = time_str2mins(argv[i]+end); - if (mins != NO_VAL) { - start_assoc.grp_wall = (uint32_t) mins; - limit_set = 1; - } else { - exit_code=1; - fprintf(stderr, - " Bad GrpWall time format: %s\n", - argv[i]); - } - } else if (!strncasecmp (argv[i], "MaxCPUMinsPerJob", - MAX(command_len, 7))) { - if (get_uint64(argv[i]+end, - &start_assoc.max_cpu_mins_pj, - "MaxCPUMins") == SLURM_SUCCESS) - limit_set = 1; - } else if (!strncasecmp (argv[i], "MaxCpusPerJob", - MAX(command_len, 7))) { - if (get_uint(argv[i]+end, &start_assoc.max_cpus_pj, - "MaxCpus") == SLURM_SUCCESS) - limit_set = 1; - } else if (!strncasecmp (argv[i], "MaxJobs", - MAX(command_len, 4))) { - if (get_uint(argv[i]+end, &start_assoc.max_jobs, - "MaxJobs") == SLURM_SUCCESS) - limit_set = 1; - } else if (!strncasecmp (argv[i], "MaxNodesPerJob", - MAX(command_len, 4))) { - if (get_uint(argv[i]+end, - &start_assoc.max_nodes_pj, - "MaxNodes") == SLURM_SUCCESS) - limit_set = 1; - } else if (!strncasecmp (argv[i], "MaxSubmitJobs", - MAX(command_len, 4))) { - if (get_uint(argv[i]+end, &start_assoc.max_submit_jobs, - "MaxSubmitJobs") == SLURM_SUCCESS) - limit_set = 1; - } else if (!strncasecmp (argv[i], "MaxWallDurationPerJob", - MAX(command_len, 4))) { - mins = time_str2mins(argv[i]+end); - if (mins != NO_VAL) { - start_assoc.max_wall_pj = (uint32_t) mins; - limit_set = 1; - } else { - exit_code=1; - fprintf(stderr, - " Bad MaxWall time format: %s\n", - argv[i]); - } - } else if (!strncasecmp (argv[i], "Partitions", - MAX(command_len, 1))) { - slurm_addto_char_list(assoc_cond->partition_list, - argv[i]+end); - } else if (!strncasecmp (argv[i], "QosLevel", - MAX(command_len, 1))) { - if(!start_assoc.qos_list) - start_assoc.qos_list = - list_create(slurm_destroy_char); - - if(!g_qos_list) - g_qos_list = acct_storage_g_get_qos( - db_conn, my_uid, NULL); - - if(slurmdb_addto_qos_char_list(start_assoc.qos_list, - g_qos_list, - argv[i]+end, option)) - limit_set = 1; - else { - exit_code = 1; - fprintf(stderr, - " Bad QosLevel value: %s\n", - argv[i]+end); - } - } else if (!strncasecmp (argv[i], "WCKeys", + } else if (!strncasecmp(argv[i], "WCKeys", MAX(command_len, 1))) { slurm_addto_char_list(wckey_cond->name_list, argv[i]+end); - } else { + } else if(!(limit_set = sacctmgr_set_association_rec( + &start_assoc, argv[i], argv[i]+end, + command_len, option)) + && !(limit_set = sacctmgr_set_association_cond( + assoc_cond, argv[i], argv[i]+end, + command_len))) { exit_code=1; fprintf(stderr, " Unknown option: %s\n", argv[i]); } @@ -1523,8 +1047,8 @@ extern int sacctmgr_add_coord(int argc, char *argv[]) for (i=0; i<argc; i++) { int command_len = strlen(argv[i]); - if (!strncasecmp (argv[i], "Where", MAX(command_len, 5)) - || !strncasecmp (argv[i], "Set", MAX(command_len, 3))) + if (!strncasecmp(argv[i], "Where", MAX(command_len, 5)) + || !strncasecmp(argv[i], "Set", MAX(command_len, 3))) i++; prev_set = _set_cond(&i, argc, argv, user_cond, NULL); cond_set = MAX(cond_set, prev_set); @@ -1615,6 +1139,7 @@ extern int sacctmgr_list_user(int argc, char *argv[]) PRINT_DWCKEY, PRINT_FAIRSHARE, PRINT_GRPCM, + PRINT_GRPCRM, PRINT_GRPC, PRINT_GRPJ, PRINT_GRPN, @@ -1623,6 +1148,7 @@ extern int sacctmgr_list_user(int argc, char *argv[]) PRINT_ID, PRINT_MAXC, PRINT_MAXCM, + PRINT_MAXCRM, PRINT_MAXJ, PRINT_MAXN, PRINT_MAXS, @@ -1639,8 +1165,8 @@ extern int sacctmgr_list_user(int argc, char *argv[]) for (i=0; i<argc; i++) { int command_len = strlen(argv[i]); - if (!strncasecmp (argv[i], "Where", MAX(command_len, 5)) - || !strncasecmp (argv[i], "Set", MAX(command_len, 3))) + if (!strncasecmp(argv[i], "Where", MAX(command_len, 5)) + || !strncasecmp(argv[i], "Set", MAX(command_len, 3))) i++; prev_set = _set_cond(&i, argc, argv, user_cond, format_list); cond_set = MAX(cond_set, prev_set); @@ -1694,7 +1220,7 @@ extern int sacctmgr_list_user(int argc, char *argv[]) field = xmalloc(sizeof(print_field_t)); if(!strncasecmp("Account", object, MAX(command_len, 2)) - || !strncasecmp ("Acct", object, MAX(command_len, 4))) { + || !strncasecmp("Acct", object, MAX(command_len, 4))) { field->type = PRINT_ACCOUNT; field->name = xstrdup("Account"); field->len = 10; @@ -1747,6 +1273,12 @@ extern int sacctmgr_list_user(int argc, char *argv[]) field->name = xstrdup("GrpCPUMins"); field->len = 11; field->print_routine = print_fields_uint64; + } else if(!strncasecmp("GrpCPURunMins", object, + MAX(command_len, 8))) { + field->type = PRINT_GRPCRM; + field->name = xstrdup("GrpCPURunMins"); + field->len = 13; + field->print_routine = print_fields_uint64; } else if(!strncasecmp("GrpCPUs", object, MAX(command_len, 8))) { field->type = PRINT_GRPC; @@ -1788,6 +1320,12 @@ extern int sacctmgr_list_user(int argc, char *argv[]) field->name = xstrdup("MaxCPUMins"); field->len = 11; field->print_routine = print_fields_uint64; + } else if(!strncasecmp("MaxCPURunMins", object, + MAX(command_len, 7))) { + field->type = PRINT_MAXCRM; + field->name = xstrdup("MaxCPURunMins"); + field->len = 11; + field->print_routine = print_fields_uint64; } else if(!strncasecmp("MaxCPUsPerJob", object, MAX(command_len, 7))) { field->type = PRINT_MAXC; @@ -1979,6 +1517,13 @@ extern int sacctmgr_list_user(int argc, char *argv[]) (curr_inx == field_count)); break; + case PRINT_GRPCRM: + field->print_routine( + field, + assoc->grp_cpu_run_mins, + (curr_inx == + field_count)); + break; case PRINT_GRPC: field->print_routine( field, @@ -2029,6 +1574,14 @@ extern int sacctmgr_list_user(int argc, char *argv[]) (curr_inx == field_count)); break; + case PRINT_MAXCRM: + field->print_routine( + field, + assoc-> + max_cpu_run_mins, + (curr_inx == + field_count)); + break; case PRINT_MAXC: field->print_routine( field, @@ -2233,11 +1786,11 @@ extern int sacctmgr_modify_user(int argc, char *argv[]) for (i=0; i<argc; i++) { int command_len = strlen(argv[i]); - if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))) { + if (!strncasecmp(argv[i], "Where", MAX(command_len, 5))) { i++; prev_set = _set_cond(&i, argc, argv, user_cond, NULL); cond_set = MAX(cond_set, prev_set); - } else if (!strncasecmp (argv[i], "Set", MAX(command_len, 3))) { + } else if (!strncasecmp(argv[i], "Set", MAX(command_len, 3))) { i++; prev_set = _set_rec(&i, argc, argv, user, assoc); rec_set = MAX(rec_set, prev_set); @@ -2430,8 +1983,8 @@ extern int sacctmgr_delete_user(int argc, char *argv[]) for (i=0; i<argc; i++) { int command_len = strlen(argv[i]); - if (!strncasecmp (argv[i], "Where", MAX(command_len, 5)) - || !strncasecmp (argv[i], "Set", MAX(command_len, 3))) + if (!strncasecmp(argv[i], "Where", MAX(command_len, 5)) + || !strncasecmp(argv[i], "Set", MAX(command_len, 3))) i++; prev_set = _set_cond(&i, argc, argv, user_cond, NULL); cond_set = MAX(cond_set, prev_set); @@ -2526,8 +2079,8 @@ extern int sacctmgr_delete_coord(int argc, char *argv[]) for (i=0; i<argc; i++) { int command_len = strlen(argv[i]); - if (!strncasecmp (argv[i], "Where", MAX(command_len, 5)) - || !strncasecmp (argv[i], "Set", MAX(command_len, 3))) + if (!strncasecmp(argv[i], "Where", MAX(command_len, 5)) + || !strncasecmp(argv[i], "Set", MAX(command_len, 3))) i++; prev_set = _set_cond(&i, argc, argv, user_cond, NULL); cond_set = MAX(cond_set, prev_set);