Sha256: d94449b2b8bb3599dd99c4777531c82e7859df8803c2e035783aa19d8f14ce85
Contents?: true
Size: 920 Bytes
Versions: 19
Compression:
Stored size: 920 Bytes
Contents
require "log4r" module Vagrant module Util module Retryable # Retries a given block a specified number of times in the # event the specified exception is raised. If the retries # run out, the final exception is raised. # # This code is adapted slightly from the following blog post: # http://blog.codefront.net/2008/01/14/retrying-code-blocks-in-ruby-on-exceptions-whatever/ def retryable(opts=nil) logger = nil opts = { :tries => 1, :on => Exception }.merge(opts || {}) begin return yield rescue *opts[:on] => e if (opts[:tries] -= 1) > 0 logger = Log4r::Logger.new("vagrant::util::retryable") logger.info("Retryable exception raised: #{e.inspect}") sleep opts[:sleep].to_f if opts[:sleep] retry end raise end end end end end
Version data entries
19 entries across 19 versions & 6 rubygems