diff --git a/NEWS b/NEWS index c087a88d85dca8e7e63684b2ccba76418f666401..8f4c16a061aa05742e134d921d2b20d07a39a72a 100644 --- a/NEWS +++ b/NEWS @@ -91,8 +91,13 @@ documents those changes that are of interest to users and admins. user's current group, but all groups the user has access to. -- BLUEGENE - Add salloc options to specify images to be loaded (--blrts-image, --linux-image, --mloader-image, and --ramdisk-image). + -- BLUEGENE - In bluegene.conf, permit Groups to be comma separated in addition + to colon separators previously supported. -- sbatch will accept batch script containing "#SLURM" options and advise changed to "#SBATCH". + -- If srun --output or --error specification contains a task number rather + than a file name, send stdout/err from specified task to srun's stdout/err + rather than to a file by the same name as the task's number. * Changes in SLURM 1.2.18 ========================= diff --git a/doc/html/bluegene.shtml b/doc/html/bluegene.shtml index 1ec641242c2e334476452a189286442f5053d34b..a0e92e54145d5342c2fb9791ce5d3e39806eab9f 100644 --- a/doc/html/bluegene.shtml +++ b/doc/html/bluegene.shtml @@ -464,10 +464,10 @@ AltRamDiskImage=/bgl/BlueLight/ppcfloor/bglsys/bin/ramdisk3.elf # Another option for images would be a "You can use anything you like image" * # This allows the user to use any image entered with no security checking -AltBlrtsImage=* Groups=da:adamb -AltLinuxImage=* Groups=da:adamb -AltMloaderImage=* Groups=da:adamb -AltRamDiskImage=* Groups=da:adamb +AltBlrtsImage=* Groups=da,adamb +AltLinuxImage=* Groups=da,adamb +AltMloaderImage=* Groups=da,adamb +AltRamDiskImage=* Groups=da,adamb LayoutMode=STATIC BasePartitionNodeCnt=512 diff --git a/doc/man/man5/bluegene.conf.5 b/doc/man/man5/bluegene.conf.5 index 04355532e69b81574779e45a97be17188b0f61d4..5e0c1df34af0d5544ef346a19988bbeb578a1f64 100644 --- a/doc/man/man5/bluegene.conf.5 +++ b/doc/man/man5/bluegene.conf.5 @@ -65,7 +65,7 @@ There is no default value and this must be specified. \fBAltBlrtsImage\fR Alternative BlrtsImage. This is an optional field only used for mulitple images on a system and should be followed by a Groups= with -the user groups allowed to use this image (i.e. Groups=da:jette) if +the user groups allowed to use this image (i.e. Groups=da,jette) if Groups= is not stated then this image will be able to be used by all groups. You can but as many alternative images as you want in the conf file. @@ -73,7 +73,7 @@ groups. You can but as many alternative images as you want in the conf file. \fBAltLinuxImage\fR Alternative LinuxImage. This is an optional field only used for mulitple images on a system and should be followed by a Groups= with -the user groups allowed to use this image (i.e. Groups=da:jette) if +the user groups allowed to use this image (i.e. Groups=da,jette) if Groups= is not stated then this image will be able to be used by all groups. You can but as many alternative images as you want in the conf file. @@ -81,7 +81,7 @@ groups. You can but as many alternative images as you want in the conf file. \fBAltMloaderImage\fR Alternative MloaderImage. This is an optional field only used for mulitple images on a system and should be followed by a Groups= with -the user groups allowed to use this image (i.e. Groups=da:jette) if +the user groups allowed to use this image (i.e. Groups=da,jette) if Groups= is not stated then this image will be able to be used by all groups. You can but as many alternative images as you want in the conf file. @@ -89,7 +89,7 @@ groups. You can but as many alternative images as you want in the conf file. \fBAltRamDiskImage\fR Alternative RamDiskImage. This is an optional field only used for mulitple images on a system and should be followed by a Groups= with -the user groups allowed to use this image (i.e. Groups=da:jette) if +the user groups allowed to use this image (i.e. Groups=da,jette) if Groups= is not stated then this image will be able to be used by all groups. You can but as many alternative images as you want in the conf file. diff --git a/etc/bluegene.conf.example b/etc/bluegene.conf.example index cc56c650e1055796c35589e71d4a964d644f03fc..a1dfa9fa14eb25f89596356d6a3d4fa3537515aa 100644 --- a/etc/bluegene.conf.example +++ b/etc/bluegene.conf.example @@ -59,10 +59,10 @@ AltRamDiskImage=/bgl/BlueLight/ppcfloor/bglsys/bin/ramdisk3.elf # Another option for images would be a "You can use anything you like image" * # This allows the user to use any image entered with no security checking -AltBlrtsImage=* Groups=da:adamb -AltLinuxImage=* Groups=da:adamb -AltMloaderImage=* Groups=da:adamb -AltRamDiskImage=* Groups=da:adamb +AltBlrtsImage=* Groups=da,adamb +AltLinuxImage=* Groups=da,adamb +AltMloaderImage=* Groups=da,adamb +AltRamDiskImage=* Groups=da,adamb LayoutMode=STATIC BasePartitionNodeCnt=512 diff --git a/src/plugins/select/bluegene/block_allocator/block_allocator.c b/src/plugins/select/bluegene/block_allocator/block_allocator.c index 8b89ba29bf4013734464ecbd4daadf11def1808f..1d62d9e7e4d15dfac7170830d18fb2b231a82783 100644 --- a/src/plugins/select/bluegene/block_allocator/block_allocator.c +++ b/src/plugins/select/bluegene/block_allocator/block_allocator.c @@ -305,7 +305,7 @@ extern int parse_image(void **dest, slurm_parser_enum_t type, s_p_get_string(&tmp, "Groups", tbl); if(tmp) { for(i=0; i<strlen(tmp); i++) { - if(tmp[i] == ':') { + if((tmp[i] == ':') || (tmp[i] == ',')) { image_group = xmalloc(sizeof(image_group_t)); image_group->name = xmalloc(i-j+2); snprintf(image_group->name, @@ -325,7 +325,7 @@ extern int parse_image(void **dest, slurm_parser_enum_t type, snprintf(image_group->name, (i-j)+1, "%s", tmp+j); image_group->gid = gid_from_string(image_group->name); if (image_group->gid == (gid_t) -1) { - error("Invalid bluegene.conf parameter Groups=%s", + fatal("Invalid bluegene.conf parameter Groups=%s", image_group->name); } else { debug3("adding group %s %d", image_group->name, diff --git a/src/srun/srun.c b/src/srun/srun.c index 819bc75c89f3a5831b0845035444d820c67479de..471ff42d3d04fd3b687bd79515daaa881759aa26 100644 --- a/src/srun/srun.c +++ b/src/srun/srun.c @@ -757,7 +757,7 @@ _set_stdio_fds(srun_job_t *job, slurm_step_io_fds_t *cio_fds) * create stdin file descriptor */ if (_is_local_file(job->ifname)) { - if (job->ifname->name == NULL || job->ifname->taskid != -1) { + if ((job->ifname->name == NULL) || (job->ifname->taskid != -1)) { cio_fds->in.fd = STDIN_FILENO; } else { cio_fds->in.fd = open(job->ifname->name, O_RDONLY); @@ -780,7 +780,7 @@ _set_stdio_fds(srun_job_t *job, slurm_step_io_fds_t *cio_fds) * create stdout file descriptor */ if (_is_local_file(job->ofname)) { - if (job->ofname->name == NULL) { + if ((job->ofname->name == NULL) || (job->ofname->taskid != -1)) { cio_fds->out.fd = STDOUT_FILENO; } else { cio_fds->out.fd = open(job->ofname->name, @@ -804,7 +804,7 @@ _set_stdio_fds(srun_job_t *job, slurm_step_io_fds_t *cio_fds) cio_fds->err.fd = cio_fds->out.fd; cio_fds->err.taskid = cio_fds->out.taskid; } else if (_is_local_file(job->efname)) { - if (job->efname->name == NULL) { + if ((job->efname->name == NULL) || (job->efname->taskid != -1)) { cio_fds->err.fd = STDERR_FILENO; } else { cio_fds->err.fd = open(job->efname->name, diff --git a/testsuite/expect/README b/testsuite/expect/README index de718e7e2068a1a479e6933d89bd2181f77fe5b4..a06b7ddfe2c9d4f517454db425166544b9f07c4e 100644 --- a/testsuite/expect/README +++ b/testsuite/expect/README @@ -105,8 +105,8 @@ test1.19 Test srun stdout/err file name formatting (--output and --error options with %j, %J, %n, %s and %t specifications). test1.20 Test srun stdout/err disabling (--output and --error options with argument of "none"). -test1.21 Test srun stdin routing to specific task (--input option with - numeric argument). +test1.21 Test srun stdin/out routing with specific task number (--input + and --output options with numeric argument). test1.22 Confirm that a job executes with various launch thread fanouts (--threads option). test1.23 Verify node configuration specification (--mem, --mincpus, and diff --git a/testsuite/expect/test1.21 b/testsuite/expect/test1.21 index 8e2c1efa67bcfe9b8b91df5fc04d44cd233c3c6a..e920d7766a0789c2149b13aee632834025068ee9 100755 --- a/testsuite/expect/test1.21 +++ b/testsuite/expect/test1.21 @@ -1,14 +1,14 @@ #!/usr/bin/expect ############################################################################ # Purpose: Test of SLURM functionality -# Test srun stdin routing to specific task (--input option with -# numeric argument). +# Test srun stdin/out routing with specific task number (--input +# and --output options with numeric argument). # # Output: "TEST: #.#" followed by "SUCCESS" if test was successful, OR # "FAILURE: ..." otherwise with an explanation of the failure, OR # anything else indicates a failure mode that must be investigated. ############################################################################ -# Copyright (C) 2002 The Regents of the University of California. +# Copyright (C) 2002-2007 The Regents of the University of California. # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). # Written by Morris Jette <jette1@llnl.gov> # UCRL-CODE-226842. @@ -75,9 +75,46 @@ expect { wait } } +if {$matches != 1} { + send_user "\nFAILURE: stdin to specific task_id failed\n" + set exit_code 1 +} +if {$exit_code == 0} { + send_user "\nSo far... stdin to specific task worked fine\n\n\n" +} +# +# Spawn program to print task number, we only expect to see output from task 2 +# +set job_id 0 +set matches 0 +set srun_pid [spawn $srun --output=$task_id -N1 -n10 -O -v env] +expect { + -re "launching ($number).0 on host" { + set job_id $expect_out(1,string) + exp_continue + } + -re "SLURM_PROCID=($number)" { + set proc_id $expect_out(1,string) + if {$task_id == $proc_id} { + incr matches + } else { + send_user "\nFAILURE: wrong task_id responded\n" + set exit_code 1 + } + exp_continue + } + timeout { + send_user "\nFAILURE: srun not responding\n" + slow_kill $srun_pid + set exit_code 1 + } + eof { + wait + } +} if {$matches != 1} { - send_user "\nFAILURE: specific task_id failed to respond\n" + send_user "\nFAILURE: stdout from specific task_id failed\n" set exit_code 1 } diff --git a/testsuite/expect/test1.89 b/testsuite/expect/test1.89 index da1a4aa8501a363fc6bc6161d6449665d7230cad..1d146bdc8e54d062f6ee6244b1d758f1af2556f1 100755 --- a/testsuite/expect/test1.89 +++ b/testsuite/expect/test1.89 @@ -481,6 +481,9 @@ expect { if {$exit_code == 0} { exec $bin_rm -f $file_prog send_user "\nSUCCESS\n" +} else { + send_user "\nNOTE: This test can fail if the node configuration in slurm.conf \n" + send_user " (sockets, cores, threads) differs from the actual configuration\n" } exit $exit_code