]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
tests: add another sort/nmerge test
authorPaul Eggert <eggert@CS.UCLA.EDU>
Mon, 9 Mar 2009 21:56:13 +0000 (14:56 -0700)
committerJim Meyering <meyering@redhat.com>
Wed, 18 Mar 2009 20:44:45 +0000 (21:44 +0100)
* tests/Makefile.am (TESTS): Add sort-merge-fdlimit.
* tests/misc/sort-merge-fdlimit: New file.
* doc/coreutils.texi (sort invocation): Document that we now silently
lower nmerge if necessary.
Patch by Paul Eggert, Nima Nikzad, Max Chang, Alexander Nguyen,
Sahil Amoli, and Nick Graham.

THANKS
doc/coreutils.texi
tests/Makefile.am
tests/misc/sort-merge-fdlimit [new file with mode: 0755]

diff --git a/THANKS b/THANKS
index 3b933ff43b0fe36a2f9f4b36edb55da44925bdfd..d4b2d616fc17bb03b524ab3dee463878ebd720c2 100644 (file)
--- a/THANKS
+++ b/THANKS
@@ -22,6 +22,7 @@ Albert Hopkins                      ahopkins@dynacare.com
 Alberto Accomazzi                   alberto@cfa0.harvard.edu
 aldomel                             aldomel@ix.netcom.com
 Alen Muzinic                        zveki@fly.cc.fer.hr
+Alexander Nguyen                    vinh@seas.ucla.edu
 Alexander V. Lukyanov               lav@netis.ru
 Allen Hewes                         allen@decisiv.net
 Axel Dörfler                        axeld@pinc-software.de
@@ -380,6 +381,7 @@ Matthew Woehlke                     mw_triad@users.sourceforge.net
 Matthias Urlichs                    smurf@noris.de
 Matti Aarnio                        matti.aarnio@zmailer.org
 Mattias Wadenstein                  maswan@acc.umu.se
+Max Chang                           maxchang@ucla.edu
 Meelis Roos                         mroos@tartu.cyber.ee
 Michael                             michael@aplatform.com
 Michael ???                         michael@roka.net
@@ -417,11 +419,13 @@ Neal H Walfield                     neal@cs.uml.edu
 Neil Brown                          neilb@cse.unsw.edu.au
 Nelson H. F. Beebe                  beebe@math.utah.edu
 Nick Estes                          debian@nickstoys.com
+Nick Graham                         nick.d.graham@gmail.com
 Nick Lawes                          nlawes@silverplatter.com
 Nickolai Zeldovich                  nickolai@cs.stanford.edu
 Nicolas François                    nicolas.francois@centraliens.net
 Niklas Edmundsson                   nikke@acc.umu.se
 Nikola Milutinovic                  Nikola.Milutinovic@ev.co.yu
+Nima Nikzad                         nnikzad@ucla.edu
 Noah Friedman                       friedman@splode.com
 Noel Cragg                          noel@red-bean.com
 Norbert Kiesel                      nkiesel@tbdnetworks.com
@@ -494,6 +498,7 @@ Ross Alexander                      r.alexander@auckland.ac.nz
 Ross Paterson                       rap@doc.ic.ac.uk
 Ross Ridge                          rridge@calum.csclub.uwaterloo.ca
 Rudolf Kastl                        rkastl@redhat.com
+Sahil Amoli                         sahilamoli@gmail.com
 Sami Farin                          sfarin@ratol.fi
 Samuel Tardieu                      sam@rfc1149.net
 Samuel Thibault                     samuel.thibault@ens-lyon.org
index 6f8c1976175c7d6438db34ba33cb7739af638a8d..04db67663e867faf61c26b097b200735cd4e81f4 100644 (file)
@@ -3937,13 +3937,17 @@ and I/0.  Conversely a small value of @var{nmerge} may reduce memory
 requirements and I/0 at the expense of temporary storage consumption and
 merge performance.
 
-The value of @var{nmerge} must be at least 2.
+The value of @var{nmerge} must be at least 2.  The default value is
+currently 16, but this is implementation-dependent and may change in
+the future.
 
 The value of @var{nmerge} may be bounded by a resource limit for open
-file descriptors.  Try @samp{ulimit -n} or @samp{getconf OPEN_MAX} to
-to display the limit for a particular system.
-If the value of @var{nmerge} exceeds this limit, then @command{sort} will
-issue a warning to standard error and exit with a nonzero status.
+file descriptors.  The commands @samp{ulimit -n} or @samp{getconf
+OPEN_MAX} may display limits for your systems; these limits may be
+modified further if your program already has some files open, or if
+the operating system has other limits on the number of open files.  If
+the value of @var{nmerge} exceeds the resource limit, @command{sort}
+silently uses a smaller value.
 
 @item -o @var{output-file}
 @itemx --output=@var{output-file}
index 2fb01c461bd1f6598ed9226bf84c4cbe901b21ca..3a15a8781b0d16d9ae2e304f9c64e1b693e944b8 100644 (file)
@@ -204,6 +204,7 @@ TESTS =                                             \
   misc/sort-continue                           \
   misc/sort-files0-from                                \
   misc/sort-merge                              \
+  misc/sort-merge-fdlimit                      \
   misc/sort-rand                               \
   misc/sort-version                            \
   misc/split-a                                 \
diff --git a/tests/misc/sort-merge-fdlimit b/tests/misc/sort-merge-fdlimit
new file mode 100755 (executable)
index 0000000..82305be
--- /dev/null
@@ -0,0 +1,54 @@
+#!/bin/sh
+# Test whether sort avoids opening more file descriptors than it is
+# allowed when merging files.
+
+# Copyright (C) 2009 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+if test "$VERBOSE" = yes; then
+  set -x
+  sort --version
+fi
+
+. $srcdir/test-lib.sh
+require_ulimit_
+
+mkdir in err || framework_failure
+
+fail=0
+
+for i in `seq 17`; do
+  echo $i >in/$i
+done
+
+# When these tests are run inside the automated testing framework, they
+# have one less available file descriptor than when run outside the
+# automated testing framework. If a test with a batch size of b fails
+# inside the ATF, then the same test with batch size b+1 may pass outside
+# the ATF but fail inside it.
+
+# The default batch size (nmerge) is 16.
+(ulimit -n 19 \
+   && sort -m --batch-size=16 in/* 2>err/merge-default-err \
+   || ! grep "open failed" err/merge-default-err) || fail=1
+
+# If sort opens a file (/dev/urandom) to sort by random hashes of keys,
+# it needs to consider this file against its limit on open file
+# descriptors.
+(ulimit -n 20 \
+   && sort -mR --batch-size=16 in/* 2>err/merge-random-err \
+   || ! grep "open failed" err/merge-random-err) || fail=1
+
+Exit $fail