diff --git a/META b/META index 04e43caa0b8bc724af77abf56f88721ac6a364cc..4221e7c1d64c8bec4aa3ff736c074b249f440ff1 100644 --- a/META +++ b/META @@ -3,9 +3,9 @@ Api_revision: 0 Major: 2 Meta: 1 - Micro: 5 + Micro: 7 Minor: 0 Name: slurm Release: 1 Release_tags: dist - Version: 2.0.5 + Version: 2.0.7 diff --git a/NEWS b/NEWS index 55e1b1b0d5264347db3d4a40346d77f53182a8cf..7ab950bb3e501e28e1af5ca18267bd8c41e7bb2b 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,47 @@ This file describes changes in recent versions of SLURM. It primarily documents those changes that are of interest to users and admins. +* Changes in SLURM 2.0.7 +======================== + -- Fix bug in select/cons_res when nodes are configured in more than one + partition and those partitions have different priorities and sched/gang + is not configured. CPUs were previously over-allocated. + -- Fix core of smap when specifying -i option with invalid argument. + -- Fix issue when using srun --test-only to not put an entry of test + job into accounting. + -- For OpenMPI use of SLURM reserved ports. If any of the tasks fails to + acquire a reserved port and has an exit code of 108 then srun will + kill all remaining tasks and respawn the tasks. Previous code waited + for tasks to exit. + -- MySQL plugin - When doing archiving we now get a correct end time. + Previously it would grab an extra day to archive. + -- BLUEGENE - Handle initial state correctly, previously was setting initial + state to IDLE if UNKNOWN which would make it not set a registration + message to accounting, which could lead to nodes not being listed as up + when they really were. + -- Fixed buffer size issue with scontrol show hostlist. + -- Fixed issue with copy in smap -Dc previously command wouldn't work. + -- BLUEGENE - Update documentation about small blocks in the bluegene.conf + file. + -- In sched/wiki plugin (for Maui) fix possible message truncation on very + large cluster. + -- BLUEGENE - Fix for handling undocumented Deallocating to Configuring to + Free block transition state. + -- BLUEGENE - Fix for overlap mode loading blocks when midplane is in an + error state. + -- Add range check for SuspendTime configuration parameter. + -- Moved unzipped python-hostname tarball out and the tarball in. + -- BLUEGENE - Patched memory leak when running state test. + -- BLUEGENE - fixed slow down generated by slow call rm_get_BG + and polling thread. + +* Changes in SLURM 2.0.6 +======================== + -- Fixed seg fault when "scontrol listpids" is invoked for a specific job step + on a node on which a stepd is not running. + -- Fix bug in sched/backfill which could result in invalid memory reference + when trying to schedule jobs submitted with --exclude option. + * Changes in SLURM 2.0.5 ======================== -- BLUEGENE - Added support for emulating systems with a X-dimension of 4. @@ -64,7 +105,7 @@ documents those changes that are of interest to users and admins. -- BLUEGENE - Added SLURM_BG_NUM_NODES with cnode count of allocation, SLURM_JOB_NUM_NODES represents midplane counts until 2.1. -- BLUEGENE - Added fix for if a block is in error state and the midplane - containning the block is also set to drain/down. This previously + containing the block is also set to drain/down. This previously prevented dynamic creation of new blocks when this state was present. -- Fixed bug where a users association limits were not enforced, only parent limits were being enforced. @@ -4315,4 +4356,4 @@ documents those changes that are of interest to users and admins. -- Change directory to /tmp in slurmd if daemonizing. -- Logfiles are reopened on reconfigure. -$Id: NEWS 18691 2009-09-11 22:41:00Z jette $ +$Id: NEWS 18901 2009-10-14 22:34:30Z da $ diff --git a/configure b/configure index 8545d4906737e150f4c000fc2f9bc932eec4f6fa..00457ede222d8c9fdb5ca4aeae5510dc12795f0f 100755 --- a/configure +++ b/configure @@ -23644,7 +23644,7 @@ fi -ac_config_files="$ac_config_files Makefile config.xml auxdir/Makefile contribs/Makefile contribs/perlapi/Makefile contribs/perlapi/libslurm-perl/Makefile.PL contribs/torque/Makefile contribs/phpext/Makefile contribs/phpext/slurm_php/config.m4 contribs/python/Makefile contribs/python/hostlist/Makefile contribs/python/hostlist/test/Makefile contribs/slurmdb-direct/Makefile src/Makefile src/api/Makefile src/common/Makefile src/database/Makefile src/sacct/Makefile src/sacctmgr/Makefile src/sreport/Makefile src/sstat/Makefile src/sshare/Makefile src/salloc/Makefile src/sbatch/Makefile src/sattach/Makefile src/sprio/Makefile src/srun/Makefile src/srun_cr/Makefile src/slurmd/Makefile src/slurmd/slurmd/Makefile src/slurmd/slurmstepd/Makefile src/slurmdbd/Makefile src/slurmctld/Makefile src/sbcast/Makefile src/scontrol/Makefile src/scancel/Makefile src/squeue/Makefile src/sinfo/Makefile src/smap/Makefile src/strigger/Makefile src/sview/Makefile src/plugins/Makefile src/plugins/accounting_storage/Makefile src/plugins/accounting_storage/filetxt/Makefile src/plugins/accounting_storage/mysql/Makefile src/plugins/accounting_storage/pgsql/Makefile src/plugins/accounting_storage/none/Makefile src/plugins/accounting_storage/slurmdbd/Makefile src/plugins/auth/Makefile src/plugins/auth/authd/Makefile src/plugins/auth/munge/Makefile src/plugins/auth/none/Makefile src/plugins/checkpoint/Makefile src/plugins/checkpoint/aix/Makefile src/plugins/checkpoint/none/Makefile src/plugins/checkpoint/ompi/Makefile src/plugins/checkpoint/xlch/Makefile src/plugins/checkpoint/blcr/Makefile src/plugins/checkpoint/blcr/cr_checkpoint.sh src/plugins/checkpoint/blcr/cr_restart.sh src/plugins/crypto/Makefile src/plugins/crypto/munge/Makefile src/plugins/crypto/openssl/Makefile src/plugins/jobacct_gather/Makefile src/plugins/jobacct_gather/linux/Makefile src/plugins/jobacct_gather/aix/Makefile src/plugins/jobacct_gather/none/Makefile src/plugins/jobcomp/Makefile src/plugins/jobcomp/filetxt/Makefile src/plugins/jobcomp/none/Makefile src/plugins/jobcomp/script/Makefile src/plugins/jobcomp/mysql/Makefile src/plugins/jobcomp/pgsql/Makefile src/plugins/priority/Makefile src/plugins/priority/basic/Makefile src/plugins/priority/multifactor/Makefile src/plugins/proctrack/Makefile src/plugins/proctrack/aix/Makefile src/plugins/proctrack/pgid/Makefile src/plugins/proctrack/linuxproc/Makefile src/plugins/proctrack/rms/Makefile src/plugins/proctrack/sgi_job/Makefile src/plugins/sched/Makefile src/plugins/sched/backfill/Makefile src/plugins/sched/builtin/Makefile src/plugins/sched/gang/Makefile src/plugins/sched/hold/Makefile src/plugins/sched/wiki/Makefile src/plugins/sched/wiki2/Makefile src/plugins/select/Makefile src/plugins/select/bluegene/Makefile src/plugins/select/bluegene/block_allocator/Makefile src/plugins/select/bluegene/plugin/Makefile src/plugins/select/cons_res/Makefile src/plugins/select/linear/Makefile src/plugins/switch/Makefile src/plugins/switch/elan/Makefile src/plugins/switch/none/Makefile src/plugins/switch/federation/Makefile src/plugins/mpi/Makefile src/plugins/mpi/mpich1_p4/Makefile src/plugins/mpi/mpich1_shmem/Makefile src/plugins/mpi/mpichgm/Makefile src/plugins/mpi/mpichmx/Makefile src/plugins/mpi/mvapich/Makefile src/plugins/mpi/lam/Makefile src/plugins/mpi/none/Makefile src/plugins/mpi/openmpi/Makefile src/plugins/task/Makefile src/plugins/task/affinity/Makefile src/plugins/task/none/Makefile src/plugins/topology/Makefile src/plugins/topology/3d_torus/Makefile src/plugins/topology/none/Makefile src/plugins/topology/tree/Makefile doc/Makefile doc/man/Makefile doc/html/Makefile doc/html/configurator.html testsuite/Makefile testsuite/expect/Makefile testsuite/slurm_unit/Makefile testsuite/slurm_unit/api/Makefile testsuite/slurm_unit/api/manual/Makefile testsuite/slurm_unit/common/Makefile testsuite/slurm_unit/slurmctld/Makefile testsuite/slurm_unit/slurmd/Makefile testsuite/slurm_unit/slurmdbd/Makefile" +ac_config_files="$ac_config_files Makefile config.xml auxdir/Makefile contribs/Makefile contribs/perlapi/Makefile contribs/perlapi/libslurm-perl/Makefile.PL contribs/torque/Makefile contribs/phpext/Makefile contribs/phpext/slurm_php/config.m4 contribs/python/Makefile contribs/slurmdb-direct/Makefile src/Makefile src/api/Makefile src/common/Makefile src/database/Makefile src/sacct/Makefile src/sacctmgr/Makefile src/sreport/Makefile src/sstat/Makefile src/sshare/Makefile src/salloc/Makefile src/sbatch/Makefile src/sattach/Makefile src/sprio/Makefile src/srun/Makefile src/srun_cr/Makefile src/slurmd/Makefile src/slurmd/slurmd/Makefile src/slurmd/slurmstepd/Makefile src/slurmdbd/Makefile src/slurmctld/Makefile src/sbcast/Makefile src/scontrol/Makefile src/scancel/Makefile src/squeue/Makefile src/sinfo/Makefile src/smap/Makefile src/strigger/Makefile src/sview/Makefile src/plugins/Makefile src/plugins/accounting_storage/Makefile src/plugins/accounting_storage/filetxt/Makefile src/plugins/accounting_storage/mysql/Makefile src/plugins/accounting_storage/pgsql/Makefile src/plugins/accounting_storage/none/Makefile src/plugins/accounting_storage/slurmdbd/Makefile src/plugins/auth/Makefile src/plugins/auth/authd/Makefile src/plugins/auth/munge/Makefile src/plugins/auth/none/Makefile src/plugins/checkpoint/Makefile src/plugins/checkpoint/aix/Makefile src/plugins/checkpoint/none/Makefile src/plugins/checkpoint/ompi/Makefile src/plugins/checkpoint/xlch/Makefile src/plugins/checkpoint/blcr/Makefile src/plugins/checkpoint/blcr/cr_checkpoint.sh src/plugins/checkpoint/blcr/cr_restart.sh src/plugins/crypto/Makefile src/plugins/crypto/munge/Makefile src/plugins/crypto/openssl/Makefile src/plugins/jobacct_gather/Makefile src/plugins/jobacct_gather/linux/Makefile src/plugins/jobacct_gather/aix/Makefile src/plugins/jobacct_gather/none/Makefile src/plugins/jobcomp/Makefile src/plugins/jobcomp/filetxt/Makefile src/plugins/jobcomp/none/Makefile src/plugins/jobcomp/script/Makefile src/plugins/jobcomp/mysql/Makefile src/plugins/jobcomp/pgsql/Makefile src/plugins/priority/Makefile src/plugins/priority/basic/Makefile src/plugins/priority/multifactor/Makefile src/plugins/proctrack/Makefile src/plugins/proctrack/aix/Makefile src/plugins/proctrack/pgid/Makefile src/plugins/proctrack/linuxproc/Makefile src/plugins/proctrack/rms/Makefile src/plugins/proctrack/sgi_job/Makefile src/plugins/sched/Makefile src/plugins/sched/backfill/Makefile src/plugins/sched/builtin/Makefile src/plugins/sched/gang/Makefile src/plugins/sched/hold/Makefile src/plugins/sched/wiki/Makefile src/plugins/sched/wiki2/Makefile src/plugins/select/Makefile src/plugins/select/bluegene/Makefile src/plugins/select/bluegene/block_allocator/Makefile src/plugins/select/bluegene/plugin/Makefile src/plugins/select/cons_res/Makefile src/plugins/select/linear/Makefile src/plugins/switch/Makefile src/plugins/switch/elan/Makefile src/plugins/switch/none/Makefile src/plugins/switch/federation/Makefile src/plugins/mpi/Makefile src/plugins/mpi/mpich1_p4/Makefile src/plugins/mpi/mpich1_shmem/Makefile src/plugins/mpi/mpichgm/Makefile src/plugins/mpi/mpichmx/Makefile src/plugins/mpi/mvapich/Makefile src/plugins/mpi/lam/Makefile src/plugins/mpi/none/Makefile src/plugins/mpi/openmpi/Makefile src/plugins/task/Makefile src/plugins/task/affinity/Makefile src/plugins/task/none/Makefile src/plugins/topology/Makefile src/plugins/topology/3d_torus/Makefile src/plugins/topology/none/Makefile src/plugins/topology/tree/Makefile doc/Makefile doc/man/Makefile doc/html/Makefile doc/html/configurator.html testsuite/Makefile testsuite/expect/Makefile testsuite/slurm_unit/Makefile testsuite/slurm_unit/api/Makefile testsuite/slurm_unit/api/manual/Makefile testsuite/slurm_unit/common/Makefile testsuite/slurm_unit/slurmctld/Makefile testsuite/slurm_unit/slurmd/Makefile testsuite/slurm_unit/slurmdbd/Makefile" cat >confcache <<\_ACEOF @@ -24800,8 +24800,6 @@ do "contribs/phpext/Makefile") CONFIG_FILES="$CONFIG_FILES contribs/phpext/Makefile" ;; "contribs/phpext/slurm_php/config.m4") CONFIG_FILES="$CONFIG_FILES contribs/phpext/slurm_php/config.m4" ;; "contribs/python/Makefile") CONFIG_FILES="$CONFIG_FILES contribs/python/Makefile" ;; - "contribs/python/hostlist/Makefile") CONFIG_FILES="$CONFIG_FILES contribs/python/hostlist/Makefile" ;; - "contribs/python/hostlist/test/Makefile") CONFIG_FILES="$CONFIG_FILES contribs/python/hostlist/test/Makefile" ;; "contribs/slurmdb-direct/Makefile") CONFIG_FILES="$CONFIG_FILES contribs/slurmdb-direct/Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "src/api/Makefile") CONFIG_FILES="$CONFIG_FILES src/api/Makefile" ;; diff --git a/configure.ac b/configure.ac index ae2e82c4ece7e4c04467f4020c81c93cb7a63fcc..6f4899019162e11192554f42ccd3ab7579e87606 100644 --- a/configure.ac +++ b/configure.ac @@ -1,4 +1,4 @@ -# $Id: configure.ac 16996 2009-03-24 20:21:41Z jette $ +# $Id: configure.ac 18850 2009-10-08 22:23:44Z da $ # This file is to be processed with autoconf to generate a configure script dnl Prologue @@ -286,8 +286,6 @@ AC_CONFIG_FILES([Makefile contribs/phpext/Makefile contribs/phpext/slurm_php/config.m4 contribs/python/Makefile - contribs/python/hostlist/Makefile - contribs/python/hostlist/test/Makefile contribs/slurmdb-direct/Makefile src/Makefile src/api/Makefile diff --git a/contribs/python/Makefile.am b/contribs/python/Makefile.am index 60fb9a0773af421aec5c0d79f4f6cb49c5747925..741f8508560924ad28c333eab697148b64166adc 100644 --- a/contribs/python/Makefile.am +++ b/contribs/python/Makefile.am @@ -1 +1 @@ -SUBDIRS = hostlist +SUBDIRS = diff --git a/contribs/python/Makefile.in b/contribs/python/Makefile.in index 77d7279115f72d479108a3bf11fd1a5959a20a83..fd738022623ff0e3b0f4ac377393acaeea286771 100644 --- a/contribs/python/Makefile.in +++ b/contribs/python/Makefile.in @@ -268,7 +268,7 @@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ -SUBDIRS = hostlist +SUBDIRS = all: all-recursive .SUFFIXES: diff --git a/contribs/python/hostlist/CHANGES b/contribs/python/hostlist/CHANGES deleted file mode 100644 index 86f30ec84aba058c2e47355dd23698b7d3f95296..0000000000000000000000000000000000000000 --- a/contribs/python/hostlist/CHANGES +++ /dev/null @@ -1,46 +0,0 @@ -Version 1.5 (2009-02-22) - - Make each "-" on the command line count as one hostlist argument. - If multiple hostslists are given on stdin they are combined to a - union hostlist before being used in the way requested by the - options. - - Add hostgrep utility to search for lines matching a hostlist. - - Make the build system (used when building tar.gz and RPMs from the - source code held in git) smarter. - -Version 1.4 (2008-12-28) - - Support Python 3. - - Import reduce from functools if possible. - Use Python 2/3 installation trick from .../Demo/distutils/test2to3 - -Version 1.3 (2008-09-30) - - Add -s/--separator, -p/--prepend, -a/--append and --version - options contributed by Pär Andersson at NSC. - - Let -e be the short form of the --expand option (-w is now - deprecated). - - Add a manual page for hostlist(1). - -Version 1.2 (2008-09-18) - - Add "--prefix /usr" in the installation script of the spec file - (needed on SUSE Linux where the default is /usr/local). - -Version 1.1 (2008-09-17) - - Move the command line utility to a separate 'hostlist' command. - - Provide a python-hostlist.spec file to build RPM packages. - Inspired by a contribution by Dr. Holger Obermaier at - Rechenzentrum, Universität Karlsruhe. - -Version 1.0 (2008-07-25) - - Initial version. - diff --git a/contribs/python/hostlist/COPYING b/contribs/python/hostlist/COPYING deleted file mode 100644 index d511905c1647a1e311e8b20d5930a37a9c2531cd..0000000000000000000000000000000000000000 --- a/contribs/python/hostlist/COPYING +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - <one line to give the program's name and a brief idea of what it does.> - Copyright (C) <year> <name of author> - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - <signature of Ty Coon>, 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/contribs/python/hostlist/Makefile.am b/contribs/python/hostlist/Makefile.am deleted file mode 100644 index 72676f515afa567c6bb725de453fd7482d20a3dc..0000000000000000000000000000000000000000 --- a/contribs/python/hostlist/Makefile.am +++ /dev/null @@ -1,10 +0,0 @@ -SUBDIRS = test - -EXTRA_DIST = \ - CHANGES \ - COPYING \ - hostlist.py \ - PKG-INFO \ - python-hostlist.spec \ - README \ - setup.py diff --git a/contribs/python/hostlist/Makefile.in b/contribs/python/hostlist/Makefile.in deleted file mode 100644 index d16ae1485f39fa85ef63d3da4bedc70329f193e3..0000000000000000000000000000000000000000 --- a/contribs/python/hostlist/Makefile.in +++ /dev/null @@ -1,596 +0,0 @@ -# Makefile.in generated by automake 1.10.2 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -target_triplet = @target@ -subdir = contribs/python/hostlist -DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - COPYING -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.m4 \ - $(top_srcdir)/auxdir/libtool.m4 \ - $(top_srcdir)/auxdir/ltoptions.m4 \ - $(top_srcdir)/auxdir/ltsugar.m4 \ - $(top_srcdir)/auxdir/ltversion.m4 \ - $(top_srcdir)/auxdir/lt~obsolete.m4 \ - $(top_srcdir)/auxdir/slurm.m4 \ - $(top_srcdir)/auxdir/x_ac__system_configuration.m4 \ - $(top_srcdir)/auxdir/x_ac_affinity.m4 \ - $(top_srcdir)/auxdir/x_ac_aix.m4 \ - $(top_srcdir)/auxdir/x_ac_blcr.m4 \ - $(top_srcdir)/auxdir/x_ac_bluegene.m4 \ - $(top_srcdir)/auxdir/x_ac_cflags.m4 \ - $(top_srcdir)/auxdir/x_ac_cray.m4 \ - $(top_srcdir)/auxdir/x_ac_databases.m4 \ - $(top_srcdir)/auxdir/x_ac_debug.m4 \ - $(top_srcdir)/auxdir/x_ac_elan.m4 \ - $(top_srcdir)/auxdir/x_ac_env.m4 \ - $(top_srcdir)/auxdir/x_ac_federation.m4 \ - $(top_srcdir)/auxdir/x_ac_gpl_licensed.m4 \ - $(top_srcdir)/auxdir/x_ac_gtk.m4 \ - $(top_srcdir)/auxdir/x_ac_iso.m4 \ - $(top_srcdir)/auxdir/x_ac_munge.m4 \ - $(top_srcdir)/auxdir/x_ac_ncurses.m4 \ - $(top_srcdir)/auxdir/x_ac_pam.m4 \ - $(top_srcdir)/auxdir/x_ac_ptrace.m4 \ - $(top_srcdir)/auxdir/x_ac_readline.m4 \ - $(top_srcdir)/auxdir/x_ac_setpgrp.m4 \ - $(top_srcdir)/auxdir/x_ac_setproctitle.m4 \ - $(top_srcdir)/auxdir/x_ac_sgi_job.m4 \ - $(top_srcdir)/auxdir/x_ac_slurm_ssl.m4 \ - $(top_srcdir)/auxdir/x_ac_sun_const.m4 \ - $(top_srcdir)/auxdir/x_ac_xcpu.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h $(top_builddir)/slurm/slurm.h -CONFIG_CLEAN_FILES = -SOURCES = -DIST_SOURCES = -RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ - html-recursive info-recursive install-data-recursive \ - install-dvi-recursive install-exec-recursive \ - install-html-recursive install-info-recursive \ - install-pdf-recursive install-ps-recursive install-recursive \ - installcheck-recursive installdirs-recursive pdf-recursive \ - ps-recursive uninstall-recursive -RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ - distclean-recursive maintainer-clean-recursive -ETAGS = etags -CTAGS = ctags -DIST_SUBDIRS = $(SUBDIRS) -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AR = @AR@ -AUTHD_CFLAGS = @AUTHD_CFLAGS@ -AUTHD_LIBS = @AUTHD_LIBS@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -BG_INCLUDES = @BG_INCLUDES@ -BLCR_CPPFLAGS = @BLCR_CPPFLAGS@ -BLCR_HOME = @BLCR_HOME@ -BLCR_LDFLAGS = @BLCR_LDFLAGS@ -BLCR_LIBS = @BLCR_LIBS@ -BLUEGENE_LOADED = @BLUEGENE_LOADED@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CMD_LDFLAGS = @CMD_LDFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -ELAN_LIBS = @ELAN_LIBS@ -EXEEXT = @EXEEXT@ -FEDERATION_LDFLAGS = @FEDERATION_LDFLAGS@ -FGREP = @FGREP@ -GREP = @GREP@ -GTK2_CFLAGS = @GTK2_CFLAGS@ -GTK2_LIBS = @GTK2_LIBS@ -HAVEMYSQLCONFIG = @HAVEMYSQLCONFIG@ -HAVEPGCONFIG = @HAVEPGCONFIG@ -HAVEPKGCONFIG = @HAVEPKGCONFIG@ -HAVE_AIX = @HAVE_AIX@ -HAVE_ELAN = @HAVE_ELAN@ -HAVE_FEDERATION = @HAVE_FEDERATION@ -HAVE_OPENSSL = @HAVE_OPENSSL@ -HAVE_SOME_CURSES = @HAVE_SOME_CURSES@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIB_LDFLAGS = @LIB_LDFLAGS@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAINT = @MAINT@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -MUNGE_CPPFLAGS = @MUNGE_CPPFLAGS@ -MUNGE_LDFLAGS = @MUNGE_LDFLAGS@ -MUNGE_LIBS = @MUNGE_LIBS@ -MYSQL_CFLAGS = @MYSQL_CFLAGS@ -MYSQL_LIBS = @MYSQL_LIBS@ -NCURSES = @NCURSES@ -NM = @NM@ -NMEDIT = @NMEDIT@ -NUMA_LIBS = @NUMA_LIBS@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PAM_LIBS = @PAM_LIBS@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PGSQL_CFLAGS = @PGSQL_CFLAGS@ -PGSQL_LIBS = @PGSQL_LIBS@ -PLPA_LIBS = @PLPA_LIBS@ -PROCTRACKDIR = @PROCTRACKDIR@ -PROJECT = @PROJECT@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -RANLIB = @RANLIB@ -READLINE_LIBS = @READLINE_LIBS@ -RELEASE = @RELEASE@ -SED = @SED@ -SEMAPHORE_LIBS = @SEMAPHORE_LIBS@ -SEMAPHORE_SOURCES = @SEMAPHORE_SOURCES@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -SLURMCTLD_PORT = @SLURMCTLD_PORT@ -SLURMDBD_PORT = @SLURMDBD_PORT@ -SLURMD_PORT = @SLURMD_PORT@ -SLURM_API_AGE = @SLURM_API_AGE@ -SLURM_API_CURRENT = @SLURM_API_CURRENT@ -SLURM_API_MAJOR = @SLURM_API_MAJOR@ -SLURM_API_REVISION = @SLURM_API_REVISION@ -SLURM_API_VERSION = @SLURM_API_VERSION@ -SLURM_MAJOR = @SLURM_MAJOR@ -SLURM_MICRO = @SLURM_MICRO@ -SLURM_MINOR = @SLURM_MINOR@ -SLURM_PREFIX = @SLURM_PREFIX@ -SLURM_VERSION = @SLURM_VERSION@ -SO_LDFLAGS = @SO_LDFLAGS@ -SSL_CPPFLAGS = @SSL_CPPFLAGS@ -SSL_LDFLAGS = @SSL_LDFLAGS@ -SSL_LIBS = @SSL_LIBS@ -STRIP = @STRIP@ -UTIL_LIBS = @UTIL_LIBS@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -lt_ECHO = @lt_ECHO@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target = @target@ -target_alias = @target_alias@ -target_cpu = @target_cpu@ -target_os = @target_os@ -target_vendor = @target_vendor@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -SUBDIRS = test -EXTRA_DIST = \ - CHANGES \ - COPYING \ - hostlist.py \ - PKG-INFO \ - python-hostlist.spec \ - README \ - setup.py - -all: all-recursive - -.SUFFIXES: -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu contribs/python/hostlist/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu contribs/python/hostlist/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -# This directory's subdirectories are mostly independent; you can cd -# into them and run `make' without going through this Makefile. -# To change the values of `make' variables: instead of editing Makefiles, -# (1) if the variable is set in `config.status', edit `config.status' -# (which will cause the Makefiles to be regenerated when you run `make'); -# (2) otherwise, pass the desired values on the `make' command line. -$(RECURSIVE_TARGETS): - @failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - -$(RECURSIVE_CLEAN_TARGETS): - @failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - case "$@" in \ - distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ - *) list='$(SUBDIRS)' ;; \ - esac; \ - rev=''; for subdir in $$list; do \ - if test "$$subdir" = "."; then :; else \ - rev="$$subdir $$rev"; \ - fi; \ - done; \ - rev="$$rev ."; \ - target=`echo $@ | sed s/-recursive//`; \ - for subdir in $$rev; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done && test -z "$$fail" -tags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ - done -ctags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ - done - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ - include_option=--etags-include; \ - empty_fix=.; \ - else \ - include_option=--include; \ - empty_fix=; \ - fi; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test ! -f $$subdir/TAGS || \ - tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ - fi; \ - done; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ - fi -ctags: CTAGS -CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ - fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ - || exit 1; \ - fi; \ - done - list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test -d "$(distdir)/$$subdir" \ - || $(MKDIR_P) "$(distdir)/$$subdir" \ - || exit 1; \ - distdir=`$(am__cd) $(distdir) && pwd`; \ - top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ - (cd $$subdir && \ - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$top_distdir" \ - distdir="$$distdir/$$subdir" \ - am__remove_distdir=: \ - am__skip_length_check=: \ - distdir) \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-recursive -all-am: Makefile -installdirs: installdirs-recursive -installdirs-am: -install: install-recursive -install-exec: install-exec-recursive -install-data: install-data-recursive -uninstall: uninstall-recursive - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-recursive -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-recursive - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-recursive - -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-tags - -dvi: dvi-recursive - -dvi-am: - -html: html-recursive - -info: info-recursive - -info-am: - -install-data-am: - -install-dvi: install-dvi-recursive - -install-exec-am: - -install-html: install-html-recursive - -install-info: install-info-recursive - -install-man: - -install-pdf: install-pdf-recursive - -install-ps: install-ps-recursive - -installcheck-am: - -maintainer-clean: maintainer-clean-recursive - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-recursive - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-recursive - -pdf-am: - -ps: ps-recursive - -ps-am: - -uninstall-am: - -.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ - install-strip - -.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ - all all-am check check-am clean clean-generic clean-libtool \ - ctags ctags-recursive distclean distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am install-info \ - install-info-am install-man install-pdf install-pdf-am \ - install-ps install-ps-am install-strip installcheck \ - installcheck-am installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ - uninstall uninstall-am - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/contribs/python/hostlist/PKG-INFO b/contribs/python/hostlist/PKG-INFO deleted file mode 100644 index f66980ccb6add624183e107b75a7121e52ec9f39..0000000000000000000000000000000000000000 --- a/contribs/python/hostlist/PKG-INFO +++ /dev/null @@ -1,18 +0,0 @@ -Metadata-Version: 1.0 -Name: python-hostlist -Version: 1.5 -Summary: Python module for hostlist handling -Home-page: http://www.nsc.liu.se/~kent/python-hostlist/ -Author: Kent Engström -Author-email: kent@nsc.liu.se -License: GPL2+ -Description: The hostlist.py module knows how to expand and collect hostlist expressions. -Platform: UNKNOWN -Classifier: Development Status :: 5 - Production/Stable -Classifier: Intended Audience :: Science/Research -Classifier: Intended Audience :: System Administrators -Classifier: License :: OSI Approved :: GNU General Public License (GPL) -Classifier: Topic :: System :: Clustering -Classifier: Topic :: System :: Systems Administration -Classifier: Programming Language :: Python :: 2 -Classifier: Programming Language :: Python :: 3 diff --git a/contribs/python/hostlist/README b/contribs/python/hostlist/README deleted file mode 100644 index ebb9d52780a5d0de5bf0393b6aca511c544a499b..0000000000000000000000000000000000000000 --- a/contribs/python/hostlist/README +++ /dev/null @@ -1,67 +0,0 @@ -INTRODUCTION -============ - -The Python module hostlist.py knows how to expand and collect hostlist -expressions. Example: - - % python - Python 2.5.1 (r251:54863, Jul 10 2008, 17:24:48) - [GCC 4.1.2 20070925 (Red Hat 4.1.2-33)] on linux2 - Type "help", "copyright", "credits" or "license" for more information. - >>> import hostlist - >>> hosts = hostlist.expand_hostlist("n[1-10,17]") - >>> hosts - ['n1', 'n2', 'n3', 'n4', 'n5', 'n6', 'n7', 'n8', 'n9', 'n10', 'n17'] - >>> hostlist.collect_hostlist(hosts) - 'n[1-10,17]' - >>> hostlist.collect_hostlist(["x1y1","x2y2", "x1y2", "x2y1"]) - 'x[1-2]y[1-2]' - -Bad hostlists or hostnames will result in the hostlist.BadHostlist -exception being raised. - -The 'hostlist' command is provided to expand/collect hostlists and -perform set operations on them. Example: - - % hostlist n[1-10] n[5-20] - n[1-20] - % hostlist --difference n[1-10] n[5-20] - n[1-4] - % hostlist --expand --intersection n[1-10] n[5-20] - n5 - n6 - n7 - n8 - n9 - n10 - - -BUILDING -======== - -Build RPM packages from the tar.gz archive by running: - - rpmbuild -ta python-hostlist-1.5.tar.gz - -If you do not have the tar archive, create it first: - - python setup.py sdist - rpmbuild -ta dist/python-hostlist-1.5.tar.gz - -You may also install directly by running: - - python setup.py build (as yourself) - python setup.py install (as root) - - -RELEASES AND FEEDBACK -===================== - -You will find new releases at: - - http://www.nsc.liu.se/~kent/python-hostlist/ - -If you have questions, suggestions, bug reports or patches, please -send them to: - - kent@nsc.liu.se. diff --git a/contribs/python/hostlist/hostlist.py b/contribs/python/hostlist/hostlist.py deleted file mode 100755 index b3b520336261c19eec0b8c7f25dce3bf50d3bcde..0000000000000000000000000000000000000000 --- a/contribs/python/hostlist/hostlist.py +++ /dev/null @@ -1,362 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# -# Hostlist library -# -# Copyright (C) 2008 Kent Engström <kent@nsc.liu.se>, -# Thomas Bellman <bellman@nsc.liu.se> and -# Pär Andersson <paran@nsc.liu.se>, -# National Supercomputer Centre -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301, USA. - -"""Handle hostlist expressions. - -This module provides operations to expand and collect hostlist -expressions. - -The hostlist expression syntax is the same as in several programs -developed at LLNL (https://computing.llnl.gov/linux/). However in -corner cases the behaviour of this module have not been compared for -compatibility with pdsh/dshbak/SLURM et al. -""" - -__version__ = "1.5" - -import re -import itertools - -# Exception used for error reporting to the caller -class BadHostlist(Exception): pass - -# Configuration to guard against ridiculously long expanded lists -MAX_SIZE = 100000 - -# Hostlist expansion - -def expand_hostlist(hostlist, allow_duplicates=False, sort=False): - """Expand a hostlist expression string to a Python list. - - Example: expand_hostlist("n[9-11],d[01-02]") ==> - ['n9', 'n10', 'n11', 'd01', 'd02'] - - Unless allow_duplicates is true, duplicates will be purged - from the results. If sort is true, the output will be sorted. - """ - - results = [] - bracket_level = 0 - part = "" - - for c in hostlist + ",": - if c == "," and bracket_level == 0: - # Comma at top level, split! - if part: results.extend(expand_part(part)) - part = "" - bad_part = False - else: - part += c - - if c == "[": bracket_level += 1 - elif c == "]": bracket_level -= 1 - - if bracket_level > 1: - raise BadHostlist, "nested brackets" - elif bracket_level < 0: - raise BadHostlist, "unbalanced brackets" - - if bracket_level > 0: - raise BadHostlist, "unbalanced brackets" - - if not allow_duplicates: - results = remove_duplicates(results) - if sort: - results = numerically_sorted(results) - return results - -def expand_part(s): - """Expand a part (e.g. "x[1-2]y[1-3][1-3]") (no outer level commas).""" - - # Base case: the empty part expand to the singleton list of "" - if s == "": - return [""] - - # Split into: - # 1) prefix string (may be empty) - # 2) rangelist in brackets (may be missing) - # 3) the rest - - m = re.match(r'([^,\[]*)(\[[^\]]*\])?(.*)', s) - (prefix, rangelist, rest) = m.group(1,2,3) - - # Expand the rest first (here is where we recurse!) - rest_expanded = expand_part(rest) - - # Expand our own part - if not rangelist: - # If there is no rangelist, our own contribution is the prefix only - us_expanded = [prefix] - else: - # Otherwise expand the rangelist (adding the prefix before) - us_expanded = expand_rangelist(prefix, rangelist[1:-1]) - - # Combine our list with the list from the expansion of the rest - # (but guard against too large results first) - if len(us_expanded) * len(rest_expanded) > MAX_SIZE: - raise BadHostlist, "results too large" - - return [us_part + rest_part - for us_part in us_expanded - for rest_part in rest_expanded] - -def expand_rangelist(prefix, rangelist): - """ Expand a rangelist (e.g. "1-10,14"), putting a prefix before.""" - - # Split at commas and expand each range separately - results = [] - for range_ in rangelist.split(","): - results.extend(expand_range(prefix, range_)) - return results - -def expand_range(prefix, range_): - """ Expand a range (e.g. 1-10 or 14), putting a prefix before.""" - - # Check for a single number first - m = re.match(r'^[0-9]+$', range_) - if m: - return ["%s%s" % (prefix, range_)] - - # Otherwise split low-high - m = re.match(r'^([0-9]+)-([0-9]+)$', range_) - if not m: - raise BadHostlist, "bad range" - - (s_low, s_high) = m.group(1,2) - low = int(s_low) - high = int(s_high) - width = len(s_low) - - if high < low: - raise BadHostlist, "start > stop" - elif high - low > MAX_SIZE: - raise BadHostlist, "range too large" - - results = [] - for i in xrange(low, high+1): - results.append("%s%0*d" % (prefix, width, i)) - return results - -def remove_duplicates(l): - """Remove duplicates from a list (but keep the order).""" - seen = set() - results = [] - for e in l: - if e not in seen: - results.append(e) - seen.add(e) - return results - -# Hostlist collection - -def collect_hostlist(hosts, silently_discard_bad = False): - """Collect a hostlist string from a Python list of hosts. - - We start grouping from the rightmost numerical part. - Duplicates are removed. - - A bad hostname raises an exception (unless silently_discard_bad - is true causing the bad hostname to be silently discarded instead). - """ - - # Split hostlist into a list of (host, "") for the iterative part. - # (Also check for bad node names now) - # The idea is to move already collected numerical parts from the - # left side (seen by each loop) to the right side (just copied). - - left_right = [] - for host in hosts: - # We remove leading and trailing whitespace first, and skip empty lines - host = host.strip() - if host == "": continue - - # We cannot accept a host containing any of the three special - # characters in the hostlist syntax (comma and flat brackets) - if re.search(r'[][,]', host): - if silently_discard_bad: - continue - else: - raise BadHostlist, "forbidden character" - - left_right.append((host, "")) - - # Call the iterative function until it says it's done - looping = True - while looping: - left_right, looping = collect_hostlist_1(left_right) - return ",".join([left + right for left, right in left_right]) - -def collect_hostlist_1(left_right): - """Collect a hostlist string from a list of hosts (left+right). - - The input is a list of tuples (left, right). The left part - is analyzed, while the right part is just passed along - (it can contain already collected range expressions). - """ - - # Scan the list of hosts (left+right) and build two things: - # *) a set of all hosts seen (used later) - # *) a list where each host entry is preprocessed for correct sorting - - sortlist = [] - remaining = set() - for left, right in left_right: - host = left + right - remaining.add(host) - - # Match the left part into parts - m = re.match(r'^(.*?)([0-9]+)?([^0-9]*)$', left) - (prefix, num_str, suffix) = m.group(1,2,3) - - # Add the right part unprocessed to the suffix. - # This ensures than an already computed range expression - # in the right part is not analyzed again. - suffix = suffix + right - - if num_str is None: - # A left part with no numeric part at all gets special treatment! - # The regexp matches with the whole string as the suffix, - # with nothing in the prefix or numeric parts. - # We do not want that, so we move it to the prefix and put - # None as a special marker where the suffix should be. - assert prefix == "" - sortlist.append(((host, None), None, None, host)) - else: - # A left part with at least an numeric part - # (we care about the rightmost numeric part) - num_int = int(num_str) - num_width = len(num_str) # This width includes leading zeroes - sortlist.append(((prefix, suffix), num_int, num_width, host)) - - # Sort lexicographically, first on prefix, then on suffix, then on - # num_int (numerically), then... - # This determines the order of the final result. - - sortlist.sort() - - # We are ready to collect the result parts as a list of new (left, - # right) tuples. - - results = [] - needs_another_loop = False - - # Now group entries with the same prefix+suffix combination (the - # key is the first element in the sortlist) to loop over them and - # then to loop over the list of hosts sharing the same - # prefix+suffix combination. - - for ((prefix, suffix), group) in itertools.groupby(sortlist, - key=lambda x:x[0]): - - if suffix is None: - # Special case: a host with no numeric part - results.append(("", prefix)) # Move everything to the right part - remaining.remove(prefix) - else: - # The general case. We prepare to collect a list of - # ranges expressed as (low, high, width) for later - # formatting. - range_list = [] - - for ((prefix2, suffix2), num_int, num_width, host) in group: - if host not in remaining: - # Below, we will loop internally to enumate a whole range - # at a time. We then remove the covered hosts from the set. - # Therefore, skip the host here if it is gone from the set. - continue - assert num_int is not None - - # Scan for a range starting at the current host - low = num_int - while True: - host = "%s%0*d%s" % (prefix, num_width, num_int, suffix) - if host in remaining: - remaining.remove(host) - num_int += 1 - else: - break - high = num_int - 1 - assert high >= low - range_list.append((low, high, num_width)) - - # We have a list of ranges to format. We make sure - # we move our handled numerical part to the right to - # stop it from being processed again. - needs_another_loop = True - if len(range_list) == 1 and range_list[0][0] == range_list[0][1]: - # Special case to make sure that n1 is not shown as n[1] etc - results.append((prefix, - "%0*d%s" % - (range_list[0][2], range_list[0][0], suffix))) - else: - # General case where high > low - results.append((prefix, "[" + \ - ",".join([format_range(l, h, w) - for l, h, w in range_list]) + \ - "]" + suffix)) - - # At this point, the set of remaining hosts should be empty and we - # are ready to return the result, together with the flag that says - # if we need to loop again (we do if we have added something to a - # left part). - assert not remaining - return results, needs_another_loop - -def format_range(low, high, width): - """Format a range from low to high inclusively, with a certain width.""" - - if low == high: - return "%0*d" % (width, low) - else: - return "%0*d-%0*d" % (width, low, width, high) - -# Sort a list of hosts numerically - -def numerically_sorted(l): - """Sort a list of hosts numerically. - - E.g. sorted order should be n1, n2, n10; not n1, n10, n2. - """ - - return sorted(l, key=numeric_sort_key) - -def int_if_possible(x): - try: - return int(x) - except: - return x - -def numeric_sort_key(x): - return [int_if_possible(n) for n in re.findall("([0-9]+|[^0-9]+)", x)] - - -# -# Keep this part to tell users where the command line interface went -# - -if __name__ == '__main__': - import os, sys - sys.stderr.write("The command line utility has been moved to a separate 'hostlist' program.\n") - sys.exit(os.EX_USAGE) diff --git a/contribs/python/hostlist/python-hostlist-1.6.tar.gz b/contribs/python/hostlist/python-hostlist-1.6.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..82faea290b2ca0355ade5c5e27a451d1fa012580 Binary files /dev/null and b/contribs/python/hostlist/python-hostlist-1.6.tar.gz differ diff --git a/contribs/python/hostlist/python-hostlist.spec b/contribs/python/hostlist/python-hostlist.spec deleted file mode 100644 index 9c2ce0df12ed3831f0beaf596e8689d169ffecb3..0000000000000000000000000000000000000000 --- a/contribs/python/hostlist/python-hostlist.spec +++ /dev/null @@ -1,51 +0,0 @@ -%{!?python_sitelib: %define python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")} - -Name: python-hostlist -Version: 1.5 -Release: 1 -Summary: Python module for hostlist handling -Vendor: NSC - -Group: Development/Languages -License: GPL2+ -URL: http://www.nsc.liu.se/~kent/python-hostlist/ -Source0: http://www.nsc.liu.se/~kent/python-hostlist/%{name}-%{version}.tar.gz -BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) - -BuildArch: noarch -BuildRequires: python-devel - -%description -The hostlist.py module knows how to expand and collect hostlist -expressions. The package also includes the 'hostlist' binary which can -be used to collect/expand hostlists and perform set operations on -them. - -%prep -%setup -q - - -%build -%{__python} setup.py build - - -%install -rm -rf $RPM_BUILD_ROOT -%{__python} setup.py install -O1 --skip-build --prefix /usr --root $RPM_BUILD_ROOT - - -%clean -rm -rf $RPM_BUILD_ROOT - - -%files -%defattr(-,root,root,-) -%doc README -%doc COPYING -%doc CHANGES -%{python_sitelib}/* -/usr/bin/hostlist -/usr/bin/hostgrep -/usr/share/man/man1/hostlist.1.gz -/usr/share/man/man1/hostgrep.1.gz -%changelog diff --git a/contribs/python/hostlist/setup.py b/contribs/python/hostlist/setup.py deleted file mode 100644 index 57199e70754092c3c7552df04def48f5870914a9..0000000000000000000000000000000000000000 --- a/contribs/python/hostlist/setup.py +++ /dev/null @@ -1,48 +0,0 @@ -# -*- coding: utf-8 -*- - -from distutils.core import setup - -# Python 2/3 installation trick from .../Demo/distutils/test2to3 -try: - from distutils.command.build_py import build_py_2to3 as build_py -except ImportError: - from distutils.command.build_py import build_py - -try: - from distutils.command.build_scripts import build_scripts_2to3 as build_scripts -except ImportError: - from distutils.command.build_scripts import build_scripts - -# Version -VERSION = "1.5" -if "#" in VERSION: - import sys - sys.stderr.write("Bad version %s\n" % VERSION) - sys.exit(1) - - -setup(name = "python-hostlist", - version = VERSION, - description = "Python module for hostlist handling", - long_description = "The hostlist.py module knows how to expand and collect hostlist expressions.", - author = "Kent Engström", - author_email = "kent@nsc.liu.se", - url = "http://www.nsc.liu.se/~kent/python-hostlist/", - license = "GPL2+", - classifiers = ['Development Status :: 5 - Production/Stable', - 'Intended Audience :: Science/Research', - 'Intended Audience :: System Administrators', - 'License :: OSI Approved :: GNU General Public License (GPL)', - 'Topic :: System :: Clustering', - 'Topic :: System :: Systems Administration', - 'Programming Language :: Python :: 2', - 'Programming Language :: Python :: 3', - ], - py_modules = ["hostlist"], - scripts = ["hostlist", "hostgrep"], - data_files = [("share/man/man1", ["hostlist.1", - "hostgrep.1"])], - cmdclass = {'build_py':build_py, - 'build_scripts':build_scripts, - } - ) diff --git a/contribs/python/hostlist/test/Makefile.am b/contribs/python/hostlist/test/Makefile.am deleted file mode 100644 index c795271fb0b6294ebd9c72016d66d57ac359b381..0000000000000000000000000000000000000000 --- a/contribs/python/hostlist/test/Makefile.am +++ /dev/null @@ -1,2 +0,0 @@ -EXTRA_DIST = \ - test_hostlist.py diff --git a/contribs/python/hostlist/test/Makefile.in b/contribs/python/hostlist/test/Makefile.in deleted file mode 100644 index f6afe23be57b0b4fdad729869e1102cb99d4a26c..0000000000000000000000000000000000000000 --- a/contribs/python/hostlist/test/Makefile.in +++ /dev/null @@ -1,430 +0,0 @@ -# Makefile.in generated by automake 1.10.2 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -target_triplet = @target@ -subdir = contribs/python/hostlist/test -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.m4 \ - $(top_srcdir)/auxdir/libtool.m4 \ - $(top_srcdir)/auxdir/ltoptions.m4 \ - $(top_srcdir)/auxdir/ltsugar.m4 \ - $(top_srcdir)/auxdir/ltversion.m4 \ - $(top_srcdir)/auxdir/lt~obsolete.m4 \ - $(top_srcdir)/auxdir/slurm.m4 \ - $(top_srcdir)/auxdir/x_ac__system_configuration.m4 \ - $(top_srcdir)/auxdir/x_ac_affinity.m4 \ - $(top_srcdir)/auxdir/x_ac_aix.m4 \ - $(top_srcdir)/auxdir/x_ac_blcr.m4 \ - $(top_srcdir)/auxdir/x_ac_bluegene.m4 \ - $(top_srcdir)/auxdir/x_ac_cflags.m4 \ - $(top_srcdir)/auxdir/x_ac_cray.m4 \ - $(top_srcdir)/auxdir/x_ac_databases.m4 \ - $(top_srcdir)/auxdir/x_ac_debug.m4 \ - $(top_srcdir)/auxdir/x_ac_elan.m4 \ - $(top_srcdir)/auxdir/x_ac_env.m4 \ - $(top_srcdir)/auxdir/x_ac_federation.m4 \ - $(top_srcdir)/auxdir/x_ac_gpl_licensed.m4 \ - $(top_srcdir)/auxdir/x_ac_gtk.m4 \ - $(top_srcdir)/auxdir/x_ac_iso.m4 \ - $(top_srcdir)/auxdir/x_ac_munge.m4 \ - $(top_srcdir)/auxdir/x_ac_ncurses.m4 \ - $(top_srcdir)/auxdir/x_ac_pam.m4 \ - $(top_srcdir)/auxdir/x_ac_ptrace.m4 \ - $(top_srcdir)/auxdir/x_ac_readline.m4 \ - $(top_srcdir)/auxdir/x_ac_setpgrp.m4 \ - $(top_srcdir)/auxdir/x_ac_setproctitle.m4 \ - $(top_srcdir)/auxdir/x_ac_sgi_job.m4 \ - $(top_srcdir)/auxdir/x_ac_slurm_ssl.m4 \ - $(top_srcdir)/auxdir/x_ac_sun_const.m4 \ - $(top_srcdir)/auxdir/x_ac_xcpu.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h $(top_builddir)/slurm/slurm.h -CONFIG_CLEAN_FILES = -SOURCES = -DIST_SOURCES = -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AR = @AR@ -AUTHD_CFLAGS = @AUTHD_CFLAGS@ -AUTHD_LIBS = @AUTHD_LIBS@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -BG_INCLUDES = @BG_INCLUDES@ -BLCR_CPPFLAGS = @BLCR_CPPFLAGS@ -BLCR_HOME = @BLCR_HOME@ -BLCR_LDFLAGS = @BLCR_LDFLAGS@ -BLCR_LIBS = @BLCR_LIBS@ -BLUEGENE_LOADED = @BLUEGENE_LOADED@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CMD_LDFLAGS = @CMD_LDFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -ELAN_LIBS = @ELAN_LIBS@ -EXEEXT = @EXEEXT@ -FEDERATION_LDFLAGS = @FEDERATION_LDFLAGS@ -FGREP = @FGREP@ -GREP = @GREP@ -GTK2_CFLAGS = @GTK2_CFLAGS@ -GTK2_LIBS = @GTK2_LIBS@ -HAVEMYSQLCONFIG = @HAVEMYSQLCONFIG@ -HAVEPGCONFIG = @HAVEPGCONFIG@ -HAVEPKGCONFIG = @HAVEPKGCONFIG@ -HAVE_AIX = @HAVE_AIX@ -HAVE_ELAN = @HAVE_ELAN@ -HAVE_FEDERATION = @HAVE_FEDERATION@ -HAVE_OPENSSL = @HAVE_OPENSSL@ -HAVE_SOME_CURSES = @HAVE_SOME_CURSES@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIB_LDFLAGS = @LIB_LDFLAGS@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAINT = @MAINT@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -MUNGE_CPPFLAGS = @MUNGE_CPPFLAGS@ -MUNGE_LDFLAGS = @MUNGE_LDFLAGS@ -MUNGE_LIBS = @MUNGE_LIBS@ -MYSQL_CFLAGS = @MYSQL_CFLAGS@ -MYSQL_LIBS = @MYSQL_LIBS@ -NCURSES = @NCURSES@ -NM = @NM@ -NMEDIT = @NMEDIT@ -NUMA_LIBS = @NUMA_LIBS@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PAM_LIBS = @PAM_LIBS@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PGSQL_CFLAGS = @PGSQL_CFLAGS@ -PGSQL_LIBS = @PGSQL_LIBS@ -PLPA_LIBS = @PLPA_LIBS@ -PROCTRACKDIR = @PROCTRACKDIR@ -PROJECT = @PROJECT@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -RANLIB = @RANLIB@ -READLINE_LIBS = @READLINE_LIBS@ -RELEASE = @RELEASE@ -SED = @SED@ -SEMAPHORE_LIBS = @SEMAPHORE_LIBS@ -SEMAPHORE_SOURCES = @SEMAPHORE_SOURCES@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -SLURMCTLD_PORT = @SLURMCTLD_PORT@ -SLURMDBD_PORT = @SLURMDBD_PORT@ -SLURMD_PORT = @SLURMD_PORT@ -SLURM_API_AGE = @SLURM_API_AGE@ -SLURM_API_CURRENT = @SLURM_API_CURRENT@ -SLURM_API_MAJOR = @SLURM_API_MAJOR@ -SLURM_API_REVISION = @SLURM_API_REVISION@ -SLURM_API_VERSION = @SLURM_API_VERSION@ -SLURM_MAJOR = @SLURM_MAJOR@ -SLURM_MICRO = @SLURM_MICRO@ -SLURM_MINOR = @SLURM_MINOR@ -SLURM_PREFIX = @SLURM_PREFIX@ -SLURM_VERSION = @SLURM_VERSION@ -SO_LDFLAGS = @SO_LDFLAGS@ -SSL_CPPFLAGS = @SSL_CPPFLAGS@ -SSL_LDFLAGS = @SSL_LDFLAGS@ -SSL_LIBS = @SSL_LIBS@ -STRIP = @STRIP@ -UTIL_LIBS = @UTIL_LIBS@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -lt_ECHO = @lt_ECHO@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target = @target@ -target_alias = @target_alias@ -target_cpu = @target_cpu@ -target_os = @target_os@ -target_vendor = @target_vendor@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -EXTRA_DIST = \ - test_hostlist.py - -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu contribs/python/hostlist/test/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu contribs/python/hostlist/test/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -tags: TAGS -TAGS: - -ctags: CTAGS -CTAGS: - - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ - fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic - -dvi: dvi-am - -dvi-am: - -html: html-am - -info: info-am - -info-am: - -install-data-am: - -install-dvi: install-dvi-am - -install-exec-am: - -install-html: install-html-am - -install-info: install-info-am - -install-man: - -install-pdf: install-pdf-am - -install-ps: install-ps-am - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: - -.MAKE: install-am install-strip - -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - distclean distclean-generic distclean-libtool distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/contribs/python/hostlist/test/test_hostlist.py b/contribs/python/hostlist/test/test_hostlist.py deleted file mode 100644 index d539742df392842dc18f0d3b6511492b64b12125..0000000000000000000000000000000000000000 --- a/contribs/python/hostlist/test/test_hostlist.py +++ /dev/null @@ -1,123 +0,0 @@ -from hostlist import expand_hostlist, collect_hostlist, BadHostlist -import unittest - -class TestExpand1(unittest.TestCase): - - def expand_eq(self, hostlist, expanded_list): - self.assertEqual(expand_hostlist(hostlist), expanded_list) - - def expand_sort_eq(self, hostlist, expanded_list): - self.assertEqual(expand_hostlist(hostlist, sort=True), expanded_list) - - def expand_length(self, hostlist, expanded_length): - self.assertEqual(len(expand_hostlist(hostlist)), expanded_length) - - def expand_bad(self, hostlist): - self.assertRaises(BadHostlist, expand_hostlist, hostlist) - - def test_expand(self): - self.expand_eq("n[9-11]", ["n9", "n10", "n11"]) - self.expand_sort_eq("n[9-11]", ["n9", "n10", "n11"]) - self.expand_eq("n[09-11]", ["n09", "n10", "n11"]) - self.expand_eq("n[009-11]", ["n009", "n010", "n011"]) - self.expand_sort_eq("n[009-11]", ["n009", "n010", "n011"]) - self.expand_eq("n[009-011]", ["n009", "n010", "n011"]) - - self.expand_eq("n[17-17]", ["n17"]) - self.expand_eq("n1,n3", ["n1", "n3"]) - self.expand_sort_eq("n1,n3", ["n1", "n3"]) - self.expand_eq("n3,n1", ["n3", "n1"]) - self.expand_sort_eq("n3,n1", ["n1", "n3"]) - self.expand_eq("n1,n3,n1", ["n1", "n3"]) - self.expand_sort_eq("n1,n3,n1", ["n1", "n3"]) - self.expand_eq("n3,n1,n3", ["n3", "n1"]) - self.expand_sort_eq("n3,n1,n3", ["n1", "n3"]) - - self.expand_eq("n[1],n3", ["n1", "n3"]) - self.expand_eq("n[1,3]", ["n1", "n3"]) - self.expand_eq("n[3,1]", ["n3", "n1"]) - self.expand_sort_eq("n[3,1]", ["n1", "n3"]) - self.expand_eq("n[1,3,1]", ["n1", "n3"]) - - self.expand_eq("n1,n2,n[9-11],n3", ["n1", "n2", "n9", "n10", "n11", "n3"]) - - self.expand_eq("n[1-3]m[4-6]", ["n1m4", "n1m5", "n1m6", - "n2m4", "n2m5", "n2m6", - "n3m4", "n3m5", "n3m6"]) - self.expand_eq("n[1-2][4-5]m", ["n14m", "n15m", - "n24m", "n25m"]) - self.expand_eq("[1-2][4-5]", ["14", "15", - "24", "25"]) - - self.expand_length("n[1-100]m[1-100]", 100*100) - self.expand_length("[1-10][1-10][1-10]", 10*10*10) - - self.expand_eq("n[1-5,3-8]", ["n1", "n2", "n3", "n4", "n5", "n6", "n7", "n8"]) - self.expand_eq("n[3-8,1-5]", ["n3", "n4", "n5", "n6", "n7", "n8", "n1", "n2"]) - self.expand_sort_eq("n[3-8,1-5]", ["n1", "n2", "n3", "n4", "n5", "n6", "n7", "n8"]) - - self.expand_eq("", []) - - self.expand_bad("n[]") - self.expand_bad("n[-]") - self.expand_bad("n[1-]") - self.expand_bad("n[-1]") - self.expand_bad("n[1,]") - self.expand_bad("n[,1]") - self.expand_bad("n[1-3,]") - self.expand_bad("n[,1-3]") - self.expand_bad("n[3-1]") - self.expand_bad("n[") - self.expand_bad("n]") - self.expand_bad("n[[]]") - self.expand_bad("n[1,[]]") - self.expand_bad("n[x]") - self.expand_bad("n[1-10x]") - - self.expand_bad("n[1-1000000]") - self.expand_bad("n[1-1000][1-1000]") - - def collect_eq(self, hostlist, expanded_list): - # Note the order of the arguments! This makes it easier to - # copy tests between the expand and collect parts! - self.assertEqual(hostlist, collect_hostlist(expanded_list)) - - def test_collect(self): - self.collect_eq("n[9-11]", ["n9", "n10", "n11"]) - self.collect_eq("n[09-11]", ["n09", "n10", "n11"]) - self.collect_eq("n[009-011]", ["n009", "n010", "n011"]) - - self.collect_eq("n[1-3,9-11]", ["n1", "n2", "n9", "n10", "n11", "n3"]) - - self.collect_eq("m1,n[9-11],p[7-8]", ["n9", "n10", "p7", "m1", "n11", "p8"]) - - self.collect_eq("x[1-2]y[4-5]", ["x1y4", "x1y5", - "x2y4", "x2y5"]) - self.collect_eq("[1-2]y[4-5]z", ["1y4z", "1y5z", - "2y4z", "2y5z"]) - - self.collect_eq("x1y[4-5],x2y4", ["x1y4", "x1y5", "x2y4"]) - self.collect_eq("x1y5,x2y[4-5]", ["x1y5", "x2y4", "x2y5"]) - self.collect_eq("x1y5,x2y4", ["x1y5", "x2y4"]) - - self.collect_eq("", [""]) - - self.collect_eq("n[9,09]", ["n09","n9"]) - self.collect_eq("n[9,09]", ["n9","n09"]) - self.collect_eq("n[9-10]", ["n9","n10"]) - self.collect_eq("n[09-10]", ["n09","n10"]) - self.collect_eq("n[009,10]", ["n009","n10"]) - - self.collect_eq("x", ["x"]) - self.collect_eq("x", ["x", "x"]) - self.collect_eq("x,y", ["x", "y", "x"]) - - self.collect_eq("n1", ["n1"]) - self.collect_eq("n1", ["n1", "n1"]) - self.collect_eq("n[1-2]", ["n1", "n2", "n1"]) - - self.collect_eq("x,y[10-12],z", ["z","y10","y12", "x", "y11"]) - - -if __name__ == '__main__': - unittest.main() diff --git a/doc/html/configurator.html.in b/doc/html/configurator.html.in index c1a22288f71e320d9ff4b9d7e0e114fbde34e0c5..6619d7f8a3a5c873201fdc4af8aa1860ccfa3e03 100644 --- a/doc/html/configurator.html.in +++ b/doc/html/configurator.html.in @@ -162,7 +162,7 @@ function displayfile() "#MailProg=/bin/mail <br>" + "#MaxJobCount=5000 <br>" + "MpiDefault=" + get_radio_value(document.config.mpi_default) + "<br>" + - "#MpiParams=ports:#-# <br>" + + "#MpiParams=ports=#-# <br>" + "#PluginDir= <br>" + "#PlugStackConfig= <br>" + "#PrivateData=jobs <br>" + diff --git a/doc/man/man1/sacct.1 b/doc/man/man1/sacct.1 index a1821d37b9cf94fd5589e1570ad26df85c627531..a67e5db4cdf2bbc20973781973f5aaac52348b0c 100644 --- a/doc/man/man1/sacct.1 +++ b/doc/man/man1/sacct.1 @@ -242,7 +242,7 @@ NOTE: When using the format option for listing various fields you can put a %NUMBER afterwards to specify how many characters should be printed. i.e. format=name%30 will print 30 characters of field name right -justified. A -30 will print 30 characters left justified. +justified. A \-30 will print 30 characters left justified. .IP .TP diff --git a/doc/man/man1/sacctmgr.1 b/doc/man/man1/sacctmgr.1 index 8d88b7b7c558f3796ea1c411d11f4a77fba787ac..c4abf11065a831dc35fd153da2bac2f0a2256f0e 100644 --- a/doc/man/man1/sacctmgr.1 +++ b/doc/man/man1/sacctmgr.1 @@ -686,7 +686,7 @@ When using the format option for listing various fields you can put a %NUMBER afterwards to specify how many characters should be printed. i.e. format=name%30 will print 30 characters of field name right -justified. A -30 will print 30 characters left justified. +justified. A \-30 will print 30 characters left justified. .SH "FLAT FILE DUMP AND LOAD" sacctmgr has the capability to load and dump SLURM association data to and diff --git a/doc/man/man1/smap.1 b/doc/man/man1/smap.1 index c0522ab6c7604c8a17d226db189a3071953a22c9..44b20942b881ced763db9fc529f82a864c5c3aba 100644 --- a/doc/man/man1/smap.1 +++ b/doc/man/man1/smap.1 @@ -269,8 +269,12 @@ The default value is TORUS. \fBSmall\fR Equivalent to "Connection=Small". If a small connection is specified the base partition chosen will create -smaller partitions based on options \fBNodeCards\fR and \fBQuarters\fR -within the base partition. These number will be altered to take up the +smaller partitions based on options \fB32CNBlocks\fR and +\fB128CNBlocks\fR respectively for a Bluegene L system. +\fB16CNBlocks\fR, \fB64CNBlocks\fR, and \fB256CNBlocks\fR are also +available for Bluegene P systems. Keep in mind you +must have enough ionodes to make all these configurations possible. + These number will be altered to take up the entire base partition. Size does not need to be specified with a small request, we will always default to 1 base partition for allocation. .TP diff --git a/doc/man/man1/sreport.1 b/doc/man/man1/sreport.1 index ba5d2224d41762d6326d2a023c742159c625f62e..e4c071972fdb29dbb09bf683f76d9734dce8716d 100644 --- a/doc/man/man1/sreport.1 +++ b/doc/man/man1/sreport.1 @@ -227,7 +227,7 @@ When using the format option for listing various fields you can put a %NUMBER afterwards to specify how many characters should be printed. i.e. format=name%30 will print 30 characters of field name right -justified. A -30 will print 30 characters left justified. +justified. A \-30 will print 30 characters left justified. .TP .B Start=<OPT> diff --git a/doc/man/man5/bluegene.conf.5 b/doc/man/man5/bluegene.conf.5 index 484360c5112e4c18050680505100fecab7625a0a..41973e3ffb74e9f18ec07d8bd78a8780212316bb 100644 --- a/doc/man/man5/bluegene.conf.5 +++ b/doc/man/man5/bluegene.conf.5 @@ -198,8 +198,12 @@ The default value is TORUS. .TP \fBSMALL\fR: The base partition is divided into more than one bgblock. The administrator should define the number of single node cards and -quarter base partition blocks using the options \fBNodeCards\fR and -\fBQuarters\fR respectively. +quarter base partition blocks using the options \fB32CNBlocks\fR and +\fB128CNBlocks\fR respectively for a Bluegene L system. \fB16CNBlocks\fR, +\fB64CNBlocks\fR, and \fB256CNBlocks\fR are also available for +Bluegene P systems. Keep in mind you +must have enough ionodes to make all these configurations possible. + The total number of c\-nodes in defined blocks must not exceed \fBBasePartitionNodeCnt\fR. If not specified, the base partition will be divided into four @@ -259,9 +263,9 @@ BPs=[320x323] Type=TORUS # 1x1x4 = 4 .br BPs=[330x331] Type=TORUS # 1x1x2 = 2 .br -BPs=[332x332] Type=TORUS # 1x1x1 = 1 +BPs=[332] Type=TORUS # 1x1x1 = 1 .br -BPs=[333x333] Type=SMALL NodeCards=4 Quarters=3 # 1/16 * 4 + 1/4 * 3 +BPs=[333] Type=SMALL 32CNBlocks=4 128CNBlocks=3 # 1/16 * 4 + 1/4 * 3 .SH "COPYING" Copyright (C) 2006 The Regents of the University of California. diff --git a/doc/man/man5/slurm.conf.5 b/doc/man/man5/slurm.conf.5 index 1fc3d6d6ceb82567029b85ff8d24ef54a0c26203..089c2d479d531fe96629e2061c819edaef5f0dcf 100644 --- a/doc/man/man5/slurm.conf.5 +++ b/doc/man/man5/slurm.conf.5 @@ -566,13 +566,13 @@ Also see \fBDefaultStorageUser\fR. \fBJobCredentialPrivateKey\fR Fully qualified pathname of a file containing a private key used for authentication by SLURM daemons. -This parameter is ignored if \fBCryptType=munge\fR. +This parameter is ignored if \fBCryptoType=crypto/munge\fR. .TP \fBJobCredentialPublicCertificate\fR Fully qualified pathname of a file containing a public key used for authentication by SLURM daemons. -This parameter is ignored if \fBCryptType=munge\fR. +This parameter is ignored if \fBCryptoType=crypto/munge\fR. .TP \fBJobFileAppend\fR @@ -1467,6 +1467,7 @@ Related configuration options include \fBResumeTimeout\fR, \fBResumeProgram\fR, Nodes which remain idle for this number of seconds will be placed into power save mode by \fBSuspendProgram\fR. A value of \-1 disables power save mode and is the default. +The maximum value is 65534 (18.2 hours). Related configuration options include \fBResumeTimeout\fR, \fBResumeProgram\fR, \fBResumeRate\fR, \fBSuspendProgram\fR, \fBSuspendRate\fR, \fBSuspendTimeout\fR, \fBSuspendExcNodes\fR, and \fBSuspendExcParts\fR. diff --git a/slurm.spec b/slurm.spec index 6c870083098d31b001a59dc3436878e1d7b9e121..18f5691cb9bd4cec6462e7f54b6f1356a7662795 100644 --- a/slurm.spec +++ b/slurm.spec @@ -75,14 +75,14 @@ %endif Name: slurm -Version: 2.0.5 +Version: 2.0.7 Release: 1%{?dist} Summary: Simple Linux Utility for Resource Management License: GPL Group: System Environment/Base -Source: slurm-2.0.5.tar.bz2 +Source: slurm-2.0.7.tar.bz2 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release} URL: https://computing.llnl.gov/linux/slurm/ @@ -269,7 +269,7 @@ SLURM process tracking plugin for SGI job containers. ############################################################################# %prep -%setup -n slurm-2.0.5 +%setup -n slurm-2.0.7 %build %configure --program-prefix=%{?_program_prefix:%{_program_prefix}} \ diff --git a/src/common/read_config.c b/src/common/read_config.c index ec6e36d768009f1d2ca3d8831ceed72d1c8ff1b4..f8e396aa962ad94463e6650971f29b83dee95e2f 100644 --- a/src/common/read_config.c +++ b/src/common/read_config.c @@ -2378,9 +2378,16 @@ _validate_and_set_defaults(slurm_ctl_conf_t *conf, s_p_hashtbl_t *hashtbl) s_p_get_string(&conf->suspend_program, "SuspendProgram", hashtbl); if (!s_p_get_uint16(&conf->suspend_rate, "SuspendRate", hashtbl)) conf->suspend_rate = DEFAULT_SUSPEND_RATE; - if (s_p_get_long(&long_suspend_time, "SuspendTime", hashtbl)) - conf->suspend_time = long_suspend_time + 1; - else + if (s_p_get_long(&long_suspend_time, "SuspendTime", hashtbl)) { + if (long_suspend_time >= 0xfffe) { + error("SuspendTime value (%ld) is greater than 65534", + long_suspend_time); + } else if (long_suspend_time < -1) { + error("SuspendTime value (%ld) is less than -1", + long_suspend_time); + } else + conf->suspend_time = long_suspend_time + 1; + } else conf->suspend_time = 0; if (!s_p_get_uint16(&conf->suspend_timeout, "SuspendTimeout", hashtbl)) conf->suspend_timeout = DEFAULT_SUSPEND_TIMEOUT; diff --git a/src/common/stepd_api.c b/src/common/stepd_api.c index 939974569740e57eda3196b0b3f6f498ff6abfe3..0c446152d5841aa3e4e294e2a5fbd3efcdf7d9d8 100644 --- a/src/common/stepd_api.c +++ b/src/common/stepd_api.c @@ -1,6 +1,6 @@ /*****************************************************************************\ * src/common/stepd_api.c - slurmstepd message API - * $Id: stepd_api.c 16867 2009-03-12 16:35:42Z jette $ + * $Id: stepd_api.c 18732 2009-09-21 21:34:51Z lipari $ ***************************************************************************** * Copyright (C) 2005-2007 The Regents of the University of California. * Copyright (C) 2008-2009 Lawrence Livermore National Security. @@ -203,7 +203,8 @@ stepd_connect(const char *directory, const char *nodename, int len; if (nodename == NULL) { - nodename = _guess_nodename(); + if (!(nodename = _guess_nodename())) + return -1; } if (directory == NULL) { slurm_ctl_conf_t *cf; diff --git a/src/plugins/accounting_storage/mysql/mysql_jobacct_process.c b/src/plugins/accounting_storage/mysql/mysql_jobacct_process.c index 938c163ee2220490d4661c3fc7b8c1deddcf3132..1a679da662460eac7d14a0a92367ee4412f83e88 100644 --- a/src/plugins/accounting_storage/mysql/mysql_jobacct_process.c +++ b/src/plugins/accounting_storage/mysql/mysql_jobacct_process.c @@ -1640,6 +1640,9 @@ extern int mysql_jobacct_process_archive(mysql_conn_t *mysql_conn, last_submit); return SLURM_ERROR; } + time_tm.tm_sec = 0; + time_tm.tm_min = 0; + time_tm.tm_hour = 0; time_tm.tm_mday = 1; time_tm.tm_mon -= arch_cond->purge_event; time_tm.tm_isdst = -1; @@ -1724,6 +1727,9 @@ exit_events: last_submit); return SLURM_ERROR; } + time_tm.tm_sec = 0; + time_tm.tm_min = 0; + time_tm.tm_hour = 0; time_tm.tm_mday = 1; time_tm.tm_mon -= arch_cond->purge_suspend; time_tm.tm_isdst = -1; @@ -1807,6 +1813,10 @@ exit_suspend: last_submit); return SLURM_ERROR; } + time_tm.tm_sec = 0; + time_tm.tm_min = 0; + time_tm.tm_hour = 0; + time_tm.tm_mday = 1; time_tm.tm_mon -= arch_cond->purge_step; time_tm.tm_isdst = -1; curr_end = mktime(&time_tm); @@ -1891,6 +1901,9 @@ exit_steps: last_submit); return SLURM_ERROR; } + time_tm.tm_sec = 0; + time_tm.tm_min = 0; + time_tm.tm_hour = 0; time_tm.tm_mday = 1; time_tm.tm_mon -= arch_cond->purge_job; time_tm.tm_isdst = -1; diff --git a/src/plugins/sched/backfill/backfill.c b/src/plugins/sched/backfill/backfill.c index 730247c93d61ce58ed23fd30d648125d63ae1b01..fde0b4696ab6961c0861bae0e2bf25bc70df91f5 100644 --- a/src/plugins/sched/backfill/backfill.c +++ b/src/plugins/sched/backfill/backfill.c @@ -386,7 +386,7 @@ static void _attempt_backfill(void) if ((part_ptr->root_only) && filter_root) continue; - if ((!job_independent(job_ptr)) || + if ((!job_independent(job_ptr, 0)) || (license_job_test(job_ptr) != SLURM_SUCCESS)) continue; @@ -438,8 +438,8 @@ static void _attempt_backfill(void) bit_and(avail_bitmap, up_node_bitmap); for (j=0; ; ) { if (node_space[j].end_time < start_res) - continue; - if (node_space[j].begin_time <= end_time) { + ; + else if (node_space[j].begin_time <= end_time) { bit_and(avail_bitmap, node_space[j].avail_bitmap); } else @@ -534,7 +534,7 @@ static int _start_job(struct job_record *job_ptr, bitstr_t *resv_bitmap) static uint32_t fail_jobid = 0; if (job_ptr->details->exc_node_bitmap) { - orig_exc_nodes = job_ptr->details->exc_node_bitmap; + orig_exc_nodes = bit_copy(job_ptr->details->exc_node_bitmap); bit_or(job_ptr->details->exc_node_bitmap, resv_bitmap); } else job_ptr->details->exc_node_bitmap = bit_copy(resv_bitmap); diff --git a/src/plugins/sched/wiki/get_jobs.c b/src/plugins/sched/wiki/get_jobs.c index 3362472cb56a12e234211f9d03138721ddcc794e..b428234e8ccec2cbd01a8a133b545d30a8e0e07e 100644 --- a/src/plugins/sched/wiki/get_jobs.c +++ b/src/plugins/sched/wiki/get_jobs.c @@ -2,7 +2,7 @@ * get_jobs.c - Process Wiki get job info request ***************************************************************************** * Copyright (C) 2006-2007 The Regents of the University of California. - * Copyright (C) 2008 Lawrence Livermore National Security. + * Copyright (C) 2008-2009 Lawrence Livermore National Security. * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). * Written by Morris Jette <jette1@llnl.gov> * CODE-OCEC-09-009. All rights reserved. @@ -240,9 +240,9 @@ static char * _dump_job(struct job_record *job_ptr, time_t update_time) } } else if (!IS_JOB_FINISHED(job_ptr)) { char *hosts = _task_list(job_ptr); - snprintf(tmp, sizeof(tmp), - "TASKLIST=%s;", hosts); - xstrcat(buf, tmp); + xstrcat(buf,"TASKLIST="); + xstrcat(buf, hosts); + xstrcat(buf, ";"); xfree(hosts); } diff --git a/src/plugins/select/bluegene/block_allocator/block_allocator.c b/src/plugins/select/bluegene/block_allocator/block_allocator.c index 90d70127497188343f5462d1fe05e90c6ead9568..a2b8719d4c4708106b07e5d30f5c049136764b4e 100644 --- a/src/plugins/select/bluegene/block_allocator/block_allocator.c +++ b/src/plugins/select/bluegene/block_allocator/block_allocator.c @@ -1,7 +1,7 @@ /*****************************************************************************\ * block_allocator.c - Assorted functions for layout of bluegene blocks, * wiring, mapping for smap, etc. - * $Id: block_allocator.c 18612 2009-09-02 19:00:21Z da $ + * $Id: block_allocator.c 18838 2009-10-08 16:59:14Z da $ ***************************************************************************** * Copyright (C) 2004 The Regents of the University of California. * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). @@ -1839,9 +1839,8 @@ extern int reset_all_removed_bps() int y, z; for (y = 0; y < DIM_SIZE[Y]; y++) for (z = 0; z < DIM_SIZE[Z]; z++) - if(ba_system_ptr->grid[x][y][z].used == 2) { + if(ba_system_ptr->grid[x][y][z].used == 2) ba_system_ptr->grid[x][y][z].used = 0; - } #else if(ba_system_ptr->grid[x].used == 2) ba_system_ptr->grid[x].used = 0; @@ -1851,10 +1850,11 @@ extern int reset_all_removed_bps() } /* - * IN: hostlist of midplanes we do not want + * IN: hostlist of midplanes we want to be able to use, mark all + * others as used. * RET: SLURM_SUCCESS on success, or SLURM_ERROR on error * - * Need to call rest_all_removed_bps before starting another + * Need to call reset_all_removed_bps before starting another * allocation attempt if possible use removable_set_bps since it is * faster. It does basically the opposite of this function. If you * have to come up with this list though it is faster to use this @@ -1894,22 +1894,13 @@ extern int set_all_bps_except(char *bps) y = temp; temp = start % HOSTLIST_BASE; z = temp; - if(ba_system_ptr->grid[x][y][z].state != NODE_STATE_IDLE) { - error("we can't use this node %c%c%c", - alpha_num[x], - alpha_num[y], - alpha_num[z]); - - return SLURM_ERROR; - } - ba_system_ptr->grid[x][y][z].state = NODE_STATE_END; + if((ba_system_ptr->grid[x][y][z].state == NODE_STATE_UNKNOWN) + || (ba_system_ptr->grid[x][y][z].state == NODE_STATE_IDLE)) + ba_system_ptr->grid[x][y][z].state = NODE_STATE_END; #else - if(ba_system_ptr->grid[x].state != NODE_STATE_IDLE) { - error("we can't use this node %d", x); - - return SLURM_ERROR; - } - ba_system_ptr->grid[x].state = NODE_STATE_END; + if((ba_system_ptr->grid[x].state == NODE_STATE_UNKNOWN) + || (ba_system_ptr->grid[x].state == NODE_STATE_IDLE)) + ba_system_ptr->grid[x].state = NODE_STATE_END; #endif free(host); } diff --git a/src/plugins/select/bluegene/block_allocator/bridge_linker.c b/src/plugins/select/bluegene/block_allocator/bridge_linker.c index 43ef5210fdfd9dd1ce8a1b6eb11c7e83c60aafa3..5b386bc44a4567333c716ae2cf20e4d848719a82 100644 --- a/src/plugins/select/bluegene/block_allocator/bridge_linker.c +++ b/src/plugins/select/bluegene/block_allocator/bridge_linker.c @@ -223,12 +223,14 @@ extern int bridge_init() "setSayMessageParams" }; #endif - int n_syms = sizeof( syms ) / sizeof( char * ); + int n_syms; int rc; if(initialized) return 1; + n_syms = sizeof( syms ) / sizeof( char * ); + initialized = true; if(!_get_syms(n_syms, syms, (void **) &bridge_api)) return 0; @@ -249,8 +251,9 @@ extern int bridge_fini() { if(handle) dlclose(handle); - - return SLURM_ERROR; + initialized = false; + + return SLURM_SUCCESS; } extern status_t bridge_get_bg(my_bluegene_t **bg) @@ -298,8 +301,19 @@ extern status_t bridge_get_block_info(pm_partition_id_t pid, int rc = CONNECTION_ERROR; if(!bridge_init()) return rc; + + /* this is here to make sure we don't lock up things with + polling and the long running get_BG call */ + rc = pthread_mutex_trylock(&api_file_mutex); + if (rc == EBUSY) + return rc; + else if(rc) { + errno = rc; + error("%s:%d %s: pthread_mutex_trylock(): %m", + __FILE__, __LINE__, __CURRENT_FUNC__); + } - slurm_mutex_lock(&api_file_mutex); + //slurm_mutex_lock(&api_file_mutex); rc = (*(bridge_api.get_partition_info))(pid, partition); slurm_mutex_unlock(&api_file_mutex); return rc; diff --git a/src/plugins/select/bluegene/plugin/bg_block_info.c b/src/plugins/select/bluegene/plugin/bg_block_info.c index cec58fa4d7b2f44aad3a4646e4a5f31b7fbe26dd..0d9c33c455a61999f9c60265126188cc93fbb726 100644 --- a/src/plugins/select/bluegene/plugin/bg_block_info.c +++ b/src/plugins/select/bluegene/plugin/bg_block_info.c @@ -1,7 +1,7 @@ /*****************************************************************************\ * bg_block_info.c - bluegene block information from the db2 database. * - * $Id: bg_block_info.c 18147 2009-07-15 16:25:53Z da $ + * $Id: bg_block_info.c 18904 2009-10-15 15:52:20Z da $ ***************************************************************************** * Copyright (C) 2004-2006 The Regents of the University of California. * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). @@ -278,6 +278,16 @@ extern int update_block_list() break; } } + + /* If the call was busy, just skip this + iteration. It usually means something like + rm_get_BG was called which can be a very + long call */ + if(rc == EBUSY) { + debug5("lock was busy, aborting"); + break; + } + error("bridge_get_block_info(%s): %s", name, bg_err_str(rc)); @@ -357,6 +367,7 @@ extern int update_block_list() //plugin set error && bg_record->state != state) { int skipped_dealloc = 0; + debug("state of Block %s was %d and now is %d", bg_record->bg_block_id, bg_record->state, @@ -382,8 +393,18 @@ extern int update_block_list() xfree(bg_record->target_name); bg_record->target_name = xstrdup(bg_record->user_name); - } - + } else if((bg_record->state + == RM_PARTITION_DEALLOCATING) + && (state == RM_PARTITION_CONFIGURING)) + /* This is a funky state IBM says + isn't a bug, but all their + documentation says this doesn't + happen, but IBM says oh yeah, you + weren't really suppose to notice + that. So we will just skip this + state and act like this didn't happen. */ + goto nochange_state; + bg_record->state = state; if(bg_record->state == RM_PARTITION_DEALLOCATING @@ -402,7 +423,7 @@ extern int update_block_list() xstrdup(bg_record->user_name); } #endif - else if(bg_record->state == RM_PARTITION_CONFIGURING) + else if(bg_record->state == RM_PARTITION_CONFIGURING) bg_record->boot_state = 1; else if(bg_record->state == RM_PARTITION_FREE) { if(remove_from_bg_list(bg_lists->job_running, @@ -425,8 +446,8 @@ extern int update_block_list() trigger_block_error(); } updated = 1; - } + nochange_state: /* check the boot state */ debug3("boot state for block %s is %d", @@ -600,6 +621,15 @@ extern int update_freeing_block_list() break; } } + /* If the call was busy, just skip this + iteration. It usually means something like + rm_get_BG was called which can be a very + long call */ + if(rc == EBUSY) { + debug5("lock was busy, aborting"); + break; + } + error("bridge_get_block_info(%s): %s", name, bg_err_str(rc)); diff --git a/src/plugins/select/bluegene/plugin/bluegene.c b/src/plugins/select/bluegene/plugin/bluegene.c index 867e2099d252347ec5f31a43b11418ecab461bfd..024098f54f6118b4d1acc1bfc885225a8e7656c6 100644 --- a/src/plugins/select/bluegene/plugin/bluegene.c +++ b/src/plugins/select/bluegene/plugin/bluegene.c @@ -1,7 +1,7 @@ /*****************************************************************************\ * bluegene.c - blue gene node configuration processing module. * - * $Id: bluegene.c 17982 2009-06-26 16:25:33Z da $ + * $Id: bluegene.c 18897 2009-10-14 19:09:10Z da $ ***************************************************************************** * Copyright (C) 2004 The Regents of the University of California. * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). @@ -41,9 +41,10 @@ #include "defined_block.h" #include <stdio.h> -#define MMCS_POLL_TIME 30 /* poll MMCS for down switches and nodes - * every 120 secs */ -#define BG_POLL_TIME 0 /* poll bg blocks every 3 secs */ +#define MMCS_POLL_TIME 30 /* seconds between poll of MMCS for + * down switches and nodes */ +#define BG_POLL_TIME 1 /* seconds between poll of state + * change in bg blocks */ #define _DEBUG 0 @@ -359,7 +360,6 @@ extern void *block_agent(void *args) last_bg_test = now - BG_POLL_TIME; while (!agent_fini) { - if (difftime(now, last_bg_test) >= BG_POLL_TIME) { if (agent_fini) /* don't bother */ break; /* quit now */ @@ -378,10 +378,10 @@ extern void *block_agent(void *args) "update_block_list 2"); } } - now = time(NULL); } sleep(1); + now = time(NULL); } return NULL; } @@ -402,9 +402,12 @@ extern void *state_agent(void *args) if (agent_fini) /* don't bother */ break; /* quit now */ if(blocks_are_created) { - last_mmcs_test = now; - /* can run for a while */ + /* can run for a while so set the + * time after the call so there is + * always MMCS_POLL_TIME between + * calls */ test_mmcs_failures(); + last_mmcs_test = time(NULL); } } diff --git a/src/plugins/select/bluegene/plugin/sfree.c b/src/plugins/select/bluegene/plugin/sfree.c index c8460347d6c908b57d253b74b6a7b0b9c34e8f2a..84919d1d88de12da301352effccb7a9231e2f556 100644 --- a/src/plugins/select/bluegene/plugin/sfree.c +++ b/src/plugins/select/bluegene/plugin/sfree.c @@ -1,6 +1,6 @@ /*****************************************************************************\ * sfree.c - free specified block or all blocks. - * $Id: sfree.c 18185 2009-07-17 19:02:22Z da $ + * $Id: sfree.c 18904 2009-10-15 15:52:20Z da $ ***************************************************************************** * Copyright (C) 2004 The Regents of the University of California. * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). @@ -364,6 +364,15 @@ static int _update_bg_record_state() continue; } + /* If the call was busy, just skip this + iteration. It usually means something like + rm_get_BG was called which can be a very + long call */ + if(rc == EBUSY) { + debug5("lock was busy, aborting"); + break; + } + error("bridge_get_block_info(%s): %s", name, _bg_err_str(rc)); diff --git a/src/plugins/select/bluegene/plugin/state_test.c b/src/plugins/select/bluegene/plugin/state_test.c index 2c636d91f2bd0d29fb6377ce42da24651fc9aa94..2b2042107035e236912158fb79a4efe69724eff2 100644 --- a/src/plugins/select/bluegene/plugin/state_test.c +++ b/src/plugins/select/bluegene/plugin/state_test.c @@ -2,7 +2,7 @@ * state_test.c - Test state of Bluegene base partitions and switches. * DRAIN nodes in SLURM that are not usable. * - * $Id: state_test.c 17317 2009-04-21 21:39:50Z da $ + * $Id: state_test.c 18875 2009-10-12 20:34:17Z da $ ***************************************************************************** * Copyright (C) 2004-2006 The Regents of the University of California. * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). @@ -351,6 +351,8 @@ static int _test_down_nodecards(rm_BP_t *bp_ptr) /* } */ clean_up: + if(ncard_list) + bridge_free_nodecard_list(ncard_list); xfree(node_name); /* if(ionode_bitmap) */ /* FREE_NULL_BITMAP(ionode_bitmap); */ diff --git a/src/plugins/select/cons_res/job_test.c b/src/plugins/select/cons_res/job_test.c index b219e2266915f4cda4dee98cb498165102bbd249..b090dde51fb3eede5fe4866fb6993b5185878c36 100644 --- a/src/plugins/select/cons_res/job_test.c +++ b/src/plugins/select/cons_res/job_test.c @@ -1201,7 +1201,7 @@ static int _eval_nodes_topo(struct job_record *job_ptr, bitstr_t *bitmap, bitstr_t *avail_nodes_bitmap = NULL; /* nodes on any switch */ bitstr_t *req_nodes_bitmap = NULL; int rem_cpus, rem_nodes; /* remaining resources desired */ - int avail_cpus, alloc_cpus = 0; + int avail_cpus; int i, j, rc = SLURM_SUCCESS; int best_fit_inx, first, last; int best_fit_nodes, best_fit_cpus; @@ -1289,7 +1289,6 @@ static int _eval_nodes_topo(struct job_record *job_ptr, bitstr_t *bitmap, avail_cpus = _get_cpu_cnt(job_ptr, i, cpu_cnt, freq, size); rem_cpus -= avail_cpus; - alloc_cpus += avail_cpus; for (j=0; j<switch_record_cnt; j++) { if (!bit_test(switches_bitmap[j], i)) continue; @@ -1327,7 +1326,6 @@ static int _eval_nodes_topo(struct job_record *job_ptr, bitstr_t *bitmap, avail_cpus = _get_cpu_cnt(job_ptr, i, cpu_cnt, freq, size); rem_cpus -= avail_cpus; - alloc_cpus += avail_cpus; } } if ((rem_nodes <= 0) && (rem_cpus <= 0)) @@ -1456,7 +1454,6 @@ static int _eval_nodes_topo(struct job_record *job_ptr, bitstr_t *bitmap, rem_nodes--; max_nodes--; rem_cpus -= avail_cpus; - alloc_cpus += avail_cpus; if ((max_nodes <= 0) || ((rem_nodes <= 0) && (rem_cpus <= 0))) break; @@ -1469,11 +1466,7 @@ static int _eval_nodes_topo(struct job_record *job_ptr, bitstr_t *bitmap, } else rc = SLURM_ERROR; - fini: if (rc == SLURM_SUCCESS) { - /* Job's total_procs is needed for SELECT_MODE_WILL_RUN */ - job_ptr->total_procs = alloc_cpus; - } - FREE_NULL_BITMAP(avail_nodes_bitmap); + fini: FREE_NULL_BITMAP(avail_nodes_bitmap); FREE_NULL_BITMAP(req_nodes_bitmap); for (i=0; i<switch_record_cnt; i++) bit_free(switches_bitmap[i]); @@ -1753,8 +1746,7 @@ extern int cr_job_test(struct job_record *job_ptr, bitstr_t *bitmap, "insufficient resources"); return SLURM_ERROR; } else if (test_only) { - /* FIXME: does "test_only" expect struct_job_res - * to be filled out? For now we assume NO */ + /* Note: "test_only" does not need struct_job_res */ FREE_NULL_BITMAP(orig_map); FREE_NULL_BITMAP(free_cores); FREE_NULL_BITMAP(avail_cores); @@ -1776,7 +1768,10 @@ extern int cr_job_test(struct job_record *job_ptr, bitstr_t *bitmap, * of resources for this job. Here is the procedure: * * Step 1: Seek idle nodes across all partitions. If successful then - * place job and exit. If not successful, then continue: + * place job and exit. If not successful, then continue. Two + * related items to note: + * 1. Jobs that don't share CPUs finish with step 1. + * 2. The remaining steps assume sharing or preemption. * * Step 2: Remove resources that are in use by higher-pri partitions, * and test that job can still succeed. If not then exit. @@ -1829,6 +1824,16 @@ extern int cr_job_test(struct job_record *job_ptr, bitstr_t *bitmap, debug3("cons_res: cr_job_test: test 1 fail - " "not enough idle resources"); + /* If no sched/gang, then check for Shared=NO (NODE_CR_ONE_ROW). Note + * that Shared=EXCLUSIVE was already addressed in _verify_node_state(). + */ + if (!cr_priority_selection_enabled() && + job_node_req == NODE_CR_ONE_ROW) { + /* this job CANNOT share CPUs regardless of priority, + * so we fail here */ + goto alloc_job; + } + /*** Step 2 ***/ bit_copybits(bitmap, orig_map); bit_copybits(free_cores, avail_cores); @@ -2007,6 +2012,12 @@ alloc_job: if ((mode != SELECT_MODE_WILL_RUN) && (job_ptr->part_ptr == NULL)) error_code = EINVAL; + if ((error_code == SLURM_SUCCESS) && (mode == SELECT_MODE_WILL_RUN)) { + /* Set a reasonable value for the number of allocated CPUs. + * Without computing task distribution this is only a guess */ + job_ptr->total_procs = MAX(job_ptr->num_procs, + job_ptr->details->min_nodes); + } if ((error_code != SLURM_SUCCESS) || (mode != SELECT_MODE_RUN_NOW)) { FREE_NULL_BITMAP(free_cores); xfree(cpu_count); diff --git a/src/scontrol/info_job.c b/src/scontrol/info_job.c index 41553593450bc276f9c9fc2c703ec522f199b2ba..291f699a84fe7561b8ebddd5ed5d8db535ed632f 100644 --- a/src/scontrol/info_job.c +++ b/src/scontrol/info_job.c @@ -650,7 +650,7 @@ extern int scontrol_encode_hostlist(char *hostlist) { char *io_buf = NULL, *tmp_list, *ranged_string; - int buf_size = 0; + int buf_size = 1024 * 1024; hostlist_t hl; if (!hostlist) { @@ -665,7 +665,6 @@ scontrol_encode_hostlist(char *hostlist) fprintf(stderr, "Can not open %s\n", hostlist); return SLURM_ERROR; } - buf_size = 1024 * 1024; io_buf = xmalloc(buf_size); buf_read = read(fd, io_buf, buf_size); close(fd); @@ -680,9 +679,12 @@ scontrol_encode_hostlist(char *hostlist) } else tmp_list = hostlist; - buf_size = strlen(tmp_list) + 1; - ranged_string = xmalloc(buf_size); hl = hostlist_create(tmp_list); + if (hl == NULL) { + fprintf(stderr, "Invalid hostlist: %s\n", tmp_list); + return SLURM_ERROR; + } + ranged_string = xmalloc(buf_size); hostlist_ranged_string(hl, buf_size, ranged_string); printf("%s\n", ranged_string); hostlist_destroy(hl); diff --git a/src/slurmctld/job_mgr.c b/src/slurmctld/job_mgr.c index 34bc923ad83421b4516622fc5cc3a63dfc1f6766..3672874680f15d4052179432a17ae05a04732c42 100644 --- a/src/slurmctld/job_mgr.c +++ b/src/slurmctld/job_mgr.c @@ -1770,7 +1770,7 @@ extern int job_allocate(job_desc_msg_t * job_specs, int immediate, return error_code; } xassert(job_ptr); - independent = job_independent(job_ptr); + independent = job_independent(job_ptr, will_run); /* priority needs to be calculated after this since we set a begin time in job_independent and that lets us know if the job is eligible. @@ -4473,7 +4473,7 @@ static bool _top_priority(struct job_record *job_ptr) continue; if (job_ptr2->job_state != JOB_PENDING) continue; - if (!job_independent(job_ptr2)) + if (!job_independent(job_ptr2, 0)) continue; if ((job_ptr2->resv_name && (!job_ptr->resv_name)) || ((!job_ptr2->resv_name) && job_ptr->resv_name)) @@ -5956,7 +5956,7 @@ extern void job_completion_logger(struct job_record *job_ptr) * IN job_ptr - pointer to job being tested * RET - true if job no longer must be defered for another job */ -extern bool job_independent(struct job_record *job_ptr) +extern bool job_independent(struct job_record *job_ptr, int will_run) { struct job_details *detail_ptr = job_ptr->details; time_t now = time(NULL); @@ -5989,7 +5989,7 @@ extern bool job_independent(struct job_record *job_ptr) xfree(job_ptr->state_desc); send_acct_rec = true; } - if (send_acct_rec) { + if (send_acct_rec && !will_run) { /* We want to record when a job becomes eligible in * order to calculate reserved time (a measure of * system over-subscription), job really is not diff --git a/src/slurmctld/job_scheduler.c b/src/slurmctld/job_scheduler.c index 3bd46a2b2d5a3e146458cbcbf9afdd3ef335a369..29d87ff64471507e509f5cfad4233dbccd5ad345 100644 --- a/src/slurmctld/job_scheduler.c +++ b/src/slurmctld/job_scheduler.c @@ -155,7 +155,7 @@ extern int build_job_queue(struct job_queue **job_queue) (job_ptr->job_state & JOB_COMPLETING) || (job_ptr->priority == 0)) /* held */ continue; - if (!job_independent(job_ptr)) /* can not run now */ + if (!job_independent(job_ptr, 0)) /* can not run now */ continue; if (job_buffer_size <= job_queue_size) { job_buffer_size += 200; @@ -237,7 +237,7 @@ extern void set_job_elig_time(void) (job_ptr->details->min_nodes > part_ptr->max_nodes))) continue; /* Job's eligible time is set in job_independent() */ - if (!job_independent(job_ptr)) + if (!job_independent(job_ptr, 0)) continue; } list_iterator_destroy(job_iterator); diff --git a/src/slurmctld/node_mgr.c b/src/slurmctld/node_mgr.c index f6a8f949a2eb29b8c2733ef1d98c59f256c9a380..ee553d5781eec254479966e8cf77d436e20ceff9 100644 --- a/src/slurmctld/node_mgr.c +++ b/src/slurmctld/node_mgr.c @@ -583,20 +583,10 @@ extern int load_all_node_state ( bool state_only ) node_ptr->last_idle = now; } xfree (node_name); - if(node_ptr) { - /* If the state is UNKNOWN we will assume IDLE - until the nodes check in. This is needed - for bluegene to set up drained nodes - correctly. */ - if((node_ptr->node_state & NODE_STATE_BASE) - == NODE_STATE_UNKNOWN) - node_ptr->node_state |= NODE_STATE_IDLE; - + if(node_ptr) select_g_update_node_state( (node_ptr - node_record_table_ptr), node_ptr->node_state); - } - } fini: info("Recovered state of %d nodes", node_cnt); diff --git a/src/slurmctld/proc_req.c b/src/slurmctld/proc_req.c index 6708561648f3d2d87fee7cf09a55aa75c0879313..8fa9c1eae9126821a19f84fbe4d950a7a877b303 100644 --- a/src/slurmctld/proc_req.c +++ b/src/slurmctld/proc_req.c @@ -2642,11 +2642,16 @@ static void _slurm_rpc_job_ready(slurm_msg_t * msg) int error_code, result; job_id_msg_t *id_msg = (job_id_msg_t *) msg->data; DEF_TIMERS; + /* Locks: read job */ + slurmctld_lock_t job_read_lock = { + NO_LOCK, READ_LOCK, NO_LOCK, NO_LOCK }; slurm_msg_t response_msg; return_code_msg_t rc_msg; START_TIMER; + lock_slurmctld(job_read_lock); error_code = job_node_ready(id_msg->job_id, &result); + unlock_slurmctld(job_read_lock); END_TIMER2("_slurm_rpc_job_ready"); if (error_code) { diff --git a/src/slurmctld/slurmctld.h b/src/slurmctld/slurmctld.h index 2cadba0b37699e205f90fcb4ca6b2551933c321b..59d7b64469286a0fd8d49e375d9f8c690fbbf13e 100644 --- a/src/slurmctld/slurmctld.h +++ b/src/slurmctld/slurmctld.h @@ -1069,9 +1069,10 @@ extern int job_complete (uint32_t job_id, uid_t uid, bool requeue, * job_independent - determine if this job has a depenentent job pending * or if the job's scheduled begin time is in the future * IN job_ptr - pointer to job being tested + * IN will_run - is this a test for will_run or not * RET - true if job no longer must be defered for another job */ -extern bool job_independent(struct job_record *job_ptr); +extern bool job_independent(struct job_record *job_ptr, int will_run); /* * job_req_node_filter - job reqeust node filter. diff --git a/src/smap/configure_functions.c b/src/smap/configure_functions.c index 35bd8dfc5448b23dfd17a0f6c267e2f71cab7b82..5495e671a49ceaad640a0c6335d727da40462767 100644 --- a/src/smap/configure_functions.c +++ b/src/smap/configure_functions.c @@ -797,7 +797,7 @@ static int _remove_allocation(char *com, List allocated_blocks) { ListIterator results_i; allocated_block_t *allocated_block = NULL; - int i=6, found=0; + int i=1, found=0; int len = strlen(com); char letter; @@ -890,17 +890,15 @@ static int _copy_allocation(char *com, List allocated_blocks) allocated_block_t *temp_block = NULL; ba_request_t *request = NULL; - int i=0; + int i=1; int len = strlen(com); char letter = '\0'; int count = 1; int *geo = NULL, *geo_ptr = NULL; - while(i<=len) { - if((i>0) && (com[i-1] != ' ')) - break; + /* look for the space after copy */ + while(com[i-1]!=' ' && i<len) i++; - } if(i<=len) { /* Here we are looking for a real number for the count diff --git a/src/smap/opts.c b/src/smap/opts.c index 6c7b395713cf7c6cfc45fc357be2310ee8965733..10827917ea3e995dbafbc17e26eeadfce31d596d 100644 --- a/src/smap/opts.c +++ b/src/smap/opts.c @@ -95,7 +95,7 @@ extern void parse_command_line(int argc, char *argv[]) case (int) 'i': params.iterate = atoi(optarg); if (params.iterate <= 0) { - error("Error: --iterate=%s"); + error("Error: --iterate=%s", optarg); exit(1); } break; diff --git a/src/srun/srun.c b/src/srun/srun.c index 9698b78ddacda0965f5019ac216e02a1d6fd5e01..6f2b0eaaa99e222ebad4440a161ac38f7ecc2db1 100644 --- a/src/srun/srun.c +++ b/src/srun/srun.c @@ -1091,20 +1091,26 @@ _is_openmpi_port_error(int errcode) } static void -_handle_openmpi_port_error(const char *tasks, const char *hosts) +_handle_openmpi_port_error(const char *tasks, const char *hosts, + slurm_step_ctx_t *step_ctx) { + uint32_t job_id, step_id; char *msg = "retrying"; if (!retry_step_begin) { retry_step_begin = true; retry_step_cnt++; } - if (retry_step_cnt >= MAX_STEP_RETRIES) { + + if (retry_step_cnt >= MAX_STEP_RETRIES) msg = "aborting"; - opt.kill_bad_exit = true; - } error("%s: tasks %s unable to claim reserved port, %s.", hosts, tasks, msg); + + slurm_step_ctx_get(step_ctx, SLURM_STEP_CTX_JOBID, &job_id); + slurm_step_ctx_get(step_ctx, SLURM_STEP_CTX_STEPID, &step_id); + info("Terminating job step %u.%u", job_id, step_id); + slurm_kill_job_step(job_id, step_id, SIGKILL); } static void @@ -1128,11 +1134,13 @@ _task_finish(task_exit_msg_t *msg) verbose("%s: %s %s: Completed", hosts, task_str, tasks); normal_exit = 1; } - else if (_is_openmpi_port_error(rc)) - _handle_openmpi_port_error(tasks, hosts); - else + else if (_is_openmpi_port_error(rc)) { + _handle_openmpi_port_error(tasks, hosts, + job->step_ctx); + } else { error("%s: %s %s: Exited with exit code %d", hosts, task_str, tasks, rc); + } if (!WIFEXITED(global_rc) || (rc > WEXITSTATUS(global_rc))) global_rc = msg->return_code; } diff --git a/src/sview/block_info.c b/src/sview/block_info.c index 412b95efe7dd8106ed9493f25b5623f0892937ed..1e1fcdbc1cb144b2441349ea1916d7cfd08abf6e 100644 --- a/src/sview/block_info.c +++ b/src/sview/block_info.c @@ -136,7 +136,7 @@ static display_data_t options_data_block[] = { {G_TYPE_STRING, JOB_PAGE, "Jobs", TRUE, BLOCK_PAGE}, {G_TYPE_STRING, PART_PAGE, "Partition", TRUE, BLOCK_PAGE}, {G_TYPE_STRING, NODE_PAGE, "Base Partitions", TRUE, BLOCK_PAGE}, - {G_TYPE_STRING, SUBMIT_PAGE, "Job Submit", FALSE, BLOCK_PAGE}, + //{G_TYPE_STRING, SUBMIT_PAGE, "Job Submit", FALSE, BLOCK_PAGE}, {G_TYPE_STRING, RESV_PAGE, "Reservation", TRUE, BLOCK_PAGE}, {G_TYPE_NONE, -1, NULL, FALSE, EDIT_NONE} }; diff --git a/src/sview/job_info.c b/src/sview/job_info.c index f2c1188d089b104546a115aed4c3285fa0e1ca25..c76e6a05facc9e0de99cf40a73a94a1dd152bfda 100644 --- a/src/sview/job_info.c +++ b/src/sview/job_info.c @@ -3111,14 +3111,6 @@ extern void popup_all_job(GtkTreeModel *model, GtkTreeIter *iter, int id) snprintf(title, 100, "Block with job %d.%d", jobid, stepid); break; - case SUBMIT_PAGE: - if(stepid == NO_VAL) - snprintf(title, 100, "Submit job on job %d", jobid); - else - snprintf(title, 100, "Submit job on job %d.%d", - jobid, stepid); - - break; case INFO_PAGE: if(stepid == NO_VAL) snprintf(title, 100, "Full info for job %d", jobid); diff --git a/src/sview/node_info.c b/src/sview/node_info.c index 1942dd6bb8edaa752bfa36e165ebc576e953491c..e682f2e5a01053eb5cb5bba6915f796b38be6f90 100644 --- a/src/sview/node_info.c +++ b/src/sview/node_info.c @@ -108,7 +108,7 @@ static display_data_t options_data_node[] = { #endif {G_TYPE_STRING, PART_PAGE, "Partition", TRUE, NODE_PAGE}, {G_TYPE_STRING, RESV_PAGE, "Reservation", TRUE, NODE_PAGE}, - {G_TYPE_STRING, SUBMIT_PAGE, "Job Submit", FALSE, NODE_PAGE}, + //{G_TYPE_STRING, SUBMIT_PAGE, "Job Submit", FALSE, NODE_PAGE}, {G_TYPE_NONE, -1, NULL, FALSE, EDIT_NONE} }; diff --git a/src/sview/part_info.c b/src/sview/part_info.c index e442b458049d7a489cc66e6d6ad54f2b3bfbd496..cef05a735fff41102198c18032fb8a4ba0d38f31 100644 --- a/src/sview/part_info.c +++ b/src/sview/part_info.c @@ -193,7 +193,7 @@ static display_data_t options_data_part[] = { #else {G_TYPE_STRING, NODE_PAGE, "Nodes", TRUE, PART_PAGE}, #endif - {G_TYPE_STRING, SUBMIT_PAGE, "Job Submit", FALSE, PART_PAGE}, + //{G_TYPE_STRING, SUBMIT_PAGE, "Job Submit", FALSE, PART_PAGE}, {G_TYPE_STRING, RESV_PAGE, "Reservations", TRUE, PART_PAGE}, {G_TYPE_NONE, -1, NULL, FALSE, EDIT_NONE} }; diff --git a/testsuite/expect/test1.59 b/testsuite/expect/test1.59 index c6ee7cd315f806e46e0ae5365f03427dbbc5daf6..6ad5da11376e79ef7d419eeb69fc6995e689c2cf 100755 --- a/testsuite/expect/test1.59 +++ b/testsuite/expect/test1.59 @@ -117,7 +117,7 @@ for {set i 0} {$i<4} {incr i} { previous srun\n" exit 1 } - send "export SLURM_HOSTFILE=$hostfile\n" + send "export SLURM_HOSTFILE=$hostfile\r" expect { -re $prompt { #send_user "srun completed\n" @@ -175,7 +175,7 @@ for {set i 0} {$i<4} {incr i} { # # execute srun with a specific node count # - send "$srun -l $extra -O $bin_printenv SLURMD_NODENAME\n" + send "$srun -l $extra -O $bin_printenv SLURMD_NODENAME\r" expect { -re "($number): ($alpha_numeric_under)" { set task_id $expect_out(1,string) @@ -256,7 +256,7 @@ for {set i 0} {$i<4} {incr i} { } } } -send "unset SLURM_HOSTFILE\n" +send "unset SLURM_HOSTFILE\r" expect { -re $prompt { #send_user "srun completed\n" @@ -327,7 +327,7 @@ for {set i 0} {$i<5} {incr i} { # execute srun with a specific node count # - send "$srun -l $extra -O $bin_printenv SLURMD_NODENAME\n" + send "$srun -l $extra -O $bin_printenv SLURMD_NODENAME\r" expect { -re "($number): ($alpha_numeric_under)" { @@ -406,7 +406,7 @@ for {set i 0} {$i<5} {incr i} { } } -send "exit\n" +send "exit\r" expect { -re "error.*Exit 1" { send_user "This error is expected, no worries\n" diff --git a/testsuite/expect/test7.3.prog.c b/testsuite/expect/test7.3.prog.c index bab653f8f582820c3e808d71c899af8d737dc8ee..6b597b8c27c642b928a26e2ada530a20b93b7169 100644 --- a/testsuite/expect/test7.3.prog.c +++ b/testsuite/expect/test7.3.prog.c @@ -69,10 +69,11 @@ int main (int argc, char *argv[]) /* Create a job allocation */ slurm_init_job_desc_msg( &job_req ); - job_req.min_nodes = min_nodes; - job_req.max_nodes = max_nodes; - job_req.user_id = getuid(); - job_req.group_id = getgid(); + job_req.min_nodes = min_nodes; + job_req.max_nodes = max_nodes; + job_req.user_id = getuid(); + job_req.group_id = getgid(); + job_req.time_limit = 1; if (slurm_allocate_resources(&job_req, &job_resp)) { slurm_perror ("slurm_allocate_resources"); exit(0);