Thanks Aaron. This will be in SLURM version 2.2.6. ________________________________________ From: [email protected] [[email protected]] On Behalf Of Aaron Knister [[email protected]] Sent: Friday, May 27, 2011 7:42 AM To: slurm-dev Subject: [slurm-dev] SQUEUE_FORMAT env variable
We're getting ready to implement multifactor priorities and resource limits with QOS. We felt it would be helpful to our users to display the qos for each job in the output of squeue. The easiest way to do this seemed to be to set the SQUEUE_FORMAT environment variable. I noticed that after one sets the SQUEUE_FORMAT variable, the -l and -s options no-longer work which is undesirable for us. This seems to be because SQUEUE_FORMAT has the same effect as providing the -o option on the command line which overrides -l and -s. I've written a patch that moves the SQUEUE_FORMAT env var parsing logic after the opt parsing logic in squeue/opts.c and uses an internal flag which if set by the -l, -o or -s options will prevent the format string from being defined as the value of $SQUEUE_FORMAT, thus allowing -l or -s (as well as -o as expected) to override SQUEUE_FORMAT. I'm interested in any feedback about the patches (good, bad, other approaches). Here's a link to the patch for the 2.1 series: http://userpages.umbc.edu/~aaronk/slurm/patches/squeue_format_env_override_slurm21.patch and the 2.2 series: http://userpages.umbc.edu/~aaronk/slurm/patches/squeue_format_env_override_slurm22.patch I've included the patch for 2.2 below, but included the links above in case gmail converts the taps to spaces. Thanks! -Aaron --- opts.c.orig 2011-05-26 22:33:51.000000000 -0400 +++ opts.c 2011-05-26 22:39:30.000000000 -0400 @@ -93,6 +93,7 @@ parse_command_line( int argc, char* argv[] ) { char *env_val = NULL; + bool override_format_env = false; int opt_char; int option_index; static struct option long_options[] = { @@ -125,8 +126,6 @@ if (getenv("SQUEUE_ALL")) params.all_flag = true; - if ( ( env_val = getenv("SQUEUE_FORMAT") ) ) - params.format = xstrdup(env_val); if ( ( env_val = getenv("SQUEUE_SORT") ) ) params.sort = xstrdup(env_val); if ( ( env_val = getenv("SLURM_CLUSTERS") ) ) { @@ -176,6 +175,7 @@ break; case (int) 'l': params.long_list = true; + override_format_env = true; break; case (int) 'M': if (params.clusters) @@ -202,6 +202,7 @@ case (int) 'o': xfree(params.format); params.format = xstrdup(optarg); + override_format_env = true; break; case (int) 'p': xfree(params.partitions); @@ -223,6 +224,7 @@ _build_step_list(params.steps); } params.step_flag = true; + override_format_env = true; break; case (int) 'S': xfree(params.sort); @@ -261,6 +263,10 @@ } } + if ( override_format_env == false ) + if ( ( env_val = getenv("SQUEUE_FORMAT") ) ) + params.format = xstrdup(env_val); + params.cluster_flags = slurmdb_setup_cluster_flags(); if (optind < argc) { if (params.job_flag) {
