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) {

Reply via email to