diff options
-rw-r--r-- | THANKS | 5 | ||||
-rw-r--r-- | doc/coreutils.texi | 14 | ||||
-rw-r--r-- | tests/Makefile.am | 1 | ||||
-rwxr-xr-x | tests/misc/sort-merge-fdlimit | 54 |
4 files changed, 69 insertions, 5 deletions
@@ -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 diff --git a/doc/coreutils.texi b/doc/coreutils.texi index 6f8c19761..04db67663 100644 --- a/doc/coreutils.texi +++ b/doc/coreutils.texi @@ -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} diff --git a/tests/Makefile.am b/tests/Makefile.am index 2fb01c461..3a15a8781 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -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 index 000000000..82305be41 --- /dev/null +++ b/tests/misc/sort-merge-fdlimit @@ -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 |