Feature #5980

Trying to Load File When Too Many Files Open Should Raise Something Other Than Plain LoadError

Added by Eero Saynatkari about 2 years ago. Updated over 1 year ago.

[ruby-core:42419]
Status:Feedback
Priority:Normal
Assignee:-
Category:-
Target version:next minor

Description

Currently encountering too many open file handles when trying to load/require a file simply raises a LoadError. It's not easy to determine that the root cause is exhaustion (see below for demonstration).

The error should be changed either to an actual EMFILE, a wrapper error, or at least alter the LoadError message to indicate the actual cause.

$ echo "p 1" > /tmp/test.rb

$ ruby -e 'fs = []; 250.times {|i| fs << File.open("/tmp/tst#{i}", "w") }; require "/tmp/test.rb"'
1

$ ruby -e 'fs = []; 252.times {|i| fs << File.open("/tmp/tst#{i}", "w") }'
-e:1:in initialize': Too many open files - /tmp/tst251 (Errno::EMFILE)
from -e:1:in
open'
from -e:1:in block in <main>'
from -e:1:in
times'
from -e:1:in `'

$ ruby -e 'fs = []; 251.times {|i| fs << File.open("/tmp/tst#{i}", "w") }; require "/tmp/test.rb"'
/Users/rue/.rvm/rubies/ruby-head/lib/ruby/siteruby/2.0.0/rubygems.rb:203:in try_activate': cannot load such file -- rubygems/specification (LoadError)
from /Users/rue/.rvm/rubies/ruby-head/lib/ruby/site_ruby/2.0.0/rubygems/custom_require.rb:58:in
rescue in require'
from /Users/rue/.rvm/rubies/ruby-head/lib/ruby/site
ruby/2.0.0/rubygems/custom_require.rb:35:in require'
from -e:1:in
'

$ ruby -v
ruby 2.0.0dev (2012-02-07 trunk 34462) [x86_64-darwin11.3.0]

History

#1 Updated by Yui NARUSE about 2 years ago

If it raises other than LoadError, it breaks codes which uses LoadError.
Changing additional message can be accepted.

#2 Updated by Koichi Sasada about 2 years ago

  • Tracker changed from Bug to Feature

#3 Updated by Yusuke Endoh about 2 years ago

  • Status changed from Open to Feedback

Someone has to volunteer to write a patch.

Yusuke Endoh mame@tsg.ne.jp

#4 Updated by Yusuke Endoh over 1 year ago

  • Target version set to next minor

Also available in: Atom PDF