Sha256: 4a569b7a7e7103590cb85b172bf210e9876909980b8da6821568d9b911852a17
Contents?: true
Size: 935 Bytes
Versions: 2
Compression:
Stored size: 935 Bytes
Contents
require "delegate" class Backoff < Delegator def self.wrap(object, exception_classes, logger, options) return object if object.is_a?(self.class) new(object, exception_classes, logger, options) end def initialize(object, exception_classes, logger, options = {}) @exception_classes = exception_classes @delegate_sd_obj = object @logger = logger @sleeper = options[:sleeper] || Kernel.method(:sleep) @initial_backoff = options[:initial_backoff] || 1 @multiplier = options[:multiplier] || 2 end def __getobj__ @delegate_sd_obj end def method_missing(sym, *args, &block) _with_backoff { super } end def _with_backoff(backoff = @initial_backoff) yield rescue *@exception_classes => e @logger.error "Got #{e.class}, sleeping #{backoff}" @sleeper.call(backoff) @logger.info "Woke up after #{e.class} retrying again" backoff *= @multiplier retry end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
backoff-0.1.1 | lib/backoff.rb |
backoff-0.1.0 | lib/backoff.rb |