1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

tool/downloader.rb: retry SocketError

I would like to stabilize RubyCI.

https://rubyci.org/logs/rubyci.s3.amazonaws.com/fedora26/ruby-trunk/log/20180205T123003Z.fail.html.gz

downloading did_you_mean-1.2.0.gem ... /home/hsbt/chkbuild/tmp/build/20180205T123003Z/tmp/ruby-snapshot20180205-23226-3201ha/ruby-2.6.0-r62226/tool/downloader.rb:212:in `rescue in download': failed to download did_you_mean-1.2.0.gem (RuntimeError)
SocketError: Failed to open TCP connection to rubygems.org:443 (getaddrinfo: Name or service not known): https://rubygems.org/downloads/did_you_mean-1.2.0.gem
	from /home/hsbt/chkbuild/tmp/build/20180205T123003Z/tmp/ruby-snapshot20180205-23226-3201ha/ruby-2.6.0-r62226/tool/downloader.rb:123:in `download'
	from /home/hsbt/chkbuild/tmp/build/20180205T123003Z/tmp/ruby-snapshot20180205-23226-3201ha/ruby-2.6.0-r62226/tool/downloader.rb:66:in `download'
	from -e:4:in `<main>'
make[1]: *** [Makefile:1685: update-gems] Error 1

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62231 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
k0kubun 2018-02-05 13:24:00 +00:00
parent 827322569f
commit 349e7fcb66

View file

@ -161,7 +161,7 @@ class Downloader
$stdout.flush $stdout.flush
end end
begin begin
data = with_retry(3, Errno::ETIMEDOUT) do data = with_retry(3, [Errno::ETIMEDOUT, SocketError]) do
url.read(options.merge(http_options(file, since.nil? ? true : since))) url.read(options.merge(http_options(file, since.nil? ? true : since)))
end end
rescue OpenURI::HTTPError => http_error rescue OpenURI::HTTPError => http_error
@ -267,11 +267,11 @@ class Downloader
end end
end end
def self.with_retry(max_times, exception, &block) def self.with_retry(max_times, exceptions, &block)
times = 0 times = 0
begin begin
block.call block.call
rescue exception => e rescue *exceptions => e
times += 1 times += 1
if times <= max_times if times <= max_times
$stderr.puts "retrying #{e.class} (#{e.message}) after #{times ** 2} seconds..." $stderr.puts "retrying #{e.class} (#{e.message}) after #{times ** 2} seconds..."