Actions
Bug #9257
closedflock OS dependency problem in RubyGems
Description
On Solaris, after r44157, many tests of RubyGems failed or raise error during make test-all.
For example,
- Failure:
TestGemDependencyInstaller#test_install_security_policy [/XXX/test/rubygems/test_gem_dependency_installer.rb:846]:
[Gem::Security::Exception] exception expected, not
Class: Errno::EBADF
Message: <"Bad file number @ rb_file_flock - /var/tmp/test_rubygems_21075/spec_c
ache/gems.example.com%80/quick/Marshal.4.8/b-1.gemspec">
---Backtrace---
/XXX/lib/rubygems.rb:768:inflock' /XXX/lib/rubygems.rb:768:in
block in read_binary'
/XXX/lib/rubygems.rb:767:inopen' /XXX/lib/rubygems.rb:767:in
read_binary'
/XXX/lib/rubygems/source.rb:133:infetch_spec' /XXX/lib/rubygems/resolver/index_specification.rb:64:in
spec'
/XXX/lib/rubygems/resolver/specification.rb:85:ininstallable_platform?' /XXX/lib/rubygems/platform.rb:34:in
installable?'
/XXX/lib/rubygems/resolver.rb:426:inblock in select_local_platforms' /XXX/lib/rubygems/resolver.rb:425:in
select'
/XXX/lib/rubygems/resolver.rb:425:inselect_local_platforms' /XXX/lib/rubygems/resolver.rb:200:in
find_possible'
/XXX/lib/rubygems/resolver.rb:327:inresolve_for' /XXX/lib/rubygems/resolver.rb:165:in
resolve'
/XXX/lib/rubygems/request_set.rb:238:inresolve' /XXX/lib/rubygems/dependency_installer.rb:434:in
resolve_dependencies'
/XXX/lib/rubygems/dependency_installer.rb:371:ininstall' /XXX/test/rubygems/test_gem_dependency_installer.rb:847:in
block in test_install_security_policy'
- Error:
TestGemResolverLockSpecification#test_install:
Errno::EBADF: Bad file number @ rb_file_flock - /var/tmp/test_rubygems_21075/gems/a-2.gem
/XXX/lib/rubygems.rb:768:inflock' /XXX/lib/rubygems.rb:768:in
block in read_binary'
/XXX/lib/rubygems.rb:767:inopen' /XXX/lib/rubygems.rb:767:in
read_binary'
/XXX/lib/rubygems/test_utilities.rb:328:inblock in setup_fetcher' /XXX/lib/rubygems/test_utilities.rb:324:in
each'
/XXX/lib/rubygems/test_utilities.rb:324:insetup_fetcher' /XXX/lib/rubygems/test_utilities.rb:247:in
execute'
/XXX/lib/rubygems/test_utilities.rb:207:indeclare' /XXX/lib/rubygems/test_case.rb:1207:in
spec_fetcher'
/XXX/test/rubygems/test_gem_resolver_lock_specification.rb:36:in `test_install'
The failures/errors is caused in line 768 in lib/rubygems.rb,
in the self.read_binary method.
def self.read_binary(path)
File.open path, binary_mode do |f|
f.flock(File::LOCK_EX)
f.read
end
end
On Solaris (and probably on JRuby), files opened with read-only mode can not be exclusively locked by using flock.
FYI, when similar problem was found in Rails, the solution was to open the file with read-write mode.
https://rails.lighthouseapp.com/projects/8994/tickets/6662-fileflock-cant-lock-read-only-file-for-exclusive-access
Actions
Like0
Like0Like0Like0