diff --git a/src/common/slurm_protocol_defs.c b/src/common/slurm_protocol_defs.c index 870c1fa916b801872ae2b67423ae4c207761e351..8b3e3ffa1bd21759afb60c093bfb5928b619b159 100644 --- a/src/common/slurm_protocol_defs.c +++ b/src/common/slurm_protocol_defs.c @@ -937,6 +937,34 @@ char *job_state_string_compact(uint16_t inx) } } +static inline bool _job_name_test(int state_num, const char *state_name) +{ + if (!strcasecmp(state_name, job_state_string(state_num)) || + !strcasecmp(state_name, job_state_string_compact(state_num))) { + return true; + } + return false; +} + +int job_state_num(const char *state_name) +{ + int i; + + for (i=0; i<JOB_END; i++) { + if (_job_name_test(i, state_name)) + return i; + } + + if (_job_name_test(JOB_COMPLETING, state_name)) + return JOB_COMPLETING; + if (_job_name_test(JOB_COMPLETING, state_name)) + return JOB_COMPLETING; +// if (_job_name_test(JOB_RESIZING, state_name)) +// return JOB_RESIZING; + + return -1; +} + extern char *reservation_flags_string(uint16_t flags) { char *flag_str = xstrdup(""); diff --git a/src/common/slurm_protocol_defs.h b/src/common/slurm_protocol_defs.h index af9614dc3d98501f6d09203aa646bae2fa4e30bb..9dc25a05ff5173554325f39bf22b75c031706d8b 100644 --- a/src/common/slurm_protocol_defs.h +++ b/src/common/slurm_protocol_defs.h @@ -1050,6 +1050,7 @@ extern uint32_t slurm_get_return_code(slurm_msg_type_t type, void *data); extern char *job_reason_string(enum job_state_reason inx); extern char *job_state_string(uint16_t inx); extern char *job_state_string_compact(uint16_t inx); +extern int job_state_num(const char *state_name); extern char *node_state_string(uint16_t inx); extern char *node_state_string_compact(uint16_t inx); extern void private_data_string(uint16_t private_data, char *str, int str_len); diff --git a/src/sacct/options.c b/src/sacct/options.c index faf7da43c2a9aeae5a63cc7d95341e290b30756d..922771b22237eabc23f95017a2be1c65b72612c4 100644 --- a/src/sacct/options.c +++ b/src/sacct/options.c @@ -214,7 +214,7 @@ static int _addto_state_char_list(List char_list, char *names) if((i-start) > 0) { name = xmalloc((i-start+1)); memcpy(name, names+start, (i-start)); - c = decode_state_char(name); + c = job_state_num(name); if (c == -1) fatal("unrecognized job " "state value"); @@ -247,7 +247,7 @@ static int _addto_state_char_list(List char_list, char *names) if((i-start) > 0) { name = xmalloc((i-start)+1); memcpy(name, names+start, (i-start)); - c = decode_state_char(name); + c = job_state_num(name); if (c == -1) fatal("unrecognized job state value"); xfree(name); @@ -510,28 +510,6 @@ void _init_params() params.job_cond->without_usage_truncation = 1; } -int decode_state_char(char *state) -{ - if (!strncasecmp(state, "p", 1)) - return JOB_PENDING; /* we should never see this */ - else if (!strncasecmp(state, "r", 1)) - return JOB_RUNNING; - else if (!strncasecmp(state, "su", 1)) - return JOB_SUSPENDED; - else if (!strncasecmp(state, "cd", 2)) - return JOB_COMPLETE; - else if (!strncasecmp(state, "ca", 2)) - return JOB_CANCELLED; - else if (!strncasecmp(state, "f", 1)) - return JOB_FAILED; - else if (!strncasecmp(state, "to", 1)) - return JOB_TIMEOUT; - else if (!strncasecmp(state, "nf", 1)) - return JOB_NODE_FAIL; - else - return -1; // unknown -} - int get_data(void) { slurmdb_job_rec_t *job = NULL; diff --git a/src/sacct/sacct.h b/src/sacct/sacct.h index 894fc5f41ae3728b8da1e16a926806d81f579532..edf77254c959ff2d8087189bcc7487aaef459663 100644 --- a/src/sacct/sacct.h +++ b/src/sacct/sacct.h @@ -182,8 +182,6 @@ void aggregate_stats(slurmdb_stats_t *dest, slurmdb_stats_t *from); void print_fields(type_t type, void *object); /* options.c */ -int decode_state_char(char *state); -char *decode_state_int(int state); int get_data(void); void parse_command_line(int argc, char **argv); void do_dump(void); diff --git a/src/scancel/opt.c b/src/scancel/opt.c index fb55ca5f33aa0ba567afa366d74cf302f7faf1f6..45a37a2929c221e1b5be52edeb975a5bfcd70d91 100644 --- a/src/scancel/opt.c +++ b/src/scancel/opt.c @@ -153,35 +153,20 @@ int initialize_and_process_args(int argc, char *argv[]) static uint16_t _xlate_state_name(const char *state_name, bool env_var) { - enum job_states i; + int i = job_state_num(state_name); - for (i=0; i<JOB_END; i++) { - if ((strcasecmp(state_name,job_state_string(i)) == 0) || - (strcasecmp(state_name,job_state_string_compact(i)) == 0)){ - return i; - } - } - if ((strcasecmp(state_name, - job_state_string(JOB_COMPLETING)) == 0) || - (strcasecmp(state_name, - job_state_string_compact(JOB_COMPLETING)) == 0)) { - return JOB_COMPLETING; - } - if ((strcasecmp(state_name, - job_state_string(JOB_CONFIGURING)) == 0) || - (strcasecmp(state_name, - job_state_string_compact(JOB_CONFIGURING)) == 0)) { - return JOB_CONFIGURING; - } + if (i >= 0) + return (uint16_t) i; - if (env_var) + if (env_var) { fprintf(stderr, "Unrecognized SCANCEL_STATE value: %s\n", state_name); - else + } else { fprintf(stderr, "Invalid job state specified: %s\n", state_name); - - fprintf (stderr, "Valid job states are PENDING, RUNNING, and SUSPENDED\n"); + } + fprintf(stderr, + "Valid job states are PENDING, RUNNING, and SUSPENDED\n"); exit (1); } diff --git a/src/squeue/opts.c b/src/squeue/opts.c index f611aa798ef6d846f1f6a6b7f44acdfca88c9ed8..f0c757a7ccaf008a6e46d163a4edc36415cc6dd9 100644 --- a/src/squeue/opts.c +++ b/src/squeue/opts.c @@ -379,24 +379,8 @@ _parse_state( char* str, enum job_states* states ) int i; char *state_names; - for (i = 0; i<JOB_END; i++) { - if (strcasecmp (job_state_string(i), str) == 0) { - *states = i; - return SLURM_SUCCESS; - } - if (strcasecmp (job_state_string_compact(i), str) == 0) { - *states = i; - return SLURM_SUCCESS; - } - } - if ((strcasecmp(job_state_string(JOB_COMPLETING), str) == 0) || - (strcasecmp(job_state_string_compact(JOB_COMPLETING),str) == 0)) { - *states = JOB_COMPLETING; - return SLURM_SUCCESS; - } - if ((strcasecmp(job_state_string(JOB_CONFIGURING), str) == 0) || - (strcasecmp(job_state_string_compact(JOB_CONFIGURING),str) == 0)) { - *states = JOB_CONFIGURING; + if ((i = job_state_num(str)) >= 0) { + *states = i; return SLURM_SUCCESS; }