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; }
static int _set_rec(int *start, int argc, char *argv[], List name_list, slurmdb_qos_rec_t *qos) { int i, mins; 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], "Name", MAX(command_len, 1))) { if (name_list) slurm_addto_char_list(name_list, argv[i]+end); } else if (!strncasecmp (argv[i], "Description", MAX(command_len, 1))) { if (!qos) continue; if (!qos->description) qos->description = strip_quotes(argv[i]+end, NULL, 1); set = 1; } else if (!strncasecmp (argv[i], "Flags", MAX(command_len, 2))) { if (!qos) continue; qos->flags = str_2_qos_flags(argv[i]+end, option); if (qos->flags == QOS_FLAG_NOTSET) { char *tmp_char = NULL; qos->flags = INFINITE; qos->flags &= (~QOS_FLAG_NOTSET & ~QOS_FLAG_ADD & ~QOS_FLAG_REMOVE); tmp_char = slurmdb_qos_flags_str(qos->flags); printf(" Unknown QOS flag used in:\n '%s'\n" " Valid QOS flags are\n '%s'\n", argv[i]+end, tmp_char); xfree(tmp_char); exit_code = 1; } else set = 1; } else if (!strncasecmp (argv[i], "GraceTime", MAX(command_len, 3))) { if (!qos) continue; if (get_uint(argv[i]+end, &qos->grace_time, "GraceTime") == SLURM_SUCCESS) { set = 1; } } else if (!strncasecmp (argv[i], "GrpCPUMins", MAX(command_len, 7))) { if (!qos) continue; if (get_uint64(argv[i]+end, &qos->grp_cpu_mins, "GrpCPUMins") == SLURM_SUCCESS) set = 1; } else if (!strncasecmp (argv[i], "GrpCPURunMins", MAX(command_len, 7))) { if (!qos) continue; if (get_uint64(argv[i]+end, &qos->grp_cpu_run_mins, "GrpCPURunMins") == SLURM_SUCCESS) set = 1; } else if (!strncasecmp (argv[i], "GrpCPUs", MAX(command_len, 7))) { if (!qos) continue; if (get_uint(argv[i]+end, &qos->grp_cpus, "GrpCPUs") == SLURM_SUCCESS) set = 1; } else if (!strncasecmp (argv[i], "GrpJobs", MAX(command_len, 4))) { if (!qos) continue; if (get_uint(argv[i]+end, &qos->grp_jobs, "GrpJobs") == SLURM_SUCCESS) set = 1; } else if (!strncasecmp (argv[i], "GrpMemory", MAX(command_len, 4))) { if (!qos) continue; if (get_uint(argv[i]+end, &qos->grp_mem, "GrpMemory") == SLURM_SUCCESS) set = 1; } else if (!strncasecmp (argv[i], "GrpNodes", MAX(command_len, 4))) { if (!qos) continue; if (get_uint(argv[i]+end, &qos->grp_nodes, "GrpNodes") == SLURM_SUCCESS) set = 1; } else if (!strncasecmp (argv[i], "GrpSubmitJobs", MAX(command_len, 4))) { if (!qos) continue; if (get_uint(argv[i]+end, &qos->grp_submit_jobs, "GrpSubmitJobs") == SLURM_SUCCESS) set = 1; } else if (!strncasecmp (argv[i], "GrpWall", MAX(command_len, 4))) { if (!qos) continue; mins = time_str2mins(argv[i]+end); if (mins != NO_VAL) { qos->grp_wall = (uint32_t) mins; 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 (!qos) continue; if (get_uint64(argv[i]+end, &qos->max_cpu_mins_pj, "MaxCPUMins") == SLURM_SUCCESS) set = 1; } else if (!strncasecmp (argv[i], "MaxCPUsPerJob", MAX(command_len, 7))) { if (!qos) continue; if (get_uint(argv[i]+end, &qos->max_cpus_pj, "MaxCPUs") == SLURM_SUCCESS) set = 1; } else if (!strncasecmp (argv[i], "MaxCPUsPerUser", MAX(command_len, 11))) { if (!qos) continue; if (get_uint(argv[i]+end, &qos->max_cpus_pu, "MaxCPUsPerUser") == SLURM_SUCCESS) set = 1; } else if (!strncasecmp (argv[i], "MaxJobsPerUser", MAX(command_len, 4))) { if (!qos) continue; if (get_uint(argv[i]+end, &qos->max_jobs_pu, "MaxJobs") == SLURM_SUCCESS) set = 1; } else if (!strncasecmp (argv[i], "MaxNodesPerJob", MAX(command_len, 4))) { if (!qos) continue; if (get_uint(argv[i]+end, &qos->max_nodes_pj, "MaxNodes") == SLURM_SUCCESS) set = 1; } else if (!strncasecmp (argv[i], "MaxNodesPerUser", MAX(command_len, 8))) { if (!qos) continue; if (get_uint(argv[i]+end, &qos->max_nodes_pu, "MaxNodesPerUser") == SLURM_SUCCESS) set = 1; } else if (!strncasecmp (argv[i], "MaxSubmitJobsPerUser", MAX(command_len, 4))) { if (!qos) continue; if (get_uint(argv[i]+end, &qos->max_submit_jobs_pu, "MaxSubmitJobs") == SLURM_SUCCESS) set = 1; } else if (!strncasecmp (argv[i], "MaxWallDurationPerJob", MAX(command_len, 4))) { if (!qos) continue; mins = time_str2mins(argv[i]+end); if (mins != NO_VAL) { qos->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], "PreemptMode", MAX(command_len, 8))) { if (!qos) continue; qos->preempt_mode = preempt_mode_num(argv[i]+end); if (qos->preempt_mode == (uint16_t)NO_VAL) { fprintf(stderr, " Bad Preempt Mode given: %s\n", argv[i]); exit_code = 1; } else if (qos->preempt_mode == PREEMPT_MODE_SUSPEND) { printf("PreemptType and PreemptMode " "values incompatible\n"); exit_code = 1; } else set = 1; /* Preempt needs to follow PreemptMode */ } else if (!strncasecmp (argv[i], "Preempt", MAX(command_len, 7))) { if (!qos) continue; if (!qos->preempt_list) qos->preempt_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(qos->preempt_list, g_qos_list, argv[i]+end, option)) set = 1; else exit_code = 1; } else if (!strncasecmp (argv[i], "Priority", MAX(command_len, 3))) { if (!qos) continue; if (get_uint(argv[i]+end, &qos->priority, "Priority") == SLURM_SUCCESS) set = 1; } else if (!strncasecmp (argv[i], "UsageFactor", MAX(command_len, 6))) { if (!qos) continue; if (get_double(argv[i]+end, &qos->usage_factor, "UsageFactor") == SLURM_SUCCESS) set = 1; } else if (!strncasecmp (argv[i], "UsageThreshold", MAX(command_len, 6))) { if (!qos) continue; if (get_double(argv[i]+end, &qos->usage_thres, "UsageThreshold") == SLURM_SUCCESS) set = 1; } else { exit_code = 1; printf(" Unknown option: %s\n" " Use keyword 'where' to modify condition\n", argv[i]); } } (*start) = i; return set; }
static int _set_cond(int *start, int argc, char *argv[], slurmdb_reservation_cond_t *reservation_cond, List format_list) { int i; int set = 0; int end = 0; int command_len = 0; if (!reservation_cond) { exit_code=1; fprintf(stderr, "No reservation_cond given"); return -1; } 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 (!strncasecmp(argv[i], "Clusters", MAX(command_len, 1))) { if (!reservation_cond->cluster_list) { reservation_cond->cluster_list = list_create(slurm_destroy_char); } if (slurm_addto_char_list(reservation_cond->name_list, argv[i]+end)) set = 1; } else if (!strncasecmp(argv[i], "Names", MAX(command_len, 2))) { if (!reservation_cond->name_list) { reservation_cond->name_list = list_create(slurm_destroy_char); } if (slurm_addto_char_list(reservation_cond->name_list, argv[i]+end)) set = 1; } 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], "Ids", MAX(command_len, 1))) { if (!reservation_cond->id_list) { reservation_cond->id_list = list_create(slurm_destroy_char); } if (slurm_addto_char_list(reservation_cond->id_list, argv[i]+end)) set = 1; } else if (!strncasecmp(argv[i], "Nodes", MAX(command_len, 2))) { xfree(reservation_cond->nodes); reservation_cond->nodes = strip_quotes( argv[i]+end, NULL, 1); set = 1; } else if (!strncasecmp(argv[i], "Start", MAX(command_len, 5))) { reservation_cond->time_start = parse_time(argv[i]+end, 1); if (errno == ESLURM_INVALID_TIME_VALUE) exit_code = 1; else set = 1; } else if (!strncasecmp(argv[i], "End", MAX(command_len, 5))) { reservation_cond->time_end = parse_time(argv[i]+end, 1); if (errno == ESLURM_INVALID_TIME_VALUE) exit_code = 1; else set = 1; } else { exit_code=1; fprintf(stderr, " Unknown condition: %s\n" " Use keyword 'set' to modify value\n", argv[i]); } } (*start) = i; if (set) return 1; return 0; }
static int _set_cond(int *start, int argc, char *argv[], slurmdb_txn_cond_t *txn_cond, List format_list) { int i, end = 0; int set = 0; int command_len = 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 (!end && !strncasecmp(argv[i], "where", MAX(command_len, 5))) { continue; } else if (!end && !strncasecmp(argv[i], "withassocinfo", MAX(command_len, 5))) { txn_cond->with_assoc_info = 1; set = 1; } else if (!end || (!strncasecmp (argv[i], "Ids", MAX(command_len, 1))) || (!strncasecmp (argv[i], "Txn", MAX(command_len, 1)))) { ListIterator itr = NULL; char *temp = NULL; uint32_t id = 0; if (!txn_cond->id_list) txn_cond->id_list = list_create(slurm_destroy_char); if (slurm_addto_char_list(txn_cond->id_list, argv[i]+end)) set = 1; /* check to make sure user gave ints here */ itr = list_iterator_create(txn_cond->id_list); while ((temp = list_next(itr))) { if (get_uint(temp, &id, "Transaction ID") != SLURM_SUCCESS) { exit_code = 1; list_delete_item(itr); } } list_iterator_destroy(itr); } else if (!strncasecmp (argv[i], "Accounts", MAX(command_len, 3))) { if (!txn_cond->acct_list) txn_cond->acct_list = list_create(slurm_destroy_char); if (slurm_addto_char_list(txn_cond->acct_list, argv[i]+end)) set = 1; } else if (!strncasecmp (argv[i], "Action", MAX(command_len, 4))) { if (!txn_cond->action_list) txn_cond->action_list = list_create(slurm_destroy_char); if (addto_action_char_list(txn_cond->action_list, argv[i]+end)) set = 1; else exit_code=1; } else if (!strncasecmp (argv[i], "Actors", MAX(command_len, 4))) { if (!txn_cond->actor_list) txn_cond->actor_list = list_create(slurm_destroy_char); if (slurm_addto_char_list(txn_cond->actor_list, argv[i]+end)) set = 1; } else if (!strncasecmp (argv[i], "Clusters", MAX(command_len, 3))) { if (!txn_cond->cluster_list) txn_cond->cluster_list = list_create(slurm_destroy_char); if (slurm_addto_char_list(txn_cond->cluster_list, argv[i]+end)) set = 1; } else if (!strncasecmp (argv[i], "End", MAX(command_len, 1))) { txn_cond->time_end = parse_time(argv[i]+end, 1); set = 1; } 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], "Start", MAX(command_len, 1))) { txn_cond->time_start = parse_time(argv[i]+end, 1); set = 1; } else if (!strncasecmp (argv[i], "Users", MAX(command_len, 1))) { if (!txn_cond->user_list) txn_cond->user_list = list_create(slurm_destroy_char); if (slurm_addto_char_list(txn_cond->user_list, argv[i]+end)) set = 1; } else { exit_code=1; fprintf(stderr, " Unknown condition: %s\n", argv[i]); } } (*start) = i; return set; }
static int _set_cond(int *start, int argc, char *argv[], slurmdb_qos_cond_t *qos_cond, List format_list) { int i; int set = 0; int end = 0; int command_len = 0; if (!qos_cond) { error("No qos_cond given"); return -1; } 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], "WithDeleted", MAX(command_len, 5))) { qos_cond->with_deleted = 1; } else if (!end && !strncasecmp(argv[i], "where", MAX(command_len, 5))) { continue; } else if (!end || !strncasecmp (argv[i], "Names", MAX(command_len, 1)) || !strncasecmp (argv[i], "QOSLevel", MAX(command_len, 1))) { if (!qos_cond->name_list) { qos_cond->name_list = list_create(slurm_destroy_char); } if (slurm_addto_char_list(qos_cond->name_list, argv[i]+end)) set = 1; } else if (!strncasecmp (argv[i], "Descriptions", MAX(command_len, 1))) { if (!qos_cond->description_list) { qos_cond->description_list = list_create(slurm_destroy_char); } if (slurm_addto_char_list(qos_cond->description_list, argv[i]+end)) set = 1; } 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], "Ids", MAX(command_len, 1))) { ListIterator itr = NULL; char *temp = NULL; uint32_t id = 0; if (!qos_cond->id_list) { qos_cond->id_list = list_create(slurm_destroy_char); } if (slurm_addto_char_list(qos_cond->id_list, argv[i]+end)) set = 1; /* check to make sure user gave ints here */ itr = list_iterator_create(qos_cond->id_list); while ((temp = list_next(itr))) { if (get_uint(temp, &id, "QOS ID") != SLURM_SUCCESS) { exit_code = 1; list_delete_item(itr); } } list_iterator_destroy(itr); } else if (!strncasecmp (argv[i], "PreemptMode", MAX(command_len, 8))) { if (!qos_cond) continue; qos_cond->preempt_mode |= _parse_preempt_modes(argv[i]+end); if (qos_cond->preempt_mode == (uint16_t)NO_VAL) { fprintf(stderr, " Bad Preempt Mode given: %s\n", argv[i]); exit_code = 1; } else if (qos_cond->preempt_mode == PREEMPT_MODE_SUSPEND) { printf("PreemptType and PreemptMode " "values incompatible\n"); exit_code = 1; } else set = 1; } else { exit_code=1; fprintf(stderr, " Unknown condition: %s\n" " Use keyword 'set' to modify " "SLURM_PRINT_VALUE\n", argv[i]); } } (*start) = i; return set; }
static int _set_cond(int *start, int argc, char *argv[], slurmdb_wckey_cond_t *wckey_cond, List format_list) { int i; int set = 0; int end = 0; int command_len = 0; int option = 0; if(!wckey_cond) { error("No wckey_cond given"); return -1; } 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(!end && !strncasecmp(argv[i], "where", MAX(command_len, 5))) { continue; } else if(!end && !strncasecmp(argv[i], "withdeleted", MAX(command_len, 5))) { wckey_cond->with_deleted = 1; set = 1; } else if(!end || !strncasecmp (argv[i], "WCKeys", MAX(command_len, 3)) || !strncasecmp (argv[i], "Names", MAX(command_len, 3))) { if(!wckey_cond->name_list) wckey_cond->name_list = list_create(slurm_destroy_char); if(slurm_addto_char_list(wckey_cond->name_list, argv[i]+end)) set = 1; } else if (!strncasecmp (argv[i], "Ids", MAX(command_len, 1))) { ListIterator itr = NULL; char *temp = NULL; uint32_t id = 0; if(!wckey_cond->id_list) wckey_cond->id_list = list_create(slurm_destroy_char); if(slurm_addto_char_list(wckey_cond->id_list, argv[i]+end)) set = 1; /* check to make sure user gave ints here */ itr = list_iterator_create(wckey_cond->id_list); while ((temp = list_next(itr))) { if (get_uint(temp, &id, "WCKeyID") != SLURM_SUCCESS) { exit_code = 1; list_delete_item(itr); } } list_iterator_destroy(itr); } else if (!strncasecmp (argv[i], "Clusters", MAX(command_len, 3))) { if(!wckey_cond->cluster_list) wckey_cond->cluster_list = list_create(slurm_destroy_char); if(slurm_addto_char_list(wckey_cond->cluster_list, argv[i]+end)) set = 1; } else if (!strncasecmp (argv[i], "End", MAX(command_len, 1))) { wckey_cond->usage_end = parse_time(argv[i]+end, 1); set = 1; } 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], "Start", MAX(command_len, 1))) { wckey_cond->usage_start = parse_time(argv[i]+end, 1); set = 1; } else if (!strncasecmp (argv[i], "Users", MAX(command_len, 1))) { if(!wckey_cond->user_list) wckey_cond->user_list = list_create(slurm_destroy_char); if(slurm_addto_char_list(wckey_cond->user_list, argv[i]+end)) set = 1; } else { exit_code=1; fprintf(stderr, " Unknown condition: %s\n", argv[i]); } } (*start) = i; return set; }
static int _set_cond(int *start, int argc, char **argv, slurmdb_federation_cond_t *federation_cond, List format_list) { int i; int a_set = 0; int end = 0; int command_len = 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))) { federation_cond->with_deleted = 1; } else if (!end && !strncasecmp (argv[i], "Tree", MAX(command_len, 4))) { tree_display = 1; } else if (!end || !strncasecmp(argv[i], "Names", MAX(command_len, 1)) || !strncasecmp(argv[i], "Federations", MAX(command_len, 3))) { if (!federation_cond->federation_list) federation_cond->federation_list = list_create(slurm_destroy_char); if (slurm_addto_char_list( federation_cond->federation_list, argv[i]+end)) a_set = 1; } else if (!end || !strncasecmp(argv[i], "Clusters", MAX(command_len, 3))) { if (!federation_cond->cluster_list) federation_cond->cluster_list = list_create(slurm_destroy_char); if (slurm_addto_char_list( federation_cond->cluster_list, argv[i]+end)) a_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 { exit_code=1; fprintf(stderr, " Unknown condition: %s\n" " Use keyword 'set' to modify value\n", argv[i]); break; } } (*start) = i; return a_set; }
static int _set_cond(int *start, int argc, char *argv[], slurmdb_association_cond_t *assoc_cond, List format_list) { int i, end = 0; int set = 0; int command_len = 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 (!end && !strncasecmp (argv[i], "Tree", MAX(command_len, 4))) { tree_display = 1; } else if (!end && !strncasecmp(argv[i], "where", MAX(command_len, 5))) { continue; } else if (!end || !strncasecmp (argv[i], "Ids", MAX(command_len, 1)) || !strncasecmp (argv[i], "Problems", MAX(command_len, 2))) { if (!assoc_cond->id_list) assoc_cond->id_list = list_create(slurm_destroy_char); slurm_addto_char_list(assoc_cond->id_list, argv[i]+end); 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], "Format", MAX(command_len, 1))) { if (format_list) slurm_addto_char_list(format_list, argv[i]+end); } 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); set = 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); set = 1; } else { exit_code = 1; fprintf(stderr, " Unknown condition: %s\n", argv[i]); } } (*start) = i; return set; }
static int _set_cond(int *start, int argc, char *argv[], slurmdb_archive_cond_t *arch_cond) { int i; int set = 0; int end = 0; int command_len = 0; uint32_t tmp; slurmdb_job_cond_t *job_cond = NULL; if (!arch_cond) { error("No arch_cond given"); return -1; } if (!arch_cond->job_cond) arch_cond->job_cond = xmalloc(sizeof(slurmdb_job_cond_t)); job_cond = arch_cond->job_cond; 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 (!end && !strncasecmp(argv[i], "where", MAX(command_len, 5))) { continue; } else if (!end && !strncasecmp(argv[i], "events", MAX(command_len, 1))) { arch_cond->purge_event |= SLURMDB_PURGE_ARCHIVE; set = 1; } else if (!end && !strncasecmp(argv[i], "jobs", MAX(command_len, 1))) { arch_cond->purge_job |= SLURMDB_PURGE_ARCHIVE; set = 1; } else if (!end && !strncasecmp(argv[i], "reservations", MAX(command_len, 1))) { arch_cond->purge_resv |= SLURMDB_PURGE_ARCHIVE; set = 1; } else if (!end && !strncasecmp(argv[i], "steps", MAX(command_len, 1))) { arch_cond->purge_step |= SLURMDB_PURGE_ARCHIVE; set = 1; } else if (!end && !strncasecmp(argv[i], "suspend", MAX(command_len, 1))) { arch_cond->purge_suspend |= SLURMDB_PURGE_ARCHIVE; set = 1; } else if (!end || !strncasecmp(argv[i], "Clusters", MAX(command_len, 1))) { if (!job_cond->cluster_list) job_cond->cluster_list = list_create(slurm_destroy_char); slurm_addto_char_list(job_cond->cluster_list, argv[i]+end); set = 1; } else if (!strncasecmp (argv[i], "Accounts", MAX(command_len, 2))) { if (!job_cond->acct_list) job_cond->acct_list = list_create(slurm_destroy_char); slurm_addto_char_list(job_cond->acct_list, argv[i]+end); set = 1; } else if (!strncasecmp (argv[i], "Associations", MAX(command_len, 2))) { if (!job_cond->associd_list) job_cond->associd_list = list_create(slurm_destroy_char); slurm_addto_char_list(job_cond->associd_list, argv[i]+end); set = 1; } else if (!strncasecmp (argv[i], "Directory", MAX(command_len, 2))) { arch_cond->archive_dir = strip_quotes(argv[i]+end, NULL, 0); set = 1; } else if (!strncasecmp (argv[i], "End", MAX(command_len, 1))) { job_cond->usage_end = parse_time(argv[i]+end, 1); set = 1; } else if (!strncasecmp (argv[i], "Gid", MAX(command_len, 2))) { if (!job_cond->groupid_list) job_cond->groupid_list = list_create(slurm_destroy_char); slurm_addto_char_list(job_cond->groupid_list, argv[i]+end); set = 1; } else if (!strncasecmp (argv[i], "Jobs", MAX(command_len, 1))) { char *end_char = NULL, *start_char = argv[i]+end; slurmdb_selected_step_t *selected_step = NULL; char *dot = NULL; if (!job_cond->step_list) job_cond->step_list = list_create(slurm_destroy_char); while ((end_char = strstr(start_char, ",")) && start_char) { *end_char = 0; while (isspace(*start_char)) start_char++; /* discard whitespace */ if (!(int)*start_char) continue; selected_step = xmalloc( sizeof(slurmdb_selected_step_t)); list_append(job_cond->step_list, selected_step); dot = strstr(start_char, "."); if (dot == NULL) { debug2("No jobstep requested"); selected_step->stepid = NO_VAL; } else { *dot++ = 0; selected_step->stepid = atoi(dot); } selected_step->jobid = atoi(start_char); start_char = end_char + 1; } set = 1; } else if (!strncasecmp (argv[i], "Partitions", MAX(command_len, 2))) { if (!job_cond->partition_list) job_cond->partition_list = list_create(slurm_destroy_char); slurm_addto_char_list(job_cond->partition_list, argv[i]+end); set = 1; } else if (!strncasecmp (argv[i], "PurgeEventAfter", MAX(command_len, 10))) { if ((tmp = slurmdb_parse_purge(argv[i]+end)) == NO_VAL) { exit_code = 1; } else { arch_cond->purge_event |= tmp; set = 1; } } else if (!strncasecmp (argv[i], "PurgeJobAfter", MAX(command_len, 10))) { if ((tmp = slurmdb_parse_purge(argv[i]+end)) == NO_VAL) { exit_code = 1; } else { arch_cond->purge_job |= tmp; set = 1; } } else if (!strncasecmp (argv[i], "PurgeResvAfter", MAX(command_len, 10))) { if ((tmp = slurmdb_parse_purge(argv[i]+end)) == NO_VAL) { exit_code = 1; } else { arch_cond->purge_resv |= tmp; set = 1; } } else if (!strncasecmp (argv[i], "PurgeStepAfter", MAX(command_len, 10))) { if ((tmp = slurmdb_parse_purge(argv[i]+end)) == NO_VAL) { exit_code = 1; } else { arch_cond->purge_step |= tmp; set = 1; } } else if (!strncasecmp (argv[i], "PurgeSuspendAfter", MAX(command_len, 10))) { if ((tmp = slurmdb_parse_purge(argv[i]+end)) == NO_VAL) { exit_code = 1; } else { arch_cond->purge_suspend |= tmp; set = 1; } } else if (!strncasecmp (argv[i], "PurgeEventMonths", MAX(command_len, 6))) { if (get_uint(argv[i]+end, &tmp, "PurgeEventMonths") != SLURM_SUCCESS) { exit_code = 1; } else { arch_cond->purge_event |= tmp; arch_cond->purge_event |= SLURMDB_PURGE_MONTHS; set = 1; } } else if (!strncasecmp (argv[i], "PurgeJobMonths", MAX(command_len, 6))) { if (get_uint(argv[i]+end, &tmp, "PurgeJobMonths") != SLURM_SUCCESS) { exit_code = 1; } else { arch_cond->purge_job |= tmp; arch_cond->purge_job |= SLURMDB_PURGE_MONTHS; set = 1; } } else if (!strncasecmp (argv[i], "PurgeResvMonths", MAX(command_len, 6))) { if (get_uint(argv[i]+end, &tmp, "PurgeResvMonths") != SLURM_SUCCESS) { exit_code = 1; } else { arch_cond->purge_resv |= tmp; arch_cond->purge_resv |= SLURMDB_PURGE_MONTHS; set = 1; } } else if (!strncasecmp (argv[i], "PurgeStepMonths", MAX(command_len, 7))) { if (get_uint(argv[i]+end, &tmp, "PurgeStepMonths") != SLURM_SUCCESS) { exit_code = 1; } else { arch_cond->purge_step |= tmp; arch_cond->purge_step |= SLURMDB_PURGE_MONTHS; set = 1; } } else if (!strncasecmp (argv[i], "PurgeSuspendMonths", MAX(command_len, 7))) { if (get_uint(argv[i]+end, &tmp, "PurgeSuspendMonths") != SLURM_SUCCESS) { exit_code = 1; } else { arch_cond->purge_suspend |= tmp; arch_cond->purge_suspend |= SLURMDB_PURGE_MONTHS; set = 1; } } else if (!strncasecmp (argv[i], "Start", MAX(command_len, 2))) { job_cond->usage_start = parse_time(argv[i]+end, 1); set = 1; } else if (!strncasecmp (argv[i], "Script", MAX(command_len, 2))) { arch_cond->archive_script = strip_quotes(argv[i]+end, NULL, 0); set = 1; } else if (!strncasecmp (argv[i], "Users", MAX(command_len, 1))) { if (!job_cond->userid_list) job_cond->userid_list = list_create(slurm_destroy_char); _addto_uid_char_list(job_cond->userid_list, argv[i]+end); set = 1; } else { exit_code=1; fprintf(stderr, " Unknown condition: %s\n", argv[i]); } } (*start) = i; return set; }
static int _set_res_cond(int *start, int argc, char *argv[], slurmdb_res_cond_t *res_cond, List format_list) { int i; int set = 0; int end = 0; int command_len = 0; if (!res_cond) { error("No res_cond given"); return -1; } 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], "WithDeleted", MAX(command_len, 5))) { res_cond->with_deleted = 1; } else if (!end && !strncasecmp(argv[i], "WithClusters", MAX(command_len, 5))) { res_cond->with_clusters = 1; } else if (!end && !strncasecmp(argv[i], "where", MAX(command_len, 5))) { continue; } else if (!end || !strncasecmp(argv[i], "Names", MAX(command_len, 1))) { if (!res_cond->name_list) { res_cond->name_list = list_create(slurm_destroy_char); } if (slurm_addto_char_list(res_cond->name_list, argv[i]+end)) set = 1; } else if (!end || !strncasecmp(argv[i], "Clusters", MAX(command_len, 1))) { if (!res_cond->cluster_list) { res_cond->cluster_list = list_create(slurm_destroy_char); } slurm_addto_char_list(res_cond->cluster_list, argv[i]+end); if (sacctmgr_validate_cluster_list( res_cond->cluster_list) != SLURM_SUCCESS) { exit_code=1; fprintf(stderr, " Need a valid cluster name to " "add a cluster resource.\n"); } else set = 1; } else if (!strncasecmp(argv[i], "Descriptions", MAX(command_len, 1))) { if (!res_cond->description_list) { res_cond->description_list = list_create(slurm_destroy_char); } if (slurm_addto_char_list( res_cond->description_list, argv[i]+end)) set = 1; } 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], "Ids", MAX(command_len, 1))) { ListIterator itr = NULL; char *temp = NULL; uint32_t id = 0; if (!res_cond->id_list) { res_cond->id_list = list_create(slurm_destroy_char); } if (slurm_addto_char_list(res_cond->id_list, argv[i]+end)) set = 1; /* check to make sure user gave ints here */ itr = list_iterator_create(res_cond->id_list); while ((temp = list_next(itr))) { if (get_uint(temp, &id, "RES ID") != SLURM_SUCCESS) { exit_code = 1; list_delete_item(itr); } } list_iterator_destroy(itr); } else if (!strncasecmp(argv[i], "Manager", MAX(command_len, 2))) { if (!res_cond->manager_list) { res_cond->manager_list = list_create(slurm_destroy_char); } if (slurm_addto_char_list(res_cond->manager_list, argv[i]+end)) set = 1; } else if (!strncasecmp(argv[i], "Server", MAX(command_len, 2))) { if (!res_cond->server_list) { res_cond->server_list = list_create(slurm_destroy_char); } if (slurm_addto_char_list(res_cond->server_list, argv[i]+end)) set = 1; } else { exit_code=1; fprintf(stderr, " Unknown condition: %s\n" " Use keyword 'set' to modify " "SLURM_PRINT_VALUE\n", argv[i]); } } (*start) = i; return set; }
static int _set_res_rec(int *start, int argc, char *argv[], List name_list, List cluster_list, slurmdb_res_rec_t *res) { int i; int set = 0; int end = 0; int command_len = 0; int option = 0; xassert(res); 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], "Resources", MAX(command_len, 1))) { if (name_list) slurm_addto_char_list(name_list, argv[i]+end); } else if (!strncasecmp(argv[i], "Clusters", MAX(command_len, 1))) { if (cluster_list) { slurm_addto_char_list(cluster_list, argv[i]+end); if (sacctmgr_validate_cluster_list( cluster_list) != SLURM_SUCCESS) { exit_code=1; fprintf(stderr, " Need a valid cluster name to " "add a cluster resource.\n"); } } else { exit_code=1; fprintf(stderr, " Can't modify the cluster " "of an resource\n"); } } else if (!strncasecmp(argv[i], "Count", MAX(command_len, 3))) { if (get_uint(argv[i]+end, &res->count, "count") == SLURM_SUCCESS) { set = 1; } } else if (!strncasecmp(argv[i], "Description", MAX(command_len, 1))) { if (!res->description) res->description = strip_quotes(argv[i]+end, NULL, 1); set = 1; } else if (!strncasecmp(argv[i], "Flags", MAX(command_len, 2))) { res->flags = str_2_res_flags(argv[i]+end, option); if (res->flags == SLURMDB_RES_FLAG_NOTSET) { char *tmp_char = slurmdb_res_flags_str( SLURMDB_RES_FLAG_BASE); printf(" Unknown Server Resource flag used " "in:\n '%s'\n" " Valid Server Resource flags are\n" " '%s'\n", argv[i]+end, tmp_char); xfree(tmp_char); exit_code = 1; } else set = 1; } else if (!strncasecmp(argv[i], "Manager", MAX(command_len, 1))) { if (!res->manager) res->manager = strip_quotes(argv[i]+end, NULL, 1); set = 1; } else if (!strncasecmp(argv[i], "PercentAllowed", MAX(command_len, 1))) { /* overload percent_used here */ if (get_uint16(argv[i]+end, &res->percent_used, "PercentAllowed") == SLURM_SUCCESS) { set = 1; } } else if (!strncasecmp(argv[i], "Server", MAX(command_len, 1))) { if (!res->server) { res->server= strip_quotes(argv[i]+end, NULL, 1); } set = 1; } else if (!strncasecmp(argv[i], "Type", MAX(command_len, 1))) { char *temp = strip_quotes(argv[i]+end, NULL, 1); if (!strncasecmp("License", temp, MAX(strlen(temp), 1))) { res->type = SLURMDB_RESOURCE_LICENSE; } else { exit_code=1; fprintf(stderr, " Unknown resource type: '%s' " "Valid resources is License.\n", temp); } } else { exit_code = 1; printf(" Unknown option: %s\n" " Use keyword 'where' to modify condition\n", argv[i]); } } (*start) = i; return set; }
static int _set_cond(int *start, int argc, char **argv, slurmdb_tres_cond_t *tres_cond, List format_list) { int i; int set = 0; int end = 0; int command_len = 0; if (!tres_cond) { exit_code=1; fprintf(stderr, "No tres_cond given"); return -1; } 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 (!xstrncasecmp(argv[i], "Set", MAX(command_len, 3))) { i--; break; } else if (!end && !xstrncasecmp(argv[i], "WithDeleted", MAX(command_len, 5))) { tres_cond->with_deleted = 1; } else if (!end && !xstrncasecmp(argv[i], "where", MAX(command_len, 5))) { continue; } else if (!end || !xstrncasecmp(argv[i], "Type", MAX(command_len, 2))) { if (!tres_cond->type_list) { tres_cond->type_list = list_create(slurm_destroy_char); } if (slurm_addto_char_list( tres_cond->type_list, argv[i]+end)) set = 1; } else if (!xstrncasecmp(argv[i], "Names", MAX(command_len, 1))) { if (!tres_cond->name_list) { tres_cond->name_list = list_create(slurm_destroy_char); } if (slurm_addto_char_list(tres_cond->name_list, argv[i]+end)) set = 1; } else if (!xstrncasecmp(argv[i], "Format", MAX(command_len, 1))) { if (format_list) slurm_addto_char_list(format_list, argv[i]+end); } else if (!xstrncasecmp(argv[i], "Ids", MAX(command_len, 1))) { if (!tres_cond->id_list) { tres_cond->id_list = list_create(slurm_destroy_char); } if (slurm_addto_char_list(tres_cond->id_list, argv[i]+end)) set = 1; } else { exit_code=1; fprintf(stderr, " Unknown condition: %s\n" " Use keyword 'set' to modify value\n", argv[i]); } } (*start) = i; if (set) return 1; return 0; }
static int _set_cond(int *start, int argc, char *argv[], slurmdb_association_cond_t *assoc_cond, List format_list) { int i, end = 0; int set = 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 (!end && !strncasecmp (argv[i], "OnlyDefaults", MAX(command_len, 2))) { assoc_cond->only_defs = 1; set = 1; } else if (!end && !strncasecmp (argv[i], "Tree", MAX(command_len, 4))) { tree_display = 1; } else if (!end && !strncasecmp (argv[i], "WithDeleted", MAX(command_len, 5))) { assoc_cond->with_deleted = 1; } else if (!end && !strncasecmp (argv[i], "WithRawQOSLevel", MAX(command_len, 5))) { assoc_cond->with_raw_qos = 1; } else if (!end && !strncasecmp (argv[i], "WithSubAccounts", MAX(command_len, 5))) { assoc_cond->with_sub_accts = 1; } else if (!end && !strncasecmp (argv[i], "WOPInfo", MAX(command_len, 4))) { assoc_cond->without_parent_info = 1; } else if (!end && !strncasecmp (argv[i], "WOPLimits", MAX(command_len, 4))) { assoc_cond->without_parent_limits = 1; } else if (!end && !strncasecmp (argv[i], "WOLimits", MAX(command_len, 3))) { assoc_cond->without_parent_limits = 1; } else if (!end && !strncasecmp(argv[i], "where", MAX(command_len, 5))) { continue; } else if (!end || !strncasecmp (argv[i], "Ids", MAX(command_len, 1)) || !strncasecmp (argv[i], "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, argv[i]+end); /* 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); } } list_iterator_destroy(itr); set = 1; } else if (!strncasecmp (argv[i], "Format", MAX(command_len, 1))) { if (format_list) slurm_addto_char_list(format_list, argv[i]+end); } else if(!(set = sacctmgr_set_association_cond( assoc_cond, argv[i], argv[i]+end, command_len, option)) || exit_code) { exit_code = 1; fprintf(stderr, " Unknown condition: %s\n", argv[i]); } } (*start) = i; return set; }
static int _set_cond(int *start, int argc, char **argv, slurmdb_job_modify_cond_t *job_cond) { char *next_str; int i; int set = 0; int end = 0; int command_len = 0; if (!job_cond) { error("No job_cond given"); return -1; } job_cond->job_id = NO_VAL; 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], "Set", MAX(command_len, 3))) { i--; break; } else if (!end && !strncasecmp(argv[i], "where", MAX(command_len, 5))) { continue; } else if (!strncasecmp (argv[i], "Cluster", MAX(command_len, 1))) { job_cond->cluster = xstrdup(argv[i]+end); } else if (!strncasecmp (argv[i], "JobID", MAX(command_len, 1))) { job_cond->job_id = (uint32_t) strtol(argv[i]+end, &next_str, 10); if ((job_cond->job_id == 0) || ((next_str[0] != '\0') && (next_str[0] != ' '))) { fprintf(stderr, "Invalid job id %s specified\n", argv[i]+end); exit_code = 1; } else set = 1; } else { exit_code = 1; fprintf(stderr, " Unknown condition: %s\n" " Use keyword 'set' to modify value\n", argv[i]); } } if (!job_cond->cluster) job_cond->cluster = slurm_get_cluster_name(); (*start) = i; return set; }
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], "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 (!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; }
extern int sacctmgr_archive_load(int argc, char *argv[]) { int rc = SLURM_SUCCESS; slurmdb_archive_rec_t *arch_rec = xmalloc(sizeof(slurmdb_archive_rec_t)); int i=0, command_len = 0; struct stat st; for (i=0; i<argc; i++) { int end = parse_option_end(argv[i]); if (!end) command_len=strlen(argv[i]); else { command_len=end-1; if (argv[i][end] == '=') { end++; } } if (!end || !strncasecmp (argv[i], "File", MAX(command_len, 1))) { arch_rec->archive_file = strip_quotes(argv[i]+end, NULL, 0); } else if (!strncasecmp (argv[i], "Insert", MAX(command_len, 2))) { arch_rec->insert = strip_quotes(argv[i]+end, NULL, 1); } else { exit_code=1; fprintf(stderr, " Unknown option: %s\n", argv[i]); } } if (exit_code) { slurmdb_destroy_archive_rec(arch_rec); return SLURM_ERROR; } if (arch_rec->archive_file) { char *fullpath; char cwd[MAXPATHLEN + 1]; int mode = R_OK; if ((getcwd(cwd, MAXPATHLEN)) == NULL) fatal("getcwd failed: %m"); if ((fullpath = search_path(cwd, arch_rec->archive_file, true, mode))) { xfree(arch_rec->archive_file); arch_rec->archive_file = fullpath; } if (stat(arch_rec->archive_file, &st) < 0) { exit_code = errno; fprintf(stderr, " load: Failed to stat %s: %m\n " "Note: For archive load, the file must be on " "the calling host.\n", arch_rec->archive_file); return SLURM_ERROR; } } rc = jobacct_storage_g_archive_load(db_conn, arch_rec); if (rc == SLURM_SUCCESS) { if (commit_check("Would you like to commit changes?")) { acct_storage_g_commit(db_conn, 1); } else { printf(" Changes Discarded\n"); acct_storage_g_commit(db_conn, 0); } } else { exit_code=1; fprintf(stderr, " Problem loading archive file: %s\n", slurm_strerror(rc)); rc = SLURM_ERROR; } slurmdb_destroy_archive_rec(arch_rec); return rc; }
extern int sacctmgr_dump_cluster (int argc, char *argv[]) { slurmdb_user_cond_t user_cond; slurmdb_user_rec_t *user = NULL; slurmdb_hierarchical_rec_t *slurmdb_hierarchical_rec = NULL; slurmdb_association_rec_t *assoc = NULL; slurmdb_association_cond_t assoc_cond; List assoc_list = NULL; List acct_list = NULL; List user_list = NULL; List slurmdb_hierarchical_rec_list = NULL; char *cluster_name = NULL; char *file_name = NULL; char *user_name = NULL; char *line = NULL; int i, command_len = 0; FILE *fd = NULL; char *class_str = NULL; for (i = 0; i < argc; i++) { int end = parse_option_end(argv[i]); if (!end) command_len = strlen(argv[i]); else { command_len = end - 1; if (argv[i][end] == '=') { end++; } } if (!end || !strncasecmp(argv[i], "Cluster", MAX(command_len, 1))) { if (cluster_name) { exit_code = 1; fprintf(stderr, " Can only do one cluster at a time. " "Already doing %s\n", cluster_name); continue; } cluster_name = xstrdup(argv[i]+end); } else if (!strncasecmp(argv[i], "File", MAX(command_len, 1))) { if (file_name) { exit_code = 1; fprintf(stderr, " File name already set to %s\n", file_name); continue; } file_name = xstrdup(argv[i]+end); } else { exit_code = 1; fprintf(stderr, " Unknown option: %s\n", argv[i]); } } if (!cluster_name) { exit_code = 1; fprintf(stderr, " We need a cluster to dump.\n"); xfree(file_name); return SLURM_ERROR; } else { List temp_list = NULL; slurmdb_cluster_cond_t cluster_cond; slurmdb_cluster_rec_t *cluster_rec = NULL; slurmdb_init_cluster_cond(&cluster_cond, 0); cluster_cond.cluster_list = list_create(NULL); list_push(cluster_cond.cluster_list, cluster_name); temp_list = acct_storage_g_get_clusters(db_conn, my_uid, &cluster_cond); FREE_NULL_LIST(cluster_cond.cluster_list); if (!temp_list) { exit_code = 1; fprintf(stderr, " Problem getting clusters from database. " "Contact your admin.\n"); xfree(cluster_name); xfree(file_name); return SLURM_ERROR; } cluster_rec = list_peek(temp_list); if (!cluster_rec) { exit_code = 1; fprintf(stderr, " Cluster %s doesn't exist.\n", cluster_name); xfree(cluster_name); xfree(file_name); FREE_NULL_LIST(temp_list); return SLURM_ERROR; } class_str = get_classification_str(cluster_rec->classification); FREE_NULL_LIST(temp_list); } if (!file_name) { file_name = xstrdup_printf("./%s.cfg", cluster_name); printf(" No filename given, using %s.\n", file_name); } memset(&user_cond, 0, sizeof(slurmdb_user_cond_t)); user_cond.with_coords = 1; user_cond.with_wckeys = 1; user_cond.with_assocs = 1; memset(&assoc_cond, 0, sizeof(slurmdb_association_cond_t)); assoc_cond.without_parent_limits = 1; assoc_cond.with_raw_qos = 1; assoc_cond.cluster_list = list_create(NULL); list_append(assoc_cond.cluster_list, cluster_name); /* this is needed for getting the correct wckeys */ user_cond.assoc_cond = &assoc_cond; user_list = acct_storage_g_get_users(db_conn, my_uid, &user_cond); /* If not running with the DBD assoc_cond.user_list can be set, * which will mess other things up. */ if (assoc_cond.user_list) { FREE_NULL_LIST(assoc_cond.user_list); assoc_cond.user_list = NULL; } /* make sure this person running is an admin */ user_name = uid_to_string(my_uid); if (!(user = sacctmgr_find_user_from_list(user_list, user_name))) { exit_code = 1; fprintf(stderr, " Your uid (%u) is not in the " "accounting system, can't dump cluster.\n", my_uid); FREE_NULL_LIST(assoc_cond.cluster_list); xfree(cluster_name); xfree(file_name); FREE_NULL_LIST(user_list); xfree(user_name); return SLURM_ERROR; } else { if (my_uid != slurm_get_slurm_user_id() && my_uid != 0 && user->admin_level < SLURMDB_ADMIN_SUPER_USER) { exit_code = 1; fprintf(stderr, " Your user does not have sufficient " "privileges to dump clusters.\n"); FREE_NULL_LIST(assoc_cond.cluster_list); xfree(cluster_name); xfree(file_name); FREE_NULL_LIST(user_list); xfree(user_name); return SLURM_ERROR; } } xfree(user_name); /* assoc_cond is set up above */ assoc_list = acct_storage_g_get_associations(db_conn, my_uid, &assoc_cond); FREE_NULL_LIST(assoc_cond.cluster_list); if (!assoc_list) { exit_code = 1; fprintf(stderr, " Problem with query.\n"); xfree(cluster_name); xfree(file_name); return SLURM_ERROR; } else if (!list_count(assoc_list)) { exit_code = 1; fprintf(stderr, " Cluster %s returned nothing.\n", cluster_name); FREE_NULL_LIST(assoc_list); xfree(cluster_name); xfree(file_name); return SLURM_ERROR; } slurmdb_hierarchical_rec_list = slurmdb_get_acct_hierarchical_rec_list( assoc_list); acct_list = acct_storage_g_get_accounts(db_conn, my_uid, NULL); if ((fd = fopen(file_name,"w")) == NULL) { fprintf(stderr, "Can't open file %s, %m\n", file_name); FREE_NULL_LIST(acct_list); FREE_NULL_LIST(assoc_list); xfree(cluster_name); xfree(file_name); FREE_NULL_LIST(slurmdb_hierarchical_rec_list); return SLURM_ERROR; } /* Add header */ if (fprintf(fd, "# To edit this file start with a cluster line " "for the new cluster\n" "# Cluster - cluster_name:MaxNodesPerJob=50\n" "# Followed by Accounts you want in this fashion " "(root is created by default)...\n" "# Parent - root\n" "# Account - cs:MaxNodesPerJob=5:MaxJobs=4:" "MaxProcSecondsPerJob=20:FairShare=399:" "MaxWallDurationPerJob=40:Description='Computer Science':" "Organization='LC'\n" "# Any of the options after a ':' can be left out and " "they can be in any order.\n" "# If you want to add any sub accounts just list the " "Parent THAT HAS ALREADY \n" "# BEEN CREATED before the account line in this " "fashion...\n" "# Parent - cs\n" "# Account - test:MaxNodesPerJob=1:MaxJobs=1:" "MaxProcSecondsPerJob=1:FairShare=1:" "MaxWallDurationPerJob=1:" "Description='Test Account':Organization='Test'\n" "# To add users to a account add a line like this after a " "Parent - line\n" "# User - lipari:MaxNodesPerJob=2:MaxJobs=3:" "MaxProcSecondsPerJob=4:FairShare=1:" "MaxWallDurationPerJob=1\n") < 0) { exit_code = 1; fprintf(stderr, "Can't write to file"); FREE_NULL_LIST(acct_list); FREE_NULL_LIST(assoc_list); xfree(cluster_name); xfree(file_name); FREE_NULL_LIST(slurmdb_hierarchical_rec_list); return SLURM_ERROR; } line = xstrdup_printf("Cluster - %s", cluster_name); if (class_str) xstrfmtcat(line, ":Classification=%s", class_str); slurmdb_hierarchical_rec = list_peek(slurmdb_hierarchical_rec_list); assoc = slurmdb_hierarchical_rec->assoc; if (strcmp(assoc->acct, "root")) { fprintf(stderr, "Root association not on the top it was %s\n", assoc->acct); } else print_file_add_limits_to_line(&line, assoc); if (fprintf(fd, "%s\n", line) < 0) { exit_code = 1; fprintf(stderr, " Can't write to file"); FREE_NULL_LIST(acct_list); FREE_NULL_LIST(assoc_list); xfree(cluster_name); xfree(file_name); xfree(line); FREE_NULL_LIST(slurmdb_hierarchical_rec_list); return SLURM_ERROR; } info("%s", line); xfree(line); print_file_slurmdb_hierarchical_rec_list( fd, slurmdb_hierarchical_rec_list, user_list, acct_list); FREE_NULL_LIST(acct_list); FREE_NULL_LIST(assoc_list); xfree(cluster_name); xfree(file_name); FREE_NULL_LIST(slurmdb_hierarchical_rec_list); fclose(fd); return SLURM_SUCCESS; }
static int _set_cond(int *start, int argc, char *argv[], slurmdb_account_cond_t *acct_cond, List format_list) { int i; int a_set = 0; int u_set = 0; int end = 0; slurmdb_assoc_cond_t *assoc_cond = NULL; int command_len = 0; int option = 0; if (!acct_cond) { exit_code=1; fprintf(stderr, "No acct_cond given"); return -1; } if (!acct_cond->assoc_cond) { acct_cond->assoc_cond = xmalloc(sizeof(slurmdb_assoc_cond_t)); } assoc_cond = acct_cond->assoc_cond; 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], "Set", MAX(command_len, 3))) { i--; break; } else if (!end && !strncasecmp(argv[i], "WithAssoc", MAX(command_len, 5))) { acct_cond->with_assocs = 1; } else if (!end && !strncasecmp(argv[i], "WithCoordinators", MAX(command_len, 5))) { acct_cond->with_coords = 1; } else if (!end && !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", MAX(command_len, 5))) { assoc_cond->with_raw_qos = 1; } 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", MAX(command_len, 1)) || !strncasecmp(argv[i], "Accounts", MAX(command_len, 1)) || !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)) u_set = 1; } else if (!strncasecmp(argv[i], "Descriptions", MAX(command_len, 1))) { if (!acct_cond->description_list) { acct_cond->description_list = list_create(slurm_destroy_char); } if (slurm_addto_char_list(acct_cond->description_list, argv[i]+end)) u_set = 1; } 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], "Organizations", MAX(command_len, 1))) { if (!acct_cond->organization_list) { acct_cond->organization_list = list_create(slurm_destroy_char); } if (slurm_addto_char_list(acct_cond->organization_list, argv[i]+end)) u_set = 1; } else if (!(a_set = sacctmgr_set_assoc_cond( assoc_cond, argv[i], argv[i]+end, command_len, option))) { exit_code=1; fprintf(stderr, " Unknown condition: %s\n" " Use keyword 'set' to modify value\n", argv[i]); } } (*start) = i; if (u_set && a_set) return 3; else if (a_set) return 2; else if (u_set) return 1; return 0; }
static int _set_rec(int *start, int argc, char **argv, List acct_list, List cluster_list, slurmdb_account_rec_t *acct, slurmdb_assoc_rec_t *assoc) { int i; int u_set = 0; int a_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 (!xstrncasecmp(argv[i], "Where", MAX(command_len, 5))) { i--; break; } else if (!end && !xstrncasecmp(argv[i], "set", MAX(command_len, 3))) { continue; } else if (!end || !xstrncasecmp(argv[i], "Accounts", MAX(command_len, 1)) || !xstrncasecmp(argv[i], "Names", MAX(command_len, 1)) || !xstrncasecmp(argv[i], "Acct", MAX(command_len, 4))) { if (acct_list) slurm_addto_char_list(acct_list, argv[i]+end); else { exit_code=1; fprintf(stderr, " Can't modify the name " "of an account\n"); } } else if (!xstrncasecmp(argv[i], "Clusters", MAX(command_len, 1))) { if (cluster_list) slurm_addto_char_list(cluster_list, argv[i]+end); else { exit_code=1; fprintf(stderr, " Can't modify the cluster " "of an account\n"); } } else if (!xstrncasecmp(argv[i], "Description", MAX(command_len, 1))) { acct->description = strip_quotes(argv[i]+end, NULL, 1); u_set = 1; } else if (!xstrncasecmp(argv[i], "Organization", MAX(command_len, 1))) { acct->organization = strip_quotes(argv[i]+end, NULL, 1); u_set = 1; } else if (!xstrncasecmp(argv[i], "RawUsage", MAX(command_len, 7))) { uint32_t usage; if (!assoc) continue; assoc->usage = xmalloc(sizeof(slurmdb_assoc_usage_t)); if (get_uint(argv[i]+end, &usage, "RawUsage") == SLURM_SUCCESS) { assoc->usage->usage_raw = usage; a_set = 1; } } else if (!assoc || (assoc && !(a_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 (u_set && a_set) return 3; else if (a_set) return 2; else if (u_set) return 1; return 0; }
static int _set_rec(int *start, int argc, char **argv, List name_list, slurmdb_federation_rec_t *fed) { 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], "Name", MAX(command_len, 1))) { if (name_list) slurm_addto_char_list(name_list, argv[i]+end); } else if (!fed) { continue; } else if (!strncasecmp (argv[i], "Clusters", MAX(command_len, 2))) { char *name = NULL; ListIterator itr; if (*(argv[i]+end) == '\0' && (option == '+' || option == '-')) { printf(" You didn't specify any clusters to" " %s\n", (option == '-') ? "remove" : "add"); exit_code = 1; break; } List cluster_names = list_create(slurm_destroy_char); if (!slurm_addto_mode_char_list(cluster_names, argv[i]+end, option)) { FREE_NULL_LIST(cluster_names); exit_code = 1; continue; } itr = list_iterator_create(cluster_names); fed->cluster_list = list_create(slurmdb_destroy_cluster_rec); while((name = list_next(itr))) { if (name[0] == '\0') continue; slurmdb_cluster_rec_t *cluster = xmalloc(sizeof(slurmdb_cluster_rec_t)); slurmdb_init_cluster_rec(cluster, 0); cluster->name = xstrdup(name); list_append(fed->cluster_list, cluster); } list_iterator_destroy(itr); FREE_NULL_LIST(cluster_names); set = 1; } else if (!strncasecmp (argv[i], "Flags", MAX(command_len, 2))) { fed->flags = str_2_federation_flags(argv[i]+end, option); if (fed->flags == FEDERATION_FLAG_NOTSET) { char *tmp_char = NULL; fed->flags = INFINITE; fed->flags &= (~FEDERATION_FLAG_NOTSET & ~FEDERATION_FLAG_ADD & ~FEDERATION_FLAG_REMOVE); tmp_char = slurmdb_federation_flags_str( fed->flags); printf(" Unknown federation flag used in:\n" " '%s'\n" " Valid federation flags are\n '%s'\n", argv[i]+end, tmp_char); xfree(tmp_char); exit_code = 1; } else set = 1; } else { exit_code = 1; printf(" Unknown option: %s\n" " Use keyword 'where' to modify condition\n", argv[i]); } } (*start) = i; return set; }